Pergunta

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.

Foi útil?

Solução

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top