assembly leal and movl difference [duplicate]

折月煮酒 提交于 2019-11-27 06:23:41

问题


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

as I was reading from my computer systems book, if there`s premises that $eax contains x value and %ecx contains y, then the above means, x+4y putting into %edx.

then if it is

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

, then isn`t the same one with leal expression above?

As I know, leal creates address that can be referenced,not referencing by itself like movl, but

when I saw leal(%eax,%ecx,4), %edx equals putting x+4y into edx register, then doesnt it mean that it 'referenced'%eaxand%ecx` and extracted value x and y for using computation??

  • doesn`t it "()" means 'referenced'??

回答1:


LEA loads an effective address generated by an address calculation into a register. MOV moves something somewhere, when using SIB addressing as source operand, it moves whatever is at the address generated by the address calculation into the target operand.

So:

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


来源:https://stackoverflow.com/questions/13517083/assembly-leal-and-movl-difference

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!