Un esempio si un altro operatore binario, poco comune forse per gli sviluppatori ma che in assembly è utilizzato sia per eseguire operazioni logiche come lo OR ESCLUSIVO, XOR appunto, oppure per banalmente per sbiancare/svuotare un registro e riportarlo a zero.
L’esempio che segue usa proprio la funzione xor che prende due parametri da confrontare e su cui eseguire l’operazione. Xor, o esclusivo restituisce vero o falso con la seguente tabella della verità
XOR | A Vero | B Falso |
A Vero | Falso | Vero |
B Falso | Vero | Falso |
Per noi, i registri non conterranno vero o falso ma analogo valore 1 se vero, 0 se falso. Scriviamo il seguente frammento di codice e guardiamo i registri come si evolvono istruzione per istruzione.
; esempio 02
; scrive A ovvero 10 esadecimale nel registro DX e poi lo sbianca con XOR
.DATA
.CODE
.STARTUP
MOV DX, 0Ah
XOR DX, AX
.EXIT
END
La corrispondente versione in SASM aggiunge poco, ma è un altro spunto per vedere più facilmente con la barra laterale il valore del registro eax come si evolve istruzione singola dopo istruzione col pulsante “lancia debug”
Assieme allo XOR esistono tutte le vari operazioni dell’algebra di Boole che agiscono nello stesso modo con gli operatori: AND, OR, NOT. AND e OR prendono sempre due registri come parametri, mentre il NOT nega un valore alla volta, quindi un solo parametro/registro. L’OpCode XOR, è spesso utilizzato per “sbiancare” una variabile o registro e riportarlo al valore zero poiché richiede meno cicli di clock/cpu di un mov con zero. (es. mov dx, 0)
Ultima modifica 16 Febbraio 2022