如果我写下面的
section .data
align 4
X: db 1
Y: dw 5
Z: db 0x11
section .text
add dword [X], 0xAA000101
我试图理解big endian和little endian表示之间的差异,我不明白每个表示的每个变量的值是多少?他们会一样吗?
答案 0 :(得分:2)
看看这些图片:
这是所有体系结构/指令集的字节序列表
答案 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位值时。添加0x01000511
和0xAA000101
会向我们提供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)