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 65312.
I'm fairly new to assembly, sorry if this is an obvious misinterpretation on my part. Any help would be greatly appreciated.
MOVZWL. Move Zero-Extended Word to Long. Description: For MOVZBW, the low 8 bits of the destination are replaced by the source operand. the top 8 bits are set to 0.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With