movl(%eax,%edx,4),%ecx指令有什么作用?

时间:2016-11-15 20:27:35

标签: assembly x86 mov

我对汇编有一个非常简短的了解,并对这段代码的作用感到困惑?

movl (%eax, %edx, 4), %ecx

我的理解是%edx乘以4,然后加上%eax的值,然后存储在%ecx这是表格中给出的值< / p>

Register Values

给出的答案是0x11但是我没有得到答案。

1 个答案:

答案 0 :(得分:3)

EDX乘以4,添加到EAX,从该地址的内存读取4字节值,并放入ECX。

除非是地址计算,否则MOV一般不会执行算术。

在您的特定情况下:edx = 3eax = 0x100temporary_address_in_CPU_during_mov = eax + edx * 4 = 0x100 + 3*4 = 0x10C。地址0x10C的内存中的值为0x11

当CPU执行地址数学运算时,这个地址算术可以通过lea指令使用,但不是从内存加载值,而是只存储计算出的地址,所以:

leal (%eax, %edx, 4), %ecx

将使用值ecx加载0x10C(无需访问内存)。这有时被欺骗了#34;用于进行简单算术,例如eax = 5*eaxlea (eax,eax,4),eax(可能比imul快,并且不会更改标志寄存器,有时也很方便)。