Parte |1|2|3|4|
Istruzioni operative
- Istruzioni per il trasferimento datiMOVlun Movimento(ricopiamento) PUSHL Immissione di un operando a 32 bit nella pila POPL Estrazione di un operando a 32 bit dalla pila
CWBTW Converte un byte in una parola CWWTL Converte una parola in una parola lunga CWLTQ Converte una parola lunga in una doppia parola lunga (64 bit)
NEGlun Cambia segno (di un intero) ADDlun Somma (fra interi oppure fra naturali) SUBlun Sottrazione (fra interi oppure fra naturali) CMPlun Confronto (fra interi oppure fra naturali) IMULlun Moltiplicazione (fra interi) IDIVlun Divisione (fra interi)
NOTlun NOT logico bit a bit ANDlun AND logico bit a bit ORlun OR logico bit a bit
SHLlun Traslazione a sinistra SHRlun Traslazione a destra ROLlun Rotazione a sinistra RORlun Rotazione a destra
INlun Ingresso dati OUTlun Uscita dati
Istruzioni di controllo
Questa categoria comprende le istruzionidi salto incondizionato, di salto condizionato dal valore dei flag, di chiamata di sottoprogramma, di ritorno da sottoprogramma e di alt. Tali istruzioni sono:JMPlun Salto incondizionato Jcondlun Salto sotto condizione CALL Chiamata di sottoprogramma RET Ritorno al sottoprogramma HLT Alt
Descrizioni delle singole istruzioni
Esaminiamo adesso in dettaglio le singole istruzioni, precisando per ognuna di esse l'operazione che la caratterizza e i flag che modifica.MOVE
Formato: MOVlun sorgente,destinazione Azione: Sostituisce l'operando destinatario con una copia dell'operando sorgente Flag: Non viene modificato alcun flag
PUSH
Formato: PUSHL sorgente Azione: Immette nella pila una copia dell'operando sorgente (una parola lunga). Più in dettaglio, decrementa il registro SP di 4 e successivamente memorizza una copia dell'operando sorgente in 4 locazioni a partire dalla locazione di memoria il cui indi_ rizzo è contenuto in ESP Flag: Non viene modificato alcun flag
POP
Formato: POPL destinazione Azione: Estrae dalla pila una parola lunga e la sostituisce all'operando destinatario. Più in dettaglio, preleva il contenuto di 4 locazioni a partire da quella il cui indirizzo è contenuto in SP e lo sostituisce all'operando destinatario; successivamente incrementa di 4 il contenuto di ESP Flag: Non viene modificato alcun flag
CBTW
Formato: CBTW Azione: Converte l'intero contenuto in AL in un intero equivalente lungo una parola e lo memo_ rizza in AX Flag: Non viene modificato alcun flag
CWTD
Formato: CWTD Azione: Converte l'intero contenuto in AX in un intero equivalente lungo una parola lunga e lo memorizza nella coppia di registri DX_AX Flag: Non viene modificato alcun flag
CLTD
Formato: CLTD Azione: Converte l'intero contenuto in EAX in un intero equivalente lungo una doppia parola lun_ ga e lo memorizza nella coppia di registri EDX_EAX Flag: Non viene modificato alcun flag
NEG
Formato: NEGlun destinazione Azione: Cambia segno all'operando destinatario, che deve essere di tipo intero Flag Vengono modificati i flag CF, OF, SF e ZF
ADD
Formato: ADDlun sorgente,destinazione Azione: Somma l'operando sorgente dall'operando destinatario (modificando quest'ultimo). Entram_ bi gli operandi possono essere sia di tipo naturale che di tipo intero Flag: Vengono modificati i flag CF, OF, SF e ZF
SUBTRACT
Formato: SUBlun sorgente,dstinazione Azione: Sottrae l'operando sorgente dall'operando destinatario (modificando quest'ultimo). En_ trambi gli operandi possono essere sia di tipo naturale che di tipo intero Flag: Vengono modificati i flag CF, OF, SF e ZF
COMPARE
Formato: CMPlun Azione: Verifica se l'operando destinatario è maggiore, uguale o minore dell'operando sorgente (sottraendo quest'ultimo dal primo, senza memorizzare il risultato). Nessuno dei due o_ perandi viene modificato e il risultato del confronto produce un'oportuna modifica dei flag. Entrambi gli operandi possono essere si a di tipo naturale che di tipo intero Flag: Vengono modificati i flag CF, OF, SF e ZF
INTEGER MULTIPLY
Formato: IMULlun sorgente Azione: Effettua la moltiplicazione tra un operando sorgente a 8 bit e il contenuto del regi_ stro AL, tra un operando sorgente a 16 bit e il contenuto del registro AX, tra un ope_ rando sorgente a 32 bit e il contenuto del registro EAX. Entrambi gli operandi sono di tipo intero. Il risultato della moltiplicazione viene generato su un numero di bit dop_ pio rispetto a quello degli operandi, cosicchè non si ha mai un traboccamento. Se il moltiplicando e il moltiplicatore sono a 8 bit, allora il risultato viene posto in AX. Se il moltiplicando e il moltiplicatore sono a 16 bit, allora il risultato viene posto nella coppia di registri DX_AX. Se il moltiplicando e il moltiplicatore sono a 32 bit, allora il risultato viene posto nella coppia di registri EDX_EAX. Se il risultato non è rappresentabile su un numero di bit pari a quello degli operandi (non può essere contenuto nel solo AL, nel solo AX o nel solo EAX), allora viene posto a 1 il flag OF Flag: Vengono modificato i flag OF, SF e ZF
INTEGER DIVIDE
Formato: IDIVlun sorgente Azione: Divide il contenuto di AX, della coppia di registri DX_AX, ovvero della coppia di regi_ stri EDX_EAX per l'operando sorgente, a seconda che questi sia a 8, a 16 o a 32 bit. Entrambi gli operandi sono di tipo intero. Il quoziente e il resto vengono generati con un numero di bit pari a quello del divisore e vengono memorizzati rispettivamente il AL e AH, in AX e DX, ovvero in EAX ed EDX. Poichè l'istruzione produce un quoziente con un numero di bit pari a quello del divisore, si può avere traboccamento: quando ciò accade, viene generata un'eccezione (in particolare viene generata un'eccezione anche quando il divisore è 0) Flag: Restano indefiniti i flag CF, OF, SF e ZF
NOT
Formato: NOTlun destinazione Azione: Esegue l'operazione di NOT logico bit a bit sull'operando destinatario Flag: Non viene modificato alcun flag
AND
Formato: ANDlun sorgente,destinazione Azione: Effettua l'operazione di AND logico bit a bit tra l'operando sorgente e l'operando de_ stinatario (modificando quest'ultimo) Flag: Vengono posti a 0 i flag CF e OF, e vengono modificati i flag SF E ZF
OR
Formato: ORlun sorgente,destinazione Azione: Effettua l'operazione di OR logico bit a bit fra l'operando sorgente e l'operando de_ stinatario (modificando quest'ultimo) Flag: Vengono posti a 0 i flag CF e OF, e vengono modificati i flag SF e ZF
SHIFT LEFT
Formato: SHLlun destinazione Azione: Sposta ciascun bit dall'operando destinatario nella posizione immediatamente più a si_ nistra. Il bit meno significativo è sostiuito da 0, mentre il bit più significativo viene copiato nel flag CF Flag: Vengono modificati i flag CF, SF e ZF![]()
SHIFT RIGHT
Formato: SHRlun destinazione Azione: Sposta ciascun bit dell'operando destinatario nella posizione immediatamente più a destra. Il bit più significativo è sostituito da 0, mentre il bit meno significati_ vo viene copiato nel flag CF Flag: Vengono modificati i flag CF, SF e ZF![]()
ROTATE LEFT
Formato: ROLlun destinazione Azione: Sposta ciascun bit dell'operando destinaztario nella posizione immediatamente più a sinistra, sostituendo il bit meno significativo con quello più significativo. Il bit più significativo viene anche copiato nel flag CF Flag: Vengono modificati i flag CF, SF e ZF![]()
ROTATE RIGHT
Formato: RORlun destinazione Azione: Sposta ciascun bit dell'operando destinatario nella posizione immediatamente più a destra, sostituendo il bit più significativo con quello meno significativo. Il bit meno significativo viene anche copiato nel flag CF Flag: Vengono modificati i flag CF, SF e ZF![]()
INPUT
Formato: INlun sorgente,registro_a Azione: Ricopia in AL, AX oppure EAX il contenuto della porta, della doppia porta oppure del_ la quadrupla porta indirizzata (l'indirizzo si riferisce allo spazio di I/O) Flag: Non viene modificato alcun flag
OUTPUT
Formato: OUTlun registro_a,porta Azione: Ricopia il contenuto di AL, di AX oppure EAX nella porta, nella doppia porta oppure nella quadrupla porta indirizzata (l'indirizzo si riferisce allo spazio di I/O) Flag: Non viene modificato alcun flag
JUMP
Formato: JMP EIP+spiazzamento Azione: Trasferisce nel registro EIP la quantità che si ottiene sommando il contenuto attuale di EIP con lo spiazzamento, provocando in tal modo una modifica al normale flusso se_ quenziale del programma (la prossima istruzione verrà prelevata a partire dall'indi_ rizzo rappresentato dal nuovo contenuto di EIP) Flag: Non viene modificato alcun flag
CONDITIONAL JUMP
Formato: Jcond EIP+spiazzamento Azione: Se il valore dei flag indica che la condizione cond è soddisfatta, una tale istruzione trasferisce nel registro EIP la quantità che si ottiene sommando il contenuto di EIP con lo spiazzamento. In caso contrario non viene compiuta nessuna azione (il contenuto di EIP rimene inveriato) Flag: Non viene modificato alcun flagDi seguito sono riassunti i codici operativi delle istruzioni di questo gruppo, e per ciascuno di essi è spiegato brevemente il significato della condizione di salto:
JE Segue un'istruzione CMP: il salto avviene se l'operando destinatario era uguale al_ l'operando sorgente JNE segue un'istruzione CMP: il salto avviene se l'operando destinatario era diverso dal_ l'operando sorgente JA Segue un'istruzione CMP tra operandi di tipo naturale: il salto avviene se l'operando destinatario era maggiore dell'operando sorgente JAE segue un'istruzione CMP tra operandi di tipo naturale: il salto avviene se l'operando destinatario era maggiore o uguale rispetto all'operando sorgente JG segue un'istruzione CMP tra operandi di tipo intero: il salto avviene se l'operando destinatario era maggiore dell'operando sorgente JGE segue un'istruzione CMP tra operandi di tipo intero: il salto avviene se l'operando de_ stinatario era maggiore o uguale rispetto all'operando sorgente JZ il salto avviene se l'istruzione precedente ha posto a 1 il flag ZF (risultato uguale da zero); istruzione equivalente a JE JNZ il salto avviene se l'istruzione precedente non ha posto a 1 il flag ZF (risultato di_ verso da zero); istruzione equivalente a JNE JC il salto avviene se l'istruzione precedente ha posto a 1 il flag CF JO il salto avviene se l'istruzione precedente ha posto a 1 il flag OF JS il salto avviene se l'istruzione precedente ha posto a 1 il flag SF
CALL
Formato: CALL EIP+spiazzamento Azione: salva nella pila il contenuto del registro EIP e successivamente trasferisce in tale re_ gistro la quantità che si ottiene sommando il contenuto attuale di EIP con lo spiazza_ mento. Tale istruzione effettua quindi un salto a un sottoprogramma (chiamata), conserva_ ndo in pila l'indirizzo di rientro (cioè dell'istruzione che nel programma seguiva l'i_ struzione CALL) Flag: Non viene modificato alcun flag
RETURN
Formato: RET Azione: Preleva una parola lunga dalla pila e la trasferisce in EIP. Tale istruzione deve chiu_ dere un sottoprogramma, e produce il ritorno al programma chiamante (quello che ha se_ guito una CALL), all'indirizzo successivo rispetto all'istruzione di chiamata Flag: Non viene modificato alcun flag
ALT
Formato: HLT Azione: Provoca la cessazione di ogni attività da parte del processore (fino a un nuovo comando di reset) Flag: Non viene modificato alcun flag