8086

Descrizione di base
RV

2

Istruzioni Trasferimento Dati

GENERAL PURPOSE
MOV PUSH POP XCHG XLAT        IN OUT           Copia operando sorgente in destinazione Deposita una Word nello stack. Preleva una Word dallo stack. Scambia il contenuto dei due operandi Durante l’esecuzione, il processore esegue la somma del contenuto dei registri AL e BX, trasferendo in AL il dato avente come offset il risultato di tale somma. Utilizzato per le tabelle di conversione. BX deve contenere l'indirizzo di partenza della tabella e AL l'offset al suo interno. Al termine AL contiene il byte puntato nella tabella. Limiti: Funziona per tabelle di soli byte e per tabelle di 256 elementi.

INPUT/OUTPUT
Trasferisce in AX il dato contenuto nell’indirizzo. Può Essere indirizzato in maniera immediata o registro-registro. Viene utilizzato per leggere da una porta. Trasferisce verso la destinazione il contenuto del sorgente (per default AX). Viene utilizzato per scrivere su una porta.

GESTIONE INDIRIZZI
LEA LDS LES LAHF SAHF PUSHF POPF Carica l’indirizzo dell’etichetta indicata nell’operando destinazione Carica un puntatore in DS:OFFSET assumendolo dalla memoria. Carica un puntatore in ES:OFFSET assumendolo dalla memoria.

GESTIONE DEI FLAG
Legge da AH il contenuto dei flag SF, ZF, AF, CF. (Obsoleta: utilizzata per mantenere la compatibilità con 8080 e 8085) Scrive in AH il contenuto dei flag SF, ZF, AF, CF. (Obsoleta: utilizzata per mantenere la compatibilità con 8080 e 8085) Scrive i flag di stato nello stack. Legge i flag di stato dallo stack.

3

Set Reference Istruzioni Trasferimento Dati.
Codice Operativo
MOV PUSH POP XCHG XLAT IN OUT LEA LDS LES LAHF SAHF PUSHF POPF Destinazione Sorgente Sorgente Destinazione Sorgente Tabella Accumulatore Porta Destinazione Destinazione Destinazione No operandi No operandi No operandi No operandi Sorgente

Sorgente Porta Accumulatore Sorgente Sorgente Sorgente

4

Istruzioni Aritmetiche

ADDIZIONE
ADD                            Somma i due operandi e mette il risultato nell’operando destinazione. Modifica tutti Flag di Stato. Non sono consentite operazioni Memoria-Memoria. Somma con riporto. Utilizzata nelle addizioni a 32 bit. Non sono consentite operazioni Memoria-Memoria. Incrementa di un’unità la variabile. Le due istruzioni aggiornano tutti i flag di stato tranne il flag CF. Aggiustamento ASCII dopo l’addizione Non sempre ha senso Aggiustamento decimale dopo l’addizione Non sempre ha senso

ADC INC AAA DAA

SOTTRAZIONE
SUB Esegue la sottrazione tra gli operandi e carica il risultato nel operando destinazione. Modifica tutti Flag di Stato. Non sono consentite operazioni Memoria-Memoria. Esegue la differenza con riporto e carica il risultato nell’operando destinazione. Usata nelle operazioni a 32 bit. Decrementa di un’unità l’operando. Le due istruzioni aggiornano tutti i flag di stato tranne il flag CF. Cambia segno all’operando. Aggiorna lo stato di tutti i flag di stato. Confronta i due operando tramite sottrazione. Aggiorna i flag di stato. Aggiustamento ASCII dopo la sottrazione Non sempre ha senso Aggiustamento decimale dopo la sottrazione Non sempre ha senso

SBB DEC NEG CMP AAS DAS

MOLTIPLICAZIONE
MUL Moltiplica il contenuto di AX per l’operando e mette il risultato in AX. I fattori della moltiplicazione devono essere dello stesso tipo. 1. se si specifica un operando di tipo BYTE, il processore esegue la moltiplicazione tra l’operando ed il contenuto del registro AL e copia il risultato nel registro AX. 2. se si specifica un operando di tipo WORD, il processore esegue la moltiplicazione tra l’operando ed il contenuto del registro AX e copia il risultato nei registri DX (word più significativa) ed AX (word meno significativa). Il processore salva il risultato della moltiplicazione in un operando di lunghezza doppia rispetto ai fattori. Non è ammessa la moltiplicazione per un valore immediato.1 Le istruzioni di moltiplicazione aggiornano i flag CF ed OF in modo da segnalare se la parte più significativa del risultato è nulla Prodotto con segno. Segue le stesse dinamiche di MUL

   IMUL
1

Ciò è possibile dal 80186.

5

     

AAM

I fattori della moltiplicazione devono essere dello stesso tipo. Il processore salva il risultato della moltiplicazione in un operando di lunghezza doppia rispetto ai fattori. Non è ammessa la moltiplicazione per un valore immediato. Aggiustamento ASCII dopo la moltiplicazione Non sempre ha senso

DIVISIONE
DIV Esegue la divisione senza segno. L’operando rappresenta il dividendo dell’operazione. 1. divisione tra un operando di tipo WORD ed un operando di tipo BYTE; Il quoziente viene caricato in AL mentre il resto in AH. 2. divisione tra un operando di tipo DOUBLEWORD ed un operando di tipo WORD. Il quoziente è caricato il AX e il resto in DX Non è ammessa la divisione per un valore immediato. Le istruzioni di divisione non aggiornano i flag. Nel caso di numero che sono troppo piccoli per essere rappresentati su un BYTE, il processore genera l’interruzione riguardante la divisione per zero. Esegue la divisione con segno. L’operando rappresenta il dividendo dell’operazione. 1. divisione tra un operando di tipo WORD ed un operando di tipo BYTE; Il quoziente viene caricato in AL mentre il resto in AH. 2. divisione tra un operando di tipo DOUBLEWORD ed un operando di tipo WORD. Il quoziente è caricato il AX e il resto in DX Non è ammessa la divisione per un valore immediato. Le istruzioni di divisione non aggiornano i flag. Nel caso di numero che sono troppo piccoli per essere rappresentati su un BYTE, il processore genera l’interruzione riguardante la divisione per zero. Aggiustamento ASCII dopo Divisione Non sempre ha senso Converte un BYTE nella word rispettiva. Opera sul registro AL ed estende a tutto AX. Converte una WORD in una DOUBLEWORD. Opera sul registro AX ed estende ad DX:AX.

   IDIV 

   AAD CBW CWD      

6

Set Reference Istruzioni Aritmetiche.
Codice Operativo
ADD ADC INC AAA DAA SUB SBB DEC NEG CMP AAS DAS MUL IMUL AAM DIV IDIV AAD CBW CWD Destinazione Destinazione Destinazione No Operandi No operandi Destinazione Destinazione Destinazione Destinazione Destinazione No operandi No operandi Sorgente Sorgente No operandi Sorgente Sorgente No operandi No operandi No operandi Sorgente Sorgente

Sorgente Sorgente

Sorgente

7

Istruzioni per la Manipolazioni di Bit
Le istruzioni per la manipolazione dei bit permettono di mascherare o forzare i singoli bit di una parola.

OPERAZIONI LOGICHE
AND           SHL        SHR        Esegue l’AND logico bit a bit tra destinazione e sorgente e carica il risultato nella destinazione. L’elemento sorgente è detto maschera Esegue l’AND logico bit a bit tra destinazione e sorgente. Aggiorna coerentemente il ZF Il contenuto degli operandi non viene modificato. Esegue il NOT logico. Esegue l’OR logico bit a bit tra destinazione e sorgente e carica il risultato nella destinazione. L’elemento sorgente è detto maschera Esegue l’XOR logico bit a bit tra destinazione e sorgente e carica il risultato nella destinazione. L’elemento sorgente è detto maschera

TEST

NOT OR

XOR

OPERAZIONI DI SHIFT
Esegue lo spostamento a sinistra dell’operando, per un numero di volte pari al valore del contatore. L’ultimo bit in uscito è copiato nel Flag di carry tutte le posizioni vuote vengono caricate con bit di valore 0. L’istruzione SHL equivale ad una moltiplicazione per 2n. Esegue lo spostamento a sinistra dell’operando, per un numero di volte pari al valore del contatore. L’ultimo bit in uscito è copiato nel Flag di carry tutte le posizioni vuote vengono caricate con bit di valore 0. Esegue lo spostamento a destra dell’operando, per un numero di volte pari al valore del contatore. L’ultimo bit in uscito è copiato nel Flag di carry. tutte le posizioni vuote vengono caricate con bit di valore 0. L’istruzione SHR equivale ad una divisione per 2n. Esegue lo spostamento a sinistra dell’operando, per un numero di volte pari al valore del contatore. L’ultimo bit in uscito è copiato nel Flag di carry tutte le posizioni vuote vengono caricate con il bit più significativo ovvero il segno

SAL

SAR

OPERAZIONI DI ROTAZIONE
ROL     Esegue la rotazione del bit più significativo verso il bit meno significativo, per un numero di volte pari al valore del contatore. Il bit più significativo è copiato nel Flag di Carry Il valore iniziale del CF è irrilevante Esegue la rotazione del bit più significativo verso il bit meno significativo, per un numero 8

RCL

         

ROR

RCR

di volte pari al valore del contatore. Il bit più significativo è copiato nel Flag di Carry Il posto vuoto lasciato dallo spostamento viene occupato dal bit del CF. Il valore iniziale del CF è rilevante ai fini dell’operazione Esegue la rotazione del bit meno significativo verso il bit più significativo, per un numero di volte pari al valore del contatore. Il bit meno significativo viene copiato nel Flag di Carry Il valore iniziale del CF è irrilevante Esegue la rotazione del bit meno significativo verso il bit più significativo, per un numero di volte pari al valore del contatore. Il bit meno significativo viene copiato nel Flag di Carry Il posto vuoto lasciato dallo spostamento viene occupato dal bit del CF. Il valore iniziale del CF è rilevante ai fini dell’operazione

Set Reference Istruzioni Manipolazione di bit.
Codice Operativo
AND TEST NOT OR XOR SHL SAL SHR SAR ROL RCL ROR RCR Destinazione Destinazione Destinazione Destinazione Destinazione Operando Operando Operando Operando Operando Operando Operando Operando Sorgente Sorgente Sorgente Sorgente Contatore Contatore Contatore Contatore Contatore Contatore Contatore Contatore

9

Istruzioni per la Manipolazioni di Stringhe
ISTRUZIONI PER LA RIPETIZIONE
REP   Prefisso da utilizzare davanti le istruzioni per la manipolazione delle stringhe. Obbliga a ripetere le istruzioni supportate un numero di volte pari al contenuto di CX Istruzioni compatibili 1. MOVS ( e sue varianti) 2. STOS (e sue varianti) 3. LODS (e sue varianti) 4. INS (e sue varianti) 5. OUTS (e sue varianti) 6. CMPS (e sue varianti) 7. SCAS (e sue varianti) Prefisso da utilizzare davanti le istruzioni per la manipolazione delle stringhe. Obbliga a ripetere le istruzioni supportate un numero di volte pari al contenuto di CX, a meno che il confronto delle aree confrontate abbia rilevato elementi diversi Il prefisso controlla se il valore della flag di Zero(ZF) è 0 o se quello di CX è 0000H: in questi casi il processore non ripete l'istruzione e prosegue con il resto del programma; Istruzioni compatibili 1. CMPS (e sue varianti) 2. SCAS (e sue varianti) Prefisso da utilizzare davanti le istruzioni per la manipolazione delle stringhe. Obbliga a ripetere le istruzioni supportate un numero di volte pari al contenuto di CX, a meno che il confronto delle aree confrontate abbia rilevato elementi diversi Il prefisso controlla se il valore della flag di Zero(ZF) è 1 o se quello di CX è 0000H: in questi casi il processore non ripete l'istruzione e prosegue con il resto del programma; Istruzioni compatibili 1. CMPS (e sue varianti) 2. SCAS (e sue varianti)

REPE/REPZ

  

REPNE/REPNZ

ISTRUZIONI DI MANIPOLAZIONE
MOVS MOVSB/MOVSW CMPS SCAS LODS STOS SI DI CX AL/AX DF ZF        Sposta un dato da un’area di memoria all’altra Sposta dati di 8 bit (MOVSB) o di 16 bit(MOVSW) Confronta due aree di memoria Confronta i dati di un’area di memoria con l’accumulatore Modifica i Flag Carica in AX il contenuto dell’area di memoria puntata Copia il contenuto di AX nell’area di memoria puntata da ES:DI

Registri Usati
Source Index Data Index Count Register Accumulator Register Direction Flag Zero Flag 10

Codice Operativo
REP REPE/REPZ REPNE/REPNZ MOVS MOVSB/MOVSW CMPS SCAS LODS STOS   No Operandi No Operandi No Operandi Destinazione Sorgente No Operandi Stringa Destinazione Stringa Sorgente Stringa da confrontare Indirizzo Area di memoria da caricare Indirizzo Area di memoria in cui salvare

Sono utilizzate esclusivamente aree di memoria per contenere le stringhe. Nei registri sono contenuti solo l’indirizzo di memoria che per default è caricato in ES(Base dell’indirizzo) : DI (Offset). Inoltre le operazioni vengono eseguite su un carattere alla volta, i caratteri sono rappresentati tramite il codice ASCII, e quindi un byte corrisponde ad un unico carattere in codice ASCII e non ad intere parole. E’ opportuno inizializzare i puntatori prima delle esecuzioni delle istruzioni.

11

Controllo Flusso del Programma
E’ possibile classificare i salti ad istruzioni secondo due criteri: 1. La “lunghezza” del salto  Salto di tipo Near: Il salto avviene nello stesso segmento di memoria, quindi cioè che muta all’interno del processore è il solo OFFSET  Salto di tipo Far: il salto avviene da un segmento all’altro. Segue che cioè che cambia all’interno del processore è sia l’indirizzo base che l’offset 2. Condizionamento del salto  Salto condizionato. (I salti di tipo incondizionati sono tutti di tipo near)  Salto incondizionato

ISTRUZIONI INCONDIZIONATE
CALL       JMP    Chiama le procedure Organizza e chiama le istruzioni di una procedura. Ovvero salva lo stato del processore in modo da poterlo ripristinarlo al ritorno della procedura La procedura può essere sia di tipo NEAR che di tipo FAR Pone fine ad una procedura e ritorna al programma chiamante ripristinando IP e registri di FLAG Non è necessario indicare da che procedura si ritorna, se di tipo FAR o NEAR E’ possibile passare come parametro un numero, che indica il numero di byte da liberare nello stack. Salta incondizionatamente Obbliga il processore ad eseguire il codice presente in tutta altra zona della memoria A seconda di come viene passato l’indirizzo a cui saltare può essere: 1. Diretto: viene indicata una label, e sarà il processore a “risolvere” l’indirizzo 2. Indiretto: viene indicato un registro che contiene l’indirizzo di memoria a cui saltare; O al valore di una locazione di memoria.

RET

TRASFERIMENTI CONDIZIONATI Istruzioni di Salto condizionati da Flag
JZ JNZ JS JNS JO JNO JC JNC JP/JPE          Salta se ZF=1 Salta se ZF=0 Salta se SF=1 Salta se SF=0 Salta se OF=1 Salta se OF=0 Salta se CF=1 Salta se CF=0 Salta se PF=1 12

JNP/JPO JL/JNGE JG/JNLE JLE/JNG JGE/JNL JE JNE JB/JNAE JA/JNBE JBE/JNA JAE/JNB JE JNE JCXZ LOOP

               

Salta se PF=0 Salta se destinazione < sorgente Salta se destinazione > sorgente Salta se destinazione <= sorgente Salta se destinazione >= sorgente Salta se destinazione = sorgente Salta se destinazione <> sorgente Salta se destinazione < sorgente Salta se destinazione > sorgente Salta se destinazione <= sorgente Salta se destinazione >= sorgente Salta se destinazione = sorgente Salta se destinazione <> sorgente Salta se CX=0

Istruzioni di salto condizionato dal risultato di un confronto(numeri con segno)

Istruzioni di salto condizionato dal risultato di un confronto(numeri senza segno)

Istruzioni di salto condizionato dal contenuto di CX ITERAZIONI
Ripete una sequenza di istruzioni per un numero definito di volte. Ripete le istruzioni per un numero di volte pari al valore contenuto in CX, salta se CX è diverso da 0 all’etichetta indicata. Salta all’etichetta indicata se CX è diverso da 0 AND ZF=1 Salta all’etichetta indicata se CX=0 OR ZF=0 Salta all’etichetta indicata se CX è diverso da 0 AND ZF=0 Salta all’etichetta indicata se CX=0 OR ZF=1

  LOOPNE/LOOPNZ   LOOPE/LOOPZ INT        

INTERRUZIONI
Chiama una procedura di sistema Bisogna passare il numero dell’interruzione. Che può essere una routine del BIOS, del SO, oppure un driver E’ una sorta di CALL di tipo FAR Al momento della chiamata salva lo stato del processore nello stack Chiama la procedura di sistema INT04 Viene richiamata se il flag del Overflow diventa uno, altrimenti procede senza intoppi. Pone fine ad una procedura di sistema Ripristina lo stato del processore precedente alla chiamata INT

INTO

IRET

13

Set Reference Istruzioni controllo flusso.
Codice Operativo
CALL RET JMP JZ JNZ JS JNS JO JNO JC JNC JP/JPE JNP/JPO JL/JNGE JG/JNLE JLE/JNG JGE/JNL JE JNE JB/JNAE JA/JNBE JBE/JNA JAE/JNB JE JNE JCXZ LOOP LOOPE/LOOPZ LOOPNE/LOOPNZ INT INTO IRET Label o indirizzo a cui saltare Opzionale: numero di byte da eliminare dallo stack Label o indirizzo a cui saltare Short Label Short Label Short Label Short Label Short Label Short Label Short Label Short Label Short Label Short Label Short Label Short Label Short Label Short Label Short Label Short Label Short Label Short Label Short Label Short Label Short Label Short Label Short Label Short Label Short Label Short Label Numero interruzione No operandi No operandi

14

Istruzioni che modificano i flags
I flag che si possono modificare sono:    CF DF IF

TRASFERIMENTI CONDIZIONATI Modifica di CF
STC CLC CMC STD CLD STI CLI        Imposta CF=1 Imposta CF=0 Complementa il valore di CF

Modifica di DF
Imposta DF=1 Imposta DF=0

Modifica di IF
Imposta IF=1 Imposta IF=0

http://www.giobe2000.it/Tutorial/Schede/07-IstruzioniCpu/701.asp

15

16

Sign up to vote on this title
UsefulNot useful