We are now at the JNS instruction. This means Jump Short if Not zero
...
So lets go back to where the JNS instruction was and unset the SF flag
so the jump gets executed. SF is the 7th bit in the register so in
order to cancel it we need to xor with 2^7 = 128
In realtà c'è un errore nella prima frase qui, JNS
significa "Salta se non firma", cioè il salto viene eseguito se il flag di segno è non impostato. La seguente logica è valida: decide che vuole che il salto sia preso, altrimenti il programma uscirà. Quindi il bit del segno dovrebbe essere cancellato .
Come dice, il segno è il bit 7 , un xor
con 128 (= 2 ^ 7, o 0b10000000
in binario) lo capovolgerà. (il risultato di un xor
è 1
se esattamente uno dei bit di input è 1
.) Dal momento che ha controllato poco prima che il bit fosse impostato, non c'è alcun rischio di accidentalmente accidentalmente po. Generalmente si and
con l'inverso (cioè 127, o 0b01111111
) per cancellare il bit. (il risultato di and
è 1
se esattamente entrambi gli input sono 1
.)
Wikipedia, tra le altre, ha tavole di verità per le funzioni logiche.
Nel secondo caso, il bit in posizione 6 deve essere impostato e or
con 64 (= 2 ^ 6 o 01000000). (il risultato di or
è 1
se almeno un bit di input è un 1
.) Potrebbe aver usato xor
per attivarlo anche, ma ciò richiederebbe di nuovo il controllo se il il bit è impostato per primo.