0

这些是 4 行汇编代码。我正在努力理解他们。(这是英特尔语法。)

    – 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 行。

提前致谢。

4

2 回答 2

0

1-3)

你的假设在我看来是正确的。

4)我无法获得第 4 行。

它与第三个相同,只是添加了一个绝对偏移量。例如:

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

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

如果您设置ebx为 0,您将ecx:th读取array1. 如果你设置ebx为 16 (4 * sizeof(dword)) 你会ecx:th读到array2.

于 2013-08-29T07:52:44.700 回答
0

x86上偏移量计算的一般公式是,

Offset = Base + (Index * Scale) + Displacement

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

于 2013-08-29T08:05:51.153 回答