Soy nuevo en el lenguaje de ensamblaje x86, tengo un entero con signo guardado en el registro eax
, y quiero verificar si el número es negativo o positivo. Para hacer eso, utilicé la instrucción bt
para verificar el primer bit.¿Cómo comprobar si un entero con signo es neg o pos?
Esto es lo que hice:
bt eax,0
jnc isNegative
bt
lleva el primer bit de llevar la bandera, y yo solía jnc
para comprobar si bandera de acarreo es 0 o 1. Si es 1, debe ser un negativo número, y hace las instrucciones negativas ... sin embargo, la salida es impredecible, a veces tengo un positivo y lo reconoce como un número negativo. ¿Estoy haciendo algo mal?
EDIT: Me acabo de dar cuenta de que podría tener algo que ver con endianess. En realidad, está comprobando el último bit en lugar del primer bit. Permítanme tratar de utilizar bt
, 7
Genial, soluciona el problema ¡y simple! aunque, debería ser cmp eax, 0 – Yonk
Depende del ensamblador que esté utilizando, pero para Intel sí. Supongo que de ahí viene el vástago. – nmichaels
cmp es más largo que la prueba, por lo que a menudo se prefiere probar http://stackoverflow.com/a/147183/995714 –