汇编代码说明

时间:2013-08-29 07:42:16

标签: assembly cpu-registers instructions mov

这是4行汇编代码。我想要了解他们。 (这是英特尔syntex。)

    – mov eax, ebx
    – mov eax, [ebx]
    – mov eax, [ebx+ecx*X] (X=1, 2, 4, 8)
    – mov eax, [ebx+ecx*X+Y] (Y= one byte, 0-255 or 4 bytes, 0-2^32-1)

1)第一行将ebx寄存器中的值复制到eax寄存器。 2)第二行将找到ebx寄存器中的任何值,将其作为内存地址,将转到该内存地址。它会将该存储器地址中的值复制到eax寄存器。 3)第三行将获得ebx寄存器的值,将其视为内存地址。将ecx * X添加到它并获取一个新地址,然后转到这个新地址并获取值并将其复制到eax。 4)我无法获得第4行。

任何人都可以检查,我对说明的理解是否正确?如果他们不正确,请好好解释一下。也解释了第4行。

提前致谢。

2 个答案:

答案 0 :(得分:0)

  

1-3)

你的假设对我来说是正确的。

  

4)我无法获得第4行。

除了添加绝对偏移之外,它与第3个相同。例如:

mov eax,[ebx+ecx*4+arrays]

arrays:
array1: dd 0,1,2,3
array2: dd 3,2,1,0

如果您将ebx设置为0,则会阅读ecx:th的{​​{1}}元素。如果您将array1设置为16(4 * sizeof(dword)),则会阅读ebx的{​​{1}}元素。

答案 1 :(得分:0)

x86上的偏移计算的通用公式是,

Offset = Base + (Index * Scale) + Displacement

其中,在您的示例中,ebx是基础,ecx是索引,X是比例,Y是排名。您可以将(3)和(4)视为相同,其中(3)只是(4),Y等于0。