如何区分lea和mov两种指令
如何区分lea和mov两种指令?
可以这样理解,lea是直接操作寄存器内部存储的值,对于一些寄存器,比如%esp,%ebp,对应栈顶指针,栈底指针,本身存储的就是一个地址,因此lea操作这类寄存器时,体现出了加载有效地址的作用。
而某些寄存器如果内部存储的不是一个地址,是一个具体的数,如果此时需要对这个数做一些算术运算,比如加一减一,乘二乘四等,同样可以通过lea指令实现这个效果,此时lea仅仅体现的是算术运算的作用。
具体的例子比如CSAPP第三章156页讲递归指令时,对入口参数n减一的操作就通过lea实现(leal -1(%ebx),%eax)。
而mov的作用分情况讨论,对于操作数是寄存器本身值的,那么就是直接操作寄存器内部存储的值,比如 movl %esp,%ebp;如果操作数对应的是内存中的数据,那么就是操作寄存器中存储的地址对应的内存中的值,比如movl 8(%ebp),%ebx .对于CSAPP中使用的汇编,一般可以通过操作数是否有括号进行区分。
作者:chem2cs
链接:https://www.zhihu.com/question/40720890/answer/223062818
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

浙公网安备 33010602011771号