lea assembly instruction

断了今生、忘了曾经 提交于 2019-11-28 00:34:10

问题


I Just want to make sure I am reading this right:

movl 12(%ebp), %edx
leal (%edx, %edx, 4), %eax

I read the first line as: edx = [epb + 12], and the second line as: eax = edx + edx*4

Can anybody clarify?

Also, what if I had the following two lines:

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

Once the second line is executed, would the eax register be overwritten?

And the eax = edx + edx*4 is multiplying the address by 4? Or the contents of the address by 4?


回答1:


You're right. The LEA instruction is used to Load (the) Effective Address, and can be used for address arithmetic and sometimes also ordinary arithmetic, if you don't need the flags.




回答2:


The instruction movl 12(%ebp), %edx means: edx = [ebp + 12]. This is a memory reference (a read operation) to the address ebp + 12 whose contents (a double word) are read to edx register.

The instruction leal (%edx, %edx, 4), %eax means: eax = edx * 5 (which is a simplification of eax = edx + edx * 4). The leal instruction doesn't do memory references. It only performs arithmetic with registers.

As an answer to your second question: Yes, eax would be overwritten because the instruction leal (%edx, %edx, 2), %eax means eax = edx * 3 which is different from the first instruction, eax = edx * 5.



来源:https://stackoverflow.com/questions/9153282/lea-assembly-instruction

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