Wednesday 13 February 2019

mov instruction in x86 assembly



From what I've read about mov, it copies the second argument into the first argument. Then, what does this do?




movl 8(%ebp), %edx


It copies whatever is in edx to the first parameter of the function (since an offset of +8 from ebp is a parameter)?



I feel like what this really means is moving the first parameter into the edx register, but I read on Wikipedia that it is the other way around?


Answer



movl 8(%ebp), %edx


is in "AT&T Syntax"; in this syntax, the source comes first and the destination second. So yes, your belief is correct. Most documentation uses the "Intel Syntax", which has the reverse ordering. This is a source of considerable confusion for people new to x86 assembly.



In Intel Syntax, your instruction would be written:



mov edx, [ebp + 8]


Note the absence of % before the register names, and the use of square brackets instead of parentheses for the address, and the lack of an l suffix on the instruction. These are dead giveaways to know which form of assembly you are looking at.


No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...