- 1.1 数据在内存中的存储模式
- 1.2 C程序:判断大小端模式
- 1.3 x86-64 是“小端模式”
- 1.4 MCS-51&Keil是“大端模式”
数据:0xAB123450
设:内存地址向上生长 0000H ~ FFFFH
- 大端模式 (Big Endian)
存储单元地址增长:
| 0x0100 | 0x0101 | 0x0102 | 0x0103 |
|---|---|---|---|
| AB | 12 | 34 | 50 |
- 小端模式 (Little Endian)
存储单元地址增长:
| 0x0100 | 0x0101 | 0x0102 | 0x0103 |
|---|---|---|---|
| 50 | 34 | 12 | AB |
现在大多数计算机存储数据的形式都是“小端模式”。如今好多处理器都可以支持“双端模式”,既可以配置成“大端模式”,又可以配置成“小端模式”;但是大多数操作系统都是运行在“小端模式”的。
在进行单片机汇编程序设计时,请根据实际情况选择数据在内存中的存储模式!不同的单片机和搭配不同的编译器,其数据的存储模式是不一样的!
1.2 C程序:判断大小端模式定义存储模式枚举类型:
typedef enum tag_Endian {
BIG_ENDIAN = 0,
LITTLE_ENDIAN = 1,
} EndianTypeDef;
判断大小端模式的函数实现:
EndianTypeDef check_endian ()
{
EndianTypeDef mode = LITTLE_ENDIAN;
uint16_t test_dat = 0x0001;
if ( ( (char *)(&test_dat) )[1] == 0x01 ) {
mode = BIG_ENDIAN;
}
return mode;
}
在标准输出设备上打印大小端模式:
void show_memory_mode ()
{
EndianTypeDef mode;
mode = check_endian();
printf ("Endian mode in this machine is "%s". rn",
(mode == LITTLE_ENDIAN) ?
"Little-Endian" :
"Big-Endian");
}
1.3 x86-64 是“小端模式”
int main(int argc, char *argv[])
{
show_memory_mode();
return 0;
}
VSCode&Mingw-w64开发环境测试:
void show_memory_mode()
{
if ( Little_Endian == check_memory_mode() ) {
printf("MCS-51: Little-Endianrn");
} else {
printf("MCS-51: Big-Endianrn");
}
}
Proteus仿真结果:



