这是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行。
提前致谢。
答案 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。