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