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用于计算??
答案 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