Sei sulla pagina 1di 16

8086

Descrizione di base
RV

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 lesecuzione, 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 nellindirizzo. 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 lindirizzo delletichetta indicata nelloperando 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.

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

Istruzioni Aritmetiche

ADDIZIONE
ADD Somma i due operandi e mette il risultato nelloperando 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 ununit la variabile. Le due istruzioni aggiornano tutti i flag di stato tranne il flag CF. Aggiustamento ASCII dopo laddizione Non sempre ha senso Aggiustamento decimale dopo laddizione 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 nelloperando destinazione. Usata nelle operazioni a 32 bit. Decrementa di ununit loperando. Le due istruzioni aggiornano tutti i flag di stato tranne il flag CF. Cambia segno alloperando. 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 loperando 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 loperando 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 loperando 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.

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. Loperando rappresenta il dividendo delloperazione. 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 linterruzione riguardante la divisione per zero. Esegue la divisione con segno. Loperando rappresenta il dividendo delloperazione. 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 linterruzione 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

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

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 lAND logico bit a bit tra destinazione e sorgente e carica il risultato nella destinazione. Lelemento sorgente detto maschera Esegue lAND logico bit a bit tra destinazione e sorgente. Aggiorna coerentemente il ZF Il contenuto degli operandi non viene modificato. Esegue il NOT logico. Esegue lOR logico bit a bit tra destinazione e sorgente e carica il risultato nella destinazione. Lelemento sorgente detto maschera Esegue lXOR logico bit a bit tra destinazione e sorgente e carica il risultato nella destinazione. Lelemento sorgente detto maschera

TEST

NOT OR

XOR

OPERAZIONI DI SHIFT
Esegue lo spostamento a sinistra delloperando, per un numero di volte pari al valore del contatore. Lultimo bit in uscito copiato nel Flag di carry tutte le posizioni vuote vengono caricate con bit di valore 0. Listruzione SHL equivale ad una moltiplicazione per 2n. Esegue lo spostamento a sinistra delloperando, per un numero di volte pari al valore del contatore. Lultimo bit in uscito copiato nel Flag di carry tutte le posizioni vuote vengono caricate con bit di valore 0. Esegue lo spostamento a destra delloperando, per un numero di volte pari al valore del contatore. Lultimo bit in uscito copiato nel Flag di carry. tutte le posizioni vuote vengono caricate con bit di valore 0. Listruzione SHR equivale ad una divisione per 2n. Esegue lo spostamento a sinistra delloperando, per un numero di volte pari al valore del contatore. Lultimo 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 delloperazione 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 delloperazione

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

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 unarea di memoria allaltra Sposta dati di 8 bit (MOVSB) o di 16 bit(MOVSW) Confronta due aree di memoria Confronta i dati di unarea di memoria con laccumulatore Modifica i Flag Carica in AX il contenuto dellarea di memoria puntata Copia il contenuto di AX nellarea 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 lindirizzo di memoria che per default caricato in ES(Base dellindirizzo) : 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 allinterno del processore il solo OFFSET Salto di tipo Far: il salto avviene da un segmento allaltro. Segue che cio che cambia allinterno del processore sia lindirizzo base che loffset 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 lindirizzo a cui saltare pu essere: 1. Diretto: viene indicata una label, e sar il processore a risolvere lindirizzo 2. Indiretto: viene indicato un registro che contiene lindirizzo 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 alletichetta indicata. Salta alletichetta indicata se CX diverso da 0 AND ZF=1 Salta alletichetta indicata se CX=0 OR ZF=0 Salta alletichetta indicata se CX diverso da 0 AND ZF=0 Salta alletichetta indicata se CX=0 OR ZF=1

LOOPNE/LOOPNZ LOOPE/LOOPZ INT

INTERRUZIONI
Chiama una procedura di sistema Bisogna passare il numero dellinterruzione. 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

Potrebbero piacerti anche