装配leal和movl的区别

时间:2012-11-22 16:50:37

标签: assembly x86 att

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

当我从我的电脑系统书中读到时, 如果有一个前提是$ eax包含x值而%ecx包含y, 然后上面的意思是,x + 4y进入%edx。

然后如果是

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

,那么上面的leal表达是不是同一个?

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

当我看到leal(%eax,%ecx,4), %edx等于将x+4y放入edx注册时, 然后没有t it mean that it 'referenced'%eax and%ecx`和提取值x和y用于计算??

  • 不是吗“()”的意思是'引用'??

1 个答案:

答案 0 :(得分:12)

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

所以:

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