Big endian和Little endian表示

时间:2014-06-22 06:59:13

标签: assembly endianness

如果我写下面的

section .data
    align 4
    X:  db 1
    Y:  dw 5
    Z:  db 0x11
section .text
    add dword [X], 0xAA000101

我试图理解big endian和little endian表示之间的差异,我不明白每个表示的每个变量的值是多少?他们会一样吗?

2 个答案:

答案 0 :(得分:2)

看看这些图片:

enter image description here

enter image description here

enter image description here

这是所有体系结构/指令集的字节序列表

enter image description here

答案 1 :(得分:0)

在big-endian配置中,双字的最高有效字节(x86上的32位)存储在最小地址中,最低有效字节存储在最大地址中。
在little-endian配置中,最低有效字节存储在最小地址中。

让我们先看看big-endian的例子:

如果我们在big-endian配置中将变量布局在内存中,我们得到:

; -> Address increases ->

X: 01
Y: 00 05
Z: 11

或组合在一起:

 01 00 05 11
MSB       LSB

当被视为等于0x01000511的32位值时。添加0x010005110xAA000101会向我们提供0xAB000612。如果我们再次查看内存中的各个字节,我们得到:

; -> Address increases ->
AB 00 06 12

结果是:

X = 0xAB
Y = 6
Z = 0x12

在little-endian配置中,我们将:

; -> Address increases ->

X: 01
Y: 05 00
Z: 11

或组合在一起:

 01 05 00 11
LSB       MSB

被视为等于0x11000501的32位值。添加0xAA000101会给我们0xBB000602。当我们查看单个字节时:

02 06 00 BB

结果:

X = 2
Y = 6
Z = 0xBB

(注意:所有x86处理器,AFAIK都是little-endian)