Addl instruction explanation

13,478

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.

Share:
13,478
Evgeniy Kleban
Author by

Evgeniy Kleban

Updated on June 04, 2022

Comments

  • Evgeniy Kleban
    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:

    enter image description here

    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
    xotix over 4 years
    Thanks for the explanation. I want to add: It also helps to think of addX src, dest as dest += 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
    David Hoelzer over 4 years
    You have that right, @xotix. Check this out: stackoverflow.com/questions/1658294/…