计算机多字节数据存储模式(大/小端模式)

造冰箱的大熊猫@cnblogs 2021/4/10

 

1、大端模式 vs 小端模式

多字节数据存储时,可以先高字节再低字节,也可以是先低字节再高字节。以32位无符号整数0x12345678为例,该数值在存储器中占用四个字节的存储空间。如果偏移址addr=0x12,addr+1=0x34,addr+2=0x56,addr+3=0x78,为大端模式(高字节写入存储器低地址位)。如果偏移址addr=0x78,addr+1=0x56,addr+2=0x34,addr+3=0x12,为小端模式(高字节写入存储器高地址位)

 

2、不同计算机系统的大小端模式

之前编写过一个小软件用于查询计算机的大小端模式,后发现完全没有必要。

1)大小端模式由处理器决定。可通过查阅处理器技术资料获知处理器的大小端模式,无需使用软件获取。

2)Oracle数据库提供功能可查询多种计算机系统的大小端模式。根据查询结果网址截图),个人计算机常用的x86和x86_64处理器(无论是运行Linux、Windows还是Mac操作系统)为小端模式

3)早期苹果计算机使用过的PowerPC处理器为大端模式

4)TI公司C6678 DSP具有一个名为LENDIAN的管脚。DSP启动时该管脚上的电平高低决定了DSP使用大端模式还是小端模式

 

3、检查计算机系统大小端模式的编程方法

检查计算机系统大小端模式的C代码示例如下:

WORD dummy = 0x1234;
BYTE * pt = ( BYTE * )( &dummy );
if ( (*pt) == 0x12 )
printf ( "当前计算机系统为大端模式\n" );
else
printf ( "当前计算机系统为小端模式\n" );

 

4、IA-32、IA-64、x86、x86_64和AMD64的区别

为便于理解2中Oracle数据库查询结果,对不同处理器架构标识予以说明:

x86:Intel公司研制了16位8086处理器后,又研制了更高性能的16位处理器80286和32位处理器80386。这些处理器具备向后兼容特性,也就是说新型号处理器支持旧型号处理器的指令集。此外,AMD等公司也生产80x86处理器。这些80x86处理器被统称为x86处理器,对应的指令集也被称为x86指令集。现在,由于16位x86处理器已退出商用市场,x86也特指32位x86微处理器。

IA-32:为了与其它生厂商生产的x86处理器区分开来,Intel从80486开始使用IA-32标识自家的32位处理器。

IA-64:Intel推出过名为Itanium(安腾)的64位处理器。该处理器使用特殊指令集,不兼容x86指令集,硬件和软件都需要重新开发,初期应用于服务器,后来在x86_64处理器的冲击下成为了“历史”。

x86_64、AMD64:AMD研制的64位处理器支持x86指令集,具有更好的兼容性,获得了用户的青睐。最初,AMD64特指AMD的64位处理器。后来,随着Intel也开始生产支持x86指令集的64位处理器,使用x86_64统称AMD和Intel的64位处理器。

 

参考资料

[1] Big Endian and Little Endian operating systems

[2] Intel为什么不取消AMD的X86架构授权 @ 知乎

posted @ 2021-04-11 00:30  造冰箱的大熊猫  阅读(749)  评论(0编辑  收藏  举报