Addl instruction explanation
First, I hate AT&T syntax, which is what you have here... that aside.
EAX
contains 0x100
. 0x100
has the value 0xFF
in it.
ECX
contains 0x1
.
0x1 + 0xFF = 0x100
. So far so good.
The final result is then placed into the address pointed to by EAX
. Therefore, (0X100) == 0x100
I think you were most of the way there.
Evgeniy Kleban
Updated on June 04, 2022Comments
-
Evgeniy Kleban almost 2 years
I'm studying assembly language and can't resolve the following exercise myself.
Assume the following values are stored at the indicated memory addresses and registers:
Now, we have an instruction:
addl %ecx , (%eax)
For me it means - storing the result of addition of values stored in %ecx and in memory address (%eax), in a memory address
(%eax)
.Correct answer for that exercise is : Value 0x100 and destination address 0x100.
I understand that right operand is destination address, but how did we get value of
0x100
by the calculation%ecx
+(%eax)
? -
xotix over 4 yearsThanks for the explanation. I want to add: It also helps to think of
addX src, dest
asdest += src
so in C:dest = dest + src
. Also note that parentheses notate a pointer. The parentheses basically tell us "treat the value as an address and follow it", so basically "dereferencing" it. But attention: When using e.g. the LEA instruction, the parentheses don't dereference the pinter since LEA doesn't really touch memory. That's correct? -
David Hoelzer over 4 yearsYou have that right, @xotix. Check this out: stackoverflow.com/questions/1658294/…