(汇编 x86)当一个单词使用 4 字节 mov 时会发生什么?

问题描述 投票:0回答:1

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。

我做错了什么?

assembly x86 endianness
1个回答
0
投票

另外,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。

© www.soinside.com 2019 - 2024. All rights reserved.