开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜