高位优先与低位优先

ZDNet软件频道 时间:2002-09-04 作者:够意思工作组 |  我要评论()
本文关键词:
Endians是什么意思?它是数据在内存中的排列顺序。在微处理器中,数据总是按照高位优先(BIG ENDIAN)方式存放的。但在内存中,数据存放顺序则因微处理器厂商的不同而不同。

Endians是什么意思?它是数据在内存中的排列顺序。在微处理器中,象long/DWORD(32 bits) 0x12345678 这样的数据总是按照高位优先(BIG ENDIAN)方式存放的。但在内存中,数据存放顺序则因微处理器厂商的不同而不同。

数据大小的不同:

Byte:一个字节,标记为byte 0

Word:二个字节,从byte 0到byte 1

Long : 四个字节,从byte 0到byte 3

每个byte由8个位(bit)组成,从bit 7 到 bit 0 (从左往右)。

每个word由16个 bit 组成,从bit 15 到 bit 0 (从左往右)。

每个long由32个 bit 组成,从bit 31 到 bit 0 (从左往右)。

byte 0 是LSB (Less Significant Byte,最低有效字节),byte 3 是MSB (Most Significant Byte,最高有效字节)。因此如果有:

Byte :    3    2    1    0

Number :      

则值等于:*256^3 + *256^2 + *256^1 + *256^0

word类型也一样。word 0 是LSW (Less Significant Word,最低有效字),word 1 是MSW (Most Significant Word,最高有效字):

Word :     1       0

Number : 34   78

值等于:34*65536^1 + 78*65536^0.

字节存放方式:

BIG ENDIAN : 最低地址存放高位字节,可称为高位优先。内存从最低地址开始,顺序存放:

Byte : Byte 3 () (正好是MSB)

Word : Byte 3 到 Byte 2,即word 1 (34) (按照从MSB 到 LSB 顺序存放)

Long : Byte 3 到 Byte 0,即word 1 到 word 0 (345678) (按照从MSB 到 LSB 顺序存放)

BIG ENDIAN 存放方式正是我们的书写方式,大数先写(比如,总是按照千、百、十、个位来书写数字)。而且所有的处理器都是按照这个顺序存放数据的。

在内存中,根据地址 n (+ 位移量),存放的数据分别是:

n+0 : Byte 3 () (MSB 优先: BIG Endian)

n+1 : Byte 2 ()

n+2 : Byte 1 ()

n+3 : Byte 0 () (LSB)

Byte 0 的位置是:'n+3' (在 'n+3', byte 0 等于 )

Word 0 的位置是:'n+2' ('n+2' 到 'n+3', byte 1 到 byte 0, word 0 等于 78)

Long 0 的位置是:'n+0' ('n+0' 到 'n+3', byte 3 到 byte 0, long 0 等于 345678)

高位优先方式对于嵌入式系统和调试内存映象都很有用。在寄存器中读到的数据就是内存里的数据。但是如果要在word 0 的地址 'n+2' 处提取低位字(Low Word),就要用附加的内存,通过移位后才能得到,所以会稍慢些。

例如在寄存器中有:345678

从地址 'n+0' 开始:       (按字节从MSB 到 LSB,即byte 3 到 byte 0)

从地址'n+0' 开始: 34  78 (按字从MSB 到 LSB, 即word 1 到 word 0)


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134