I comandi(I)
Come in ogni linguaggio di programmazione, senza comandi ovviamente non funziona niente.Ecco i comandi che userete di più e la loro funzione:
Mov
: Il comando mov è uno dei più importanti.Viene usato per caricare un valore in memoria.La sintassi è :mov destinazione, valore.Per esempio, mov ax,bx caricherà il valore di bx in ax.Movs
: Movs carica direttamente il valore di SI e userà come destinazione DI.Esempio :
mov si, offset 1mov di, offset 2
movs
In questo modo il valore di 1 verrà caricato sopra il valore di 2.Incontrerete anche
movsb e movsw.Stesso discorso solamente che movsb carica un byte e movsw carica un word.LEA
: Load Effective Address.Sintassi: lea destinazione, indirizzo.Viene usato per caricare l'indirizzo della memoria di "indirizzo" in "destinazione"."Indirizzo" deve essere stato caricato in memoria.Esempio: anzichè scrivere mov si, offset 1 basta un semplice
lea si, 1Push e Pop:
Come già spiegato nella Ren - Zine #1, Push carica un valore nello stack e pop ripristina un valore.La cosa importante è che pop ripristinerà sempre l'ultimo valore caricato nello stack.Esempio:
Push cxPush ax
Pop cx
Pop ax
In questo modo pop cx caricherà il valore di ax e viceversa.Infatti basta un semplice xchg ax,cx, che spiegherò più avanti.
ADD
: Il comando ADD effettua semplicemente un'addizione.La sintassi è add destinazione, valore.Il risultato sarà salvato in "destinazione".Esempio:
mov ax, 0h Il valore di ax così sarà zero.Add ax, 10h
adesso il valore di ax sarà di 10hSUB
: Il comando SUB invece effettua una sottrazione.La stessa cosa vale per SUB, sub destinazione, valore.Anche qua il risultato sarà salvato in "destinazione".Esempio:
sub ax, 10h questo sottrarre 10h da ax.XCHG
: Il comando Exchange scambierà i valori di "destinazione" e "valore".Esempio:
xchg bx, ax
LODS:
Carica un byte oppure un word in un register.Esattamente come il comando movs, anche qua ci sono LODSB e LODSW.Esempio: mov si, offset 1
Lods
Operazioni logiche booleane
AND
: Questo comando effettua una specie di confronto bit per bit tra "destinazione" e "valore". Il risultato sarà salvato in "destinazione".Sintassi :and destinazione, valore.
Esempio:Valore destinazione risultato
......
0 .......................0 .......................0......
0....................... 1....................... 0......
1 .......................0 .......................0......
1 .......................1 .......................1
OR:
Anche questo comando effettua un'operazione booleanica (booleanica ? Ma esiste 'sta parola ? 'sti grandi cazzi) Ecco gli effetti su ciascun bit:Valore destinazione risultato
......
0....................... 0...................... 0......
0 .......................1 ......................1......
1....................... 0 ......................1......
1 .......................1 ......................1
XOR:
Il comando XOR fa esattamente lo stesso lavoro di OR, solamente che OR effettua una cosiddetta "Inclusive disjunction" di "destinazione" e "valore", mentre XOR effettua una cosiddetta "exclusive disjunction".La sintassi rimane sempre la stessa, cioè xor destinazione, valore.
Valore destinazione risultato
......
0 ......................0 .......................0......
0 ......................1 .......................1......
1 ......................0 .......................1......
1 ......................1 .......................0
XNOR:
Ecco l'effetto su ciascun bit usando il comando XNOR:Valore destinazione risultato
......
0 ......................0 ........................1......
0 ......................1 ........................0......
1 ......................1 ........................1
NOT:
Esegue la negazione "bit per bit" di "destinazione".Sintassi:NOT destinazione .
Il risultato verrà salvato nello stesso "destinazione".Effetto su ciascun bit:
Valore destinazione
.......
0 ....................1.....
1 ....................0
Altri comandi importanti:
CALL
: Call esegue semplicemente una subroutine.La sintassi è la seguente:Call subroutine
CMP:
Il comando Compare confronta i due valori di "destinazione" e "valore".Cmp valore1, valore2
JMP:
Il comando Jump carica un valore nuovo, trasferendo così il controllo ad un'altra parte del codice.Sintassi: JMP destinazione.Ci sono una ventina di comandi diversi del Jump, che spiegherò nella prossima edizione.LOOP
: Loop ripete semplicemente un operazione, meglio una subroutine, finchè il counter non avrà raggiunto il valore zero.Sintassi: Loop nome Esempio:Mov cx, 15
Subroutine: " parte del codice desiderata"
....
Loop subroutine
Ci sono poi un sacco di altri comandi, continueremo nella prossima edizione.
RITORNA................................. INDICE