Ahora estamos en la instrucción JNS. Esto significa saltar corto si no es cero.
...
Así que volvamos a donde estaba la instrucción JNS y desarmamos el indicador SF
Así se ejecuta el salto. SF es el séptimo bit en el registro por lo que en
Para cancelarlo necesitamos xor con 2 ^ 7 = 128
En realidad, aquí hay un error en la primera oración, JNS
significa "Saltar si no firmar", es decir, se toma el salto si la bandera de signo está no establecida. La siguiente lógica es válida: decide que quiere que se realice el salto ya que, de lo contrario, el programa saldrá. Por lo tanto, el bit de signo debe estar borrado .
Como dice, el indicador de signo es el bit 7 , un xor
con 128 (= 2 ^ 7, o 0b10000000
en binario) lo volteará. (el resultado de xor
es 1
si exactamente uno de los bits de entrada es 1
.) Desde que comprobó justo antes de que se estableciera el bit, no hay riesgo de que accidentalmente establezca la poco. En general, se podría and
con el inverso (es decir, 127 o 0b01111111
) para borrar el bit. (el resultado de and
es 1
si exactamente ambas entradas son 1
.)
Wikipedia, entre otras, tiene tablas de verdad para las funciones lógicas.
En el segundo caso, el bit en la posición 6 debe establecerse, y or
con 64 (= 2 ^ 6, o 01000000) lo hace. (el resultado de or
es 1
si al menos un bit de entrada es un 1
.) Podría haber usado xor
para alternarlo también, pero eso nuevamente requeriría verificar si el el bit se establece primero.