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?
Best Answer
The instruction
movl 12(%ebp), %edx
means:edx = [ebp + 12]
. This is a memory reference (a read operation) to the addressebp + 12
whose contents (a double word) are read toedx
register.The instruction
leal (%edx, %edx, 4), %eax
means:eax = edx * 5
(which is a simplification ofeax = edx + edx * 4
). Theleal
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 instructionleal (%edx, %edx, 2), %eax
meanseax = edx * 3
which is different from the first instruction,eax = edx * 5
.