我只想确定我读得对:
movl 12(%ebp), %edx
leal (%edx, %edx, 4), %eax我读第一行为:edx = [epb + 12],第二行为:eax = edx + edx*4
有人能澄清吗?
另外,如果我有以下两行:
leal (%edx, %edx, 4), %eax
leal (%edx, %edx, 2), %eax一旦执行了第二行,eax寄存器会被覆盖吗?
eax = edx + edx*4把地址乘以4?或者地址的内容是4?
发布于 2012-02-05 21:45:23
你是对的。LEA指令用于加载()有效地址,如果不需要这些标志,则可以用于地址算法,有时也可以用于普通算法。
发布于 2012-02-05 21:45:38
指令movl 12(%ebp), %edx的意思是:edx = [ebp + 12]。这是对地址ebp + 12的内存引用(读取操作),其内容(双字)被读到edx寄存器。
指令leal (%edx, %edx, 4), %eax的意思是:eax = edx * 5 (这是eax = edx + edx * 4的简化)。leal指令不执行内存引用。它只对寄存器执行算术。
作为对第二个问题的回答:是的,eax将被覆盖,因为leal (%edx, %edx, 2), %eax指令的意思是与第一个指令eax = edx * 5不同的eax = edx * 3。
https://stackoverflow.com/questions/9153282
复制相似问题