Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Descrizione di base
RV
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.
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
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
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
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
Sorgente Sorgente
Sorgente
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
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
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
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
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
14
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