Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 大端和小端表示_Assembly_Endianness - Fatal编程技术网

Assembly 大端和小端表示

Assembly 大端和小端表示,assembly,endianness,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表示法之间的区别,但我不知道每个表示法的每个变量的值是多少?它们是否相同?在大端配置中,x86上双字32位的最高有效字节存储在最小地址,最低有效字节存储在最大地址。 在小端配置中,最低有效字节存储在最小地

如果我写下

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

我试图理解big-endian和little-endian表示法之间的区别,但我不知道每个表示法的每个变量的值是多少?它们是否相同?

在大端配置中,x86上双字32位的最高有效字节存储在最小地址,最低有效字节存储在最大地址。 在小端配置中,最低有效字节存储在最小地址中

首先让我们以big endian为例:

如果我们在内存中以big-endian配置排列变量,我们会得到:

; -> Address increases ->

X: 01
Y: 00 05
Z: 11
或者,组合在一起:

 01 00 05 11
MSB       LSB
 01 05 00 11
LSB       MSB
当被视为等于0x01000511的32位值时。添加0x01000511和0xAA000101将得到0xAB000612。如果我们再次查看内存中的单个字节,我们会得到:

; -> Address increases ->
AB 00 06 12
因此,结果是:

X = 0xAB
Y = 6
Z = 0x12
在小endian配置中,我们将有:

; -> Address increases ->

X: 01
Y: 05 00
Z: 11
或者,组合在一起:

 01 00 05 11
MSB       LSB
 01 05 00 11
LSB       MSB
视为等于0x11000501的32位值。添加0xAA000101将得到0xBB000602。当我们查看单个字节时,我们得到:

02 06 00 BB
结果是:

X = 2
Y = 6
Z = 0xBB

注意:所有x86处理器AFAIK都是little endian

请看以下图片:

这是所有体系结构/指令集的端号列表