Muy bien, así que estoy tratando con el siguiente fragmento de código:resultados extraños con movzwl, hacha% y los valores negativos
push %ebp
mov %esp,%ebp
push %ebx
mov 0x8(%ebp),%eax
movzwl %ax,%edx
Así que este se comporta como se esperaba cuando se trata de valores positivos. El valor copiado en% edx es los últimos 16 bits de% eax (o% ax).
Sin embargo, si ingresas un número negativo, todo comienza a ser raro y no parece comportarse como se esperaba.
Por ejemplo, si el valor de% eax es -67043552, entonces el valor copiado en% EDX es 65312.
Soy bastante nuevo en el montaje, lo siento si esto es una mala interpretación obvia de mi parte. Cualquier ayuda sería muy apreciada.
['movswl'] (http://www.felixcloutier.com/x86/MOVSX:MOVSXD.html) está disponible cuando desea firmar-ampliar el valor firmado de un complemento de 2 en lugar de extender cero un valor binario sin signo. (Consulte también la [wiki de la etiqueta x86] (http://stackoverflow.com/tags/x86/info). –
Además, si imprimiera sus números como hexadecimal, sería mucho menos confuso/más obvio lo que está sucediendo. –
Además, a menos que realmente necesite el valor completo en '% eax', debe' movzwl 0x8 (% ebp),% edx' directamente en lugar de perder una instrucción haciéndolo por separado. Las CPU de Intel pueden manejar 'movzx' /' movsx' como solo una carga uop, sin necesidad de ALU. –