使用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个回答
1
投票

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


按照这个顺序,mov将从右到左取前4个字节?喜欢dcba吗? 01 (一) 00 (二) | 00 (c) 00 (d)

如果喜欢这样想。执行双字大小的

mov
,CPU 获取 4 字节的内存块,并且 CPU 只知道第一个字节需要进入 %EAX 的最低字节,并朝着接收第四个字节的最高字节努力。

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