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.