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

正如我从我的计算机系统书籍中阅读的那样,如果假设 $eax 包含 x 值并且 %ecx 包含 y,那么上面的意思是,x+4y 放入 %edx。

那么如果是

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

,那么上面的表情不就是同一个吗?

据我所知, leal 创建可以引用的地址,而不是像 movl 那样自己引用,但是

当我看到leal(%eax,%ecx,4), %edx将等于放入x+4y寄存器edx时,t it mean that it 'referenced'%eax and%ecx` 并提取值 x 和 y 用于计算?

  • 不是“()”表示“引用”吗?
4

1 回答 1

14

LEA将地址计算生成的有效地址加载到寄存器中。MOV将某些东西移动到某处,当使用 SIB 寻址作为源操作数时,它将地址计算生成的地址处的任何内容移动到目标操作数中。

所以:

leal (%eax,%ecx,4), %edx  ←  moves %eax+%ecx*4 into %edx
movl (%eax,%ecx,4), %edx  ←  moves whatever is at address %eax+%ecx*4 into %edx
于 2012-11-22T22:37:00.773 回答