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!