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 1

mov 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, 1

Push 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 cx

Push 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 10h

SUB: 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