ISTRUZIONI DI TRASFERIMENTO DEI DATI
L’Assembly 8086 rende disponibili diversi tipi di istruzioni, specializzate nei seguenti tipi di operazioni:
- Trasferimento dati;
- Manipolazione di interruzioni;
- Aritmetiche;
- Manipolazione di bit;
- Trasferimento di controllo;
- Gestione di procedure e macro.
Si tratta di istruzioni che copiano un dato da una sorgente ad una destinazione.
Il trasferimento può avvenire in diversi modi:
- Da memoria a registro;
- Da registro a memoria;
- Da registro a registro;
- Da memoria a memoria.
ISTRUZIONE MOV
L’istruzuzione MOV non fa altro che leggere un dato dall’ operando sorgente e copiarlo nell’ operando destinazione.
sintassi: mov <destinazione>, <sorgente>
Il dato nell’operando sorgente non viene modificato
<sorgente> può essere:
- Dato immediato;
- Registro;
- Locazione di memoria.
<destinazione> può essere:
- Registro;
- Locazione di memoria.
N.B. Entrambi gli operandi devono avere la stessa dimensione (byte o word) ed inoltre I registri CS e IP non possono essere usati come destinazione!
Trasferimenti non ammessi dall’ istruzione MOV:
- Memoria <- memoria;
- Registro segmento <- valore immediato;
- Registro segmento <- registro segmento.
Per trasferire il dato occorre sempre passare attraverso un registro generale.
ISTRUZIONE MOV – MODALITA’ DI INDIRIZZAMENTO
Indirizzamento immediato:
MOV BX, 12;
MOV DH ,1;
MOV AL, ‘0’
Indirizzamento a registro:
MOV AH, BL;
MOV CL, DH
MOV AX, DX
Indirizzamento diretto:
MOV BX, VARIABILE
MOV DX, OFFSET CAR
Indirizzamento a registro indiretto:
MOV CX, [BX]
MOV [BX], AX
Indirizzamento indicizzato:
MOV Dest, [BASE + INDICE + OFFSET]
MOV AX, [BX+SI+5]
MOV DX, [BX+SI]
MOV [BASE + INDICE + OFFSET], Sorgente
ISTRUZIONE XCHG
L’istruzione XCHG scambia il valore dei due operandi.
sintassi: xchg <operando1>, <operando2>
Es:
MOV DH, 3
MOV DL, 8
XCHG DH, DL ;DH = 8, DL = 3
ISTRUZIONI PUSH E POP
Con l’ istruzione PUSH si intende un impilamento di un dato nello stack.
sintassi: PUSH <sorgente>
Con l’ istruzione POP si intende invece un’ estrazione di un dato dallo stack.
sintassi: POP <destinazione>
<sorgente> può essere:
- Registro;
- Memoria;
- Dato immediato.
<destinazione> può essere:
- Registro;
- Memoria.
Ricorda che PUSH e POP funzionano solo con operandi a 16 bit.
ISTRUZIONI LAHF E SAHF
LAHF: carica in AH 8 bit dal registro dei codici di condizione (flag)
sintassi: LAHF (nessun operando)
bit di AH: 7 6 5 4 3 2 1 0
[SF][ZF] [0] [AF] [0] [PF] [1] [CF]
i bit in posizione 1, 3, 5 sono riservati
SAHF: copia nel registro dei codici di condizione (flag) gli 8 bit di AH
sintassi: SAHF (nessun operando)
bit di AH: 7 6 5 4 3 2 1 0
[SF][ZF] [0] [AF] [0] [PF] [1] [CF]
ISTRUZIONI PUSHF E POPF
PUSHF: impila nello stack il registro dei codici di condizione (flag)
sintassi: PUSHF (nessun operando)
il registro SP è decrementato di 2 (SP = SP-2) ed in cima allo stack troveremo i bit di SF.
POPF: estrae dallo stack una parola e la copia nel registro dei codici di condizione (flag)
sintassi: POPF (nessun operando)
Il registro dei flag SF assume il valore della cima dello stack ed il registro SP è incrementato di 2 (SP = SP+2)
Nel prossimo articolo parleremo degli Interrupt, se invece ti sei perso lo scorso articolo, si è parlato di Variabili e costanti.
Stai cercando altre guide? Allora dai uno sguardo alla nostra raccolta dedicata alla Programmazione Assembly.
Alla prossima!
0 Comments