您的位置:首页 > 其它

大端小端之我见

2014-05-13 17:34 337 查看
最近看资料的过程中,对大端和小段的问题又差点搞糊涂了,今天特意查了资料,总结了本文,读起文档来,又酣畅了不少,所谓胸中有丘壑,自然心中不慌。

主要还是以前对大端小端的理解太肤浅,仅限于会解几道题,今天读了几篇博文,发现大端小端还细分为字节序和比特序,这才结了我心中疑惑。

1.首先讲一下字节序的规则,先科普一下,字节是计算机存储数据的基本单位,1byte=1B=8bit,废话不多表,进入正题。大端还是小端是指字节在内存中的存储顺序。大端字节序,高字节存于内存低地址,低字节存于内存高地址;小端字节序反之。(这句话是精华)

以64位为例,大端模式下64位数据总线(或外部总线)的msb是第0位,MSB是数据总线(或外部总线)的第0~7的字段;而lsb是第63位,LSB是第56~63字段。小端模式下64位总线的msb是第63位,MSB是数据总线(或外部总线)的第63~56位,lsb是第0位,LSB是7~0字段。

如一个64位long型数据0x123456789abcdef0

大端字节序:

内存高地址--> 0xf0

0xde

0xbc

0x9a

0x78

        0x56

        0x34

内存低地址--> 0x12

小端字节序:

内存高地址--> 0x12

0x34

       0x56

0x78

0x9a

0xbc

       0xde

内存低地址--> 0xf0

IBM和Freescale的PowerPC处理器使用大端模式,而Intel的Pentuim处理器使用小端模式。另外,互联网使用的网络字节顺序采用大端模式进行编址,这多半是因为PowerPC主导了通讯市场。另外一些设备,例如PCI的寄存器是小端的,开发人员需要注意PCI字节序是小端的问题,可以借助<asm/byteorder.h>中的函数去实现系统字节序向PCI字节序的转变。

2.再来讲一下字节内的比特序,无论是大端还是小端,都有自己约定俗成的寄存器,数据总线的比特序定义,这一点在阅读文档的时候就能体会到啦。

一个采用大端模式的64位处理器,如基于Freescale e6500内核的T4240QDS,将其寄存器的最高位msb(most significant bit)定义为0,最低位lsb(lease significant bit)定义为63;而小端模式的64位处理器,将其寄存器的最高位定义为63,低位地址定义为0。

采用大端模式的64位处理器数据总线的最高位为0,最低位为31;采用小端模式的64位处理器的数据总线的最高位为31,最低位为0。如图4.5所示。

大端:0------------------------------->63

小端:63-------------------------------->0

图:大小端模式处理器的寄存器的定义

还是以上述数据0x00000001为例,其在内存中的存储

大端序:内存低比特位 00000001 内存高比特位

小端序:内存低比特位 10000000 内存高比特位
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: