AT&T 语法
我有以下代码:
x: .word 1
y: .word 0
z: .word 2
mov x, %eax # eax = 0x1
x是如何移入%eax的?
我知道如果没有后缀,mov默认移动4个字节。
另外,x,y,z我知道它们在内存中彼此相邻存储,所以我希望它会是这样的:
x y z
| | |
00 01 | 00 00 | 00 02
mov 将占用前 4 个字节:
00 01 00 00
。所以,我期望 eax 的前 4 个字节以相反的顺序排列,因为 x86 使用小端编码 -> eax=0x00 00 01 00 这不是 0x1。
我做错了什么?
另外,x,y,z我知道它们在内存中彼此相邻存储,所以我希望它会是这样的:
x y z | | | 00 01 | 00 00 | 00 02
这些字节的顺序错误!
作为小端,它是:
x y z
| | |
01 00 | 00 00 | 02 00
在 X 处取一个完整的双字,因此会发现 01 00 00 00 等于 00000001h。