Set di istruzioni della CPU
(Real Mode)
A B C D
E F G H
I J K L
M N O P
Q R S T
U V W X
Y Z
Note:
Questo documento rappresenta un manuale di riferimento rapido al set di istruzioni
della CPU; per ogni istruzione viene fornito:
- l'opcode principale
- i cicli di clock per le CPU 8086, 80286, 80386,
80486
- lo stato dei flags dopo l'esecuzione dell'istruzione
Per i flags si utilizzano le seguenti abbreviazioni:
- O = Overflow Flag
- D = Direction Flag
- I = Interrupt Enable Flag
- T = Trap Flag
- S = Sign Flag
- Z = Zero Flag
- A = Auxiliary Flag
- P = Parity Flag
- C = Carry Flag
Lo stato dei flags dopo l'esecuzione di una istruzione, viene descritto con i
seguenti simboli:
- - = Il flag non viene modificato
- ? = Il flag è indefinito
- x = Il flag cambia in base al risultato prodotto dall'istruzione
- 0 = Il flag viene posto a zero
- 1 = Il flag viene posto a uno
Abbreviazioni utilizzate per gli operandi delle istruzioni:
- SRC = operando sorgente (source)
- DEST = operando destinazione (destination)
- r8, r16, r32 = registro a 8 / 16 /
32 bit
- m8, m16, m32 = blocco di memoria da 8 / 16 /
32 bit
- i8, i16, i32 = valore immediato a 8 / 16 /
32 bit
- o8, o16 = indirizzo di memoria (offset) a 8 / 16
bit
- p16:p16 = indirizzo di memoria in formato seg:offset
- m16:m16 = indirizzo di memoria in formato seg:offset
- sr = registro di segmento (segment register) a 16 bit
- rel8, rel16 = valore relativo a 8 / 16 bit
Nel calcolo dei cicli di clock necessari alla CPU (in modalità reale) per
l'esecuzione di ogni istruzione, si considerano valide le seguenti condizioni:
- l'istruzione è già stata precaricata e decodificata ed è quindi pronta
per l'esecuzione
- non sono necessari stati di attesa (wait states) della CPU
- gli eventuali operandi che si trovano in memoria, sono correttamente
allineati
Le CPU prese in considerazione sono quelle ritenute standard di riferimento:
- 8086 a 5 MHz
- 80286 a 10 MHz
- 80386 DX a 20 MHz
- 80486 DX a 33 MHz
Per conoscere i cicli di clock relativi alle CPU di classe superiore
(80586, 80686, etc), si faccia riferimento ai relativi manuali tecnici
forniti dai produttori.
A
AAA
ASCII Adjust AL After Addition - Aggiustamento del contenuto di AL
dopo una addizione tra due cifre Unpacked BCD.
Torna all'indice
AAD
ASCII Adjust AX Before Division - Aggiustamento del contenuto di AX
prima di una divisione tra numeri Unpacked BCD.
Torna all'indice
AAM
ASCII Adjust AX After Multiply - Aggiustamento del contenuto di AX
dopo una moltiplicazione tra due cifre Unpacked BCD.
Torna all'indice
AAS
ASCII Adjust AL After Subtraction - Aggiustamento del contenuto di AL
dopo una sottrazione tra due cifre Unpacked BCD.
Torna all'indice
ADC
Add with Carry - Esegue la somma DEST = DEST + SRC + CF.
Torna all'indice
ADD
Addition - Somma SRC con DEST e mette il risultato
in DEST.
Torna all'indice
AND
Logical AND - Esegue un AND logico tra SRC e DEST.
Torna all'indice
B
BOUND
Check Array Index Against Bounds - Verifica dei limiti dell'indice di un
vettore.
Torna all'indice
BSF
Bit Scan Forward - Scansione in avanti di SRC alla ricerca del
primo bit a livello logico 1.
Torna all'indice
BSR
Bit Scan Reverse - Scansione all'indietro di SRC alla ricerca del
primo bit a livello logico 1.
Torna all'indice
BSWAP
Byte Swap - Inversione dell'ordine dei byte in una DWORD.
Torna all'indice
BT
Bit Test - Test di un bit.
Torna all'indice
BTC
Bit Test and Complement - Test e inversione di un bit.
Torna all'indice
BTR
Bit Test and Reset - Test e azzeramento di un bit.
Torna all'indice
BTS
Bit Test and Set - Test e attivazione di un bit.
Torna all'indice
C
CALL
Call Procedure - Chiamata di un sottoprogramma.
Torna all'indice
CBW
Convert Byte to Word - Converte un BYTE in una WORD
attraverso l'estensione del bit di segno.
Torna all'indice
CDQ
Convert Doubleword to Quadword - Converte una DWORD in una QWORD
attraverso l'estensione del bit di segno.
Torna all'indice
CLC
Clear Carry Flag - Pone CF = 0.
Torna all'indice
CLD
Clear Direction Flag - Pone DF = 0.
Torna all'indice
CLI
Clear Interrupt Flag - Pone IF = 0.
Torna all'indice
CMC
Complement Carry Flag - Inverte il contenuto di CF.
Torna all'indice
CMP
Compare Two Operands - Comparazione tra due operandi.
Torna all'indice
CMPS, CMPSB, CMPSW, CMPSD
Compare String Operands - Comparazione tra due stringhe.
Torna all'indice
CMPXCHG
Compare and Exchange - Compara e scambia.
Torna all'indice
CMPXCHG8B
Compare and Exchange 8 Bytes - Compara e scambia due operandi a
64 bit.
r64 si riferisce ad un registro della FPU
Torna all'indice
CPUID
CPU Identification - Identificazione del modello di CPU
installato nel computer.
Torna all'indice
CWD, CWDE
Convert Word to Doubleword - Converte una WORD in una DWORD
attraverso l'estensione del bit di segno.
Torna all'indice
D
DAA
Decimal Adjust AL after Addition - Aggiustamento del contenuto di AL
dopo una addizione tra due numeri Packed BCD a 8 bit.
Torna all'indice
DAS
Decimal Adjust AL after Subtraction - Aggiustamento del contenuto di AL
dopo una sottrazione tra due numeri Packed BCD a 8 bit.
Torna all'indice
DEC
Decrement by 1 - Esegue la sottrazione DEST = DEST - 1.
Torna all'indice
DIV
Unsigned Divide - Divisione di AL/AX/EAX per un numero intero
senza segno.
Torna all'indice
E
ENTER
Make Stack Frame for Procedure Parameters - Predispone SP/ESP e
BP/EBP per la gestione dei parametri e delle variabili locali delle
procedure.
Torna all'indice
I
IDIV
Signed Divide - Divisione tra numeri interi con segno.
Torna all'indice
IMUL
Signed Multiply - Moltiplicazione tra numeri interi con segno.
Torna all'indice
IN
Input from Port - Lettura di 8/16/32 bit di dati da una
porta hardware.
Torna all'indice
INC
Increment by 1 - Esegue la somma DEST = DEST + 1.
Torna all'indice
INS, INSB, INSW, INSD
Input from Port to String - Trasferimento dati da una porta hardware
ad una stringa.
Torna all'indice
INT, INTO
Call to Interrupt Procedure - Chiamata di un gestore di interruzione.
Torna all'indice
IRET
Interrupt Return - Ritorno da un gestore di interruzione.
Torna all'indice
J
Jcond
Jump if Condition Is Met - Salta se la condizione cond è verificata.
Torna all'indice
JMP
Jump - Salto incondizionato.
Torna all'indice
L
LAHF
Load Status Flags into AH Register - Trasferisce in AH gli 8 bit
meno significativi del registro FLAGS/EFLAGS.
Torna all'indice
LDS, LES, LFS, LGS, LSS
Load Far Pointer - Trasferisce un indirizzo logico Seg:Offset
nella coppia sreg:reg specificata dal mnemonico dell'istruzione stessa
e dall'operando DEST.
Torna all'indice
LEA
Load Effective Address - Trasferisce nel registro DEST,
l'effective address specificato dall'operando SRC.
Torna all'indice
LEAVE
High Level Procedure Exit - Ripristina SP/ESP e BP/EBP alla
fine di una procedura dotata di parametri e variabili locali.
Torna all'indice
LOCK
Assert LOCK# Signal Prefix - Attivazione del segnale di LOCK.
Torna all'indice
LODS, LODSB, LODSW, LODSD
Load String - Lettura di un BYTE/WORD/DWORD da una stringa.
Torna all'indice
LOOP, LOOPZ/LOOPE, LOOPNZ/LOOPNE
Loop According to CX/ECX Counter - Controllo di un loop attraverso il
registro contatore CX/ECX.
Torna all'indice
M
MOV
Move - Copia bit per bit da SRC a DEST.
Torna all'indice
MOVS, MOVSB, MOVSW, MOVSD
Move Data from String to String - Copia di un BYTE/WORD/DWORD da stringa
a stringa.
Torna all'indice
MOVSX
Move with Sign-Extension - Copia bit per bit da SRC a DEST,
con estensione del bit di segno di DEST.
Torna all'indice
MOVZX
Move with Zero-Extend - Copia bit per bit da SRC a DEST,
con aggiunta di zeri alla sinistra di DEST.
Torna all'indice
MUL
Unsigned Multiply - Moltiplicazione di un numero intero senza segno,
per AL/AX/EAX.
Torna all'indice
N
NEG
Two's Complement Negation - Calcola il complemento a 2 di DEST
(cambiamento di segno).
Torna all'indice
NOP
No Operation - Nessuna operazione.
Torna all'indice
NOT
One's Complement Negation - Inverte tutti i bit di DEST (complemento
a 1).
Torna all'indice
O
OR
Logical Inclusive OR - Esegue un OR logico inclusivo tra
SRC e DEST.
Torna all'indice
OUT
Output to Port - Scrittura di 8/16/32 bit di dati in una
porta hardware.
Torna all'indice
OUTS, OUTSB, OUTSW, OUTSD
Output String to Port - Trasferimento dati da una stringa ad una
porta hardware.
Torna all'indice
P
POP
Pop a value from the stack - Estrazione di un valore dalla cima
dello stack.
Torna all'indice
POPA, POPAD
Pop All General-Purpose Registers - Estrazione dalla cima dello stack, di valori da copiare
in tutti i registri generali.
Torna all'indice
POPF, POPFD
Pop Stack into FLAGS/EFLAGS Register - Estrazione dalla cima dello stack,
di una WORD/DWORD da trasferire nel registro FLAGS/EFLAGS.
Torna all'indice
PUSH
Push Word or Doubleword onto the stack - Inserimento di un operando
sulla cima dello stack.
Torna all'indice
PUSHA, PUSHAD
Push All General-Purpose Registers - Inserimento sulla cima dello stack, del contenuto di
tutti i registri generali.
Torna all'indice
PUSHF, PUSHFD
Push FLAGS/EFLAGS Register onto the Stack - Inserimento sulla cima dello stack,
del contenuto del registro FLAGS/EFLAGS.
Torna all'indice
R
RCL
Rotate through Carry Left - Rotazione dei bit di DEST verso sinistra,
attraverso CF.
(*) CPU 8086 - aggiungere 4 cicli di clock per ogni rotazione da
1 bit
(*) CPU 80286 - aggiungere 1 ciclo di clock per ogni rotazione da
1 bit
Torna all'indice
RCR
Rotate through Carry Right - Rotazione dei bit di DEST verso destra,
attraverso CF.
(*) CPU 8086 - aggiungere 4 cicli di clock per ogni rotazione da
1 bit
(*) CPU 80286 - aggiungere 1 ciclo di clock per ogni rotazione da
1 bit
Torna all'indice
REP, REPE/REPZ, REPNE/REPNZ
Repeat String Operation Prefix - Prefisso per l'iterazione di un'istruzione
per le stringhe.
N = numero di iterazioni.
Torna all'indice
RET
Return from Procedure - Ritorno da un sottoprogramma.
Torna all'indice
ROL
Rotate Left - Rotazione dei bit di DEST verso sinistra.
(*) CPU 8086 - aggiungere 4 cicli di clock per ogni rotazione da
1 bit
(*) CPU 80286 - aggiungere 1 ciclo di clock per ogni rotazione da
1 bit
Torna all'indice
ROR
Rotate Right - Rotazione dei bit di DEST verso destra.
(*) CPU 8086 - aggiungere 4 cicli di clock per ogni rotazione da
1 bit
(*) CPU 80286 - aggiungere 1 ciclo di clock per ogni rotazione da
1 bit
Torna all'indice
S
SAHF
Store AH into Flags - Trasferisce il contenuto di AH negli 8
bit meno significativi del registro FLAGS/EFLAGS.
Torna all'indice
SAL
Shift Arithmetic Left - Scorrimento aritmetico dei bit di DEST verso
sinistra.
(*) CPU 8086 - aggiungere 4 cicli di clock per ogni scorrimento da
1 bit
(*) CPU 80286 - aggiungere 1 ciclo di clock per ogni scorrimento da
1 bit
Torna all'indice
SAR
Shift Arithmetic Right - Scorrimento aritmetico dei bit di DEST verso
destra.
(*) CPU 8086 - aggiungere 4 cicli di clock per ogni scorrimento da
1 bit
(*) CPU 80286 - aggiungere 1 ciclo di clock per ogni scorrimento da
1 bit
Torna all'indice
SBB
Integer Subtraction with Borrow - Esegue la sottrazione
DEST = DEST - (SRC + CF).
Torna all'indice
SCAS, SCASB, SCASW, SCASD
Scan String - Scansione di una stringa.
Torna all'indice
SETcond
Set Byte on Condition - Abilita un byte se la condizione cond è verificata.
Torna all'indice
SHL
Shift Logical Left - Scorrimento logico dei bit di DEST verso
sinistra.
(*) CPU 8086 - aggiungere 4 cicli di clock per ogni scorrimento da
1 bit
(*) CPU 80286 - aggiungere 1 ciclo di clock per ogni scorrimento da
1 bit
Torna all'indice
SHLD
Double Precision Shift Logical Left - Scorrimento logico dei bit di DEST
verso sinistra, in doppia precisione.
Torna all'indice
SHR
Shift Logical Right - Scorrimento logico dei bit di DEST verso
destra.
(*) CPU 8086 - aggiungere 4 cicli di clock per ogni scorrimento da
1 bit
(*) CPU 80286 - aggiungere 1 ciclo di clock per ogni scorrimento da
1 bit
Torna all'indice
SHRD
Double Precision Shift Logical Right - Scorrimento logico dei bit di DEST
verso destra, in doppia precisione.
Torna all'indice
STC
Set Carry Flag - Pone CF = 1.
Torna all'indice
STD
Set Direction Flag - Pone DF = 1.
Torna all'indice
STI
Set Interrupt Flag - Pone IF = 1.
Torna all'indice
STOS, STOSB, STOSW, STOSD
Store String - Scrittura di un BYTE/WORD/DWORD in una stringa.
Torna all'indice
SUB
Subtract - Esegue la sottrazione DEST = DEST - SRC.
Torna all'indice
T
TEST
Logical Compare - Esegue una comparazione logica (AND) tra
SRC e DEST.
Torna all'indice
W
WAIT
WAIT until the BUSY# pin is high - Attende finchè il coprocessore
matematico è occupato.
n = numero cicli di attesa della CPU.
Torna all'indice
X
XADD
Exchange and Add - Scambia e somma due operandi.
Torna all'indice
XCHG
Exchange Register/Memory with Register - Scambia il contenuto di SRC
e DEST.
Torna all'indice
XLAT, XLATB
Table Look-up Translation - Conversione attraverso una tabella di look-up.
Torna all'indice
XOR
Logical Exclusive OR - Esegue un OR logico esclusivo tra
SRC e DEST.
Torna all'indice