大端小端之我见

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值