Weird results with movzwl, %ax and negative values
Alright, so I am dealing with the following snippet of code:
push %ebp
mov %esp,%ebp
push %ebx
mov 0x8(%ebp),%eax
movzwl %ax,%edx
So this behaves as expected when dealing with positive values. The value copied into %edx is the trailing 16 bits of %eax (or %ax).
However, if you put a negative number in, everything starts getting weird and it does not seem to be behaving as expected.
For example, if the value of %eax is -67043552, then the value copied into %edx is开发者_StackOverflow社区 65312.
I'm fairly new to assembly, sorry if this is an obvious misinterpretation on my part. Any help would be greatly appreciated.
Remember that movzwl
copies only the bits in %ax
into %edx
filling in the high 16 bits of %edx
with zeros.
So %edx
always ends up with a positive number less than or equal to 65535.
In detail: -67043552
in hex is fc00ff20
. So if that is in %eax
, then %ax
contains ff20
. If you move that into %edx
with zero-extension, then %edx
gets 0000ff20
. That's 65312.
精彩评论