Pregunta

Muy bien, así que estoy tratando con el siguiente fragmento de código:

push   %ebp
mov    %esp,%ebp   
push   %ebx
mov    0x8(%ebp),%eax 
movzwl %ax,%edx

Entonces esto se comporta como se esperaba cuando se trata de valores positivos. El valor copiado en %EDX es el final de 16 bits de %EAX (o %AX).

Sin embargo, si pones un número negativo, todo comienza a ser extraño y no parece ser comportado como se esperaba.

Por ejemplo, si el valor de %EAX es -67043552, entonces el valor copiado en %EDX es 65312.

Soy bastante nuevo en la asamblea, lo siento si esta es una mala interpretación obvia de mi parte. Cualquier ayuda sería muy apreciada.

¿Fue útil?

Solución

Recuérdalo movzwl copia solo los bits en %ax dentro %edx llenando los altos 16 bits de %edx con ceros.

Asi que %edx Siempre termina con un número positivo menor o igual a 65535.

En detalle: -67043552 en hex es fc00ff20. Entonces, si eso está en %eax, después %ax contiene ff20. Si te mueves eso a %edx con cero extensión, entonces %edx obtiene 0000ff20. Eso es 65312.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top