![]() | ![]() |
|
|
Istruzioni 8051
ISTRUZIONI ARITMETICHE
ADD, ADDC
Istruzione: |
ADD, ADDC |
||||||
Funzione: |
Somma l'Accumulatore, Somma l'Accumulatore con riporto |
||||||
Sintassi: |
ADD A,operando |
||||||
|
ADDC A,operando |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
ADD A,#data |
0x24 |
|
|
C, AC, OV |
|||
ADD A,iram addr |
0x25 |
|
|
C, AC, OV |
|||
ADD A,@R0 |
0x26 |
|
|
C, AC, OV |
|||
ADD A,@R1 |
0x27 |
|
|
C, AC, OV |
|||
ADD A,R0 |
0x28 |
|
|
C, AC, OV |
|||
ADD A,R1 |
0x29 |
|
|
C, AC, OV |
|||
ADD A,R2 |
0x2A |
|
|
C, AC, OV |
|||
ADD A,R3 |
0x2B |
|
|
C, AC, OV |
|||
ADD A,R4 |
0x2C |
|
|
C, AC, OV |
|||
ADD A,R5 |
0x2D |
|
|
C, AC, OV |
|||
ADD A,R6 |
0x2E |
|
|
C, AC, OV |
|||
ADD A,R7 |
0x2F |
|
|
C, AC, OV |
|||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
ADDC A,#data |
0x34 |
|
|
C, AC, OV |
ADDC A,iram addr |
0x35 |
|
|
C, AC, OV |
ADDC A,@R0 |
0x36 |
|
|
C, AC, OV |
ADDC A,@R1 |
0x37 |
|
|
C, AC, OV |
ADDC A,R0 |
0x38 |
|
|
C, AC, OV |
ADDC A,R1 |
0x39 |
|
|
C, AC, OV |
ADDC A,R2 |
0x3A |
|
|
C, AC, OV |
ADDC A,R3 |
0x3B |
|
|
C, AC, OV |
ADDC A,R4 |
0x3C |
|
|
C, AC, OV |
ADDC A,R5 |
0x3D |
|
|
C, AC, OV |
ADDC A,R6 |
0x3E |
|
|
C, AC, OV |
ADDC A,R7 |
0x3F |
|
|
C, AC, OV |
Descrizione: ADD e ADC sommano entrambi il valore operando all'Accumulatore e mettono il risultato nell'Accumulatore stesso. Il valore dell'operando non viene modificato. ADD e ADC funzionano nella stessa maniera eccetto il fatto che ADC tiene conto anche del riporto (Carry Flag).
Il bit Carry (C) e'settato se c'e' un riporto del bit 7. In altre parole, se il valore della somma senza segno tra l'Accumulatore e l'operando (e anche di C nel caso di ADC) supera il valore di 255 il bit C e' settato altrimenti resettato.
Il bit Auxillary Carry (AC) e' settato se c'e' un riporto del bit 3. In altre parole, se il valore della somma senza segno tra l'Accumulatore e l'operando (e anche di C nel caso di ADC) supera il valore di 15 il bit AC e' settato altrimenti resettato.
Il bit Overflow (OV) e' settato se il bit 6 o il bit 7 hanno il riporto, ma non entrambi. In altri termini, se se il valore della somma con segno tra l'Accumulatore e l'operando (e anche di C nel caso di ADC) va fuori del range (da -128 a +127) il bit OV e' settato altrimenti resettato.
DA
Istruzione: |
DA |
||||||
Funzione: |
Aggiusta il valore Decimale dell'Accumulatore |
||||||
Sintassi: |
DA A |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
DA |
0xD4 |
|
|
C |
|||
Descrizione: DA aggiusta il contenuto
dell'Accumulatore al corrispondente numero BCD (Binary Coded Decimal) dopo che
due numeri BCD sono stati addizionati con ADD o ADDC. Se il bit C e' settato o
se il valore del nibble meno significativo supera il valore 9, 0x06 viene
aggiunto all'Accumulatore. Se il bit C era gia' da uno prima dell' inizio
dell'istruzione oppure 0x06 era gia' stato addizionato nella prima fase, 0x60
viene aggiunto all'Accumulatore.
Il bit Carry(C) e' settato se il risultato finale supera 0x99,
altrimenti e' resettato.
DEC
Istruzione: |
DEC |
||||||
Funzione: |
Decrementa il Registro |
||||||
Sintassi: |
DEC registro |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
DEC A |
0x14 |
|
|
Inv |
|||
DEC iram addr |
0x15 |
|
|
Inv |
|||
DEC @R0 |
0x16 |
|
|
Inv |
|||
DEC @R1 |
0x17 |
|
|
Inv |
|||
DEC R0 |
0x18 |
|
|
Inv |
|||
DEC R1 |
0x19 |
|
|
Inv |
|||
DEC R2 |
0x1A |
|
|
Inv |
|||
DEC R3 |
0x1B |
|
|
Inv |
|||
DEC R4 |
0x1C |
|
|
Inv |
|||
DEC R5 |
0x1D |
|
|
Inv |
|||
DEC R6 |
0x1E |
|
|
Inv |
|||
DEC R7 |
0x1F |
|
|
Inv |
|||
Descrizione: DEC decrementa il valore del registro di 1. Se il valore iniziale del registro e' zero, esso sara' portato a 255 (0xFF esadecimale). Nota: Il bit C non viene settato nel passaggio da 0 a 255 (rolls over).
DIV
Istruzione: |
DIV |
||||||
Funzione: |
Divide l'Accumulatore per B |
||||||
Sintassi: |
DIV AB |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
DIV AB |
0x84 |
|
|
C, OV |
|||
Descrizione: Divide il valore senza segno dell'Accumulatore per il valore senza segno del registro "B". Il quoziente della divisione viene posto nell'Accumulatore ed il resto in "B".
Il bit Carry (C) e' sempre azzerato.
Il bit Overflow (OV) e' settato se viene tentata una divisione per zero, altrimenti e' resettato.
INC
Istruzione: |
INC |
||||||
Funzione: |
Incrementa il Registro |
||||||
Sintassi: |
INC registro |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
INC A |
0x04 |
|
|
Inv |
|||
INC iram addr |
0x05 |
|
|
Inv |
|||
INC @R0 |
0x06 |
|
|
Inv |
|||
INC @R1 |
0x07 |
|
|
Inv |
|||
INC R0 |
0x08 |
|
|
Inv |
|||
INC R1 |
0x09 |
|
|
Inv |
|||
INC R2 |
0x0A |
|
|
Inv |
|||
INC R3 |
0x0B |
|
|
Inv |
|||
INC R4 |
0x0C |
|
|
Inv |
|||
INC R5 |
0x0D |
|
|
Inv |
|||
INC R6 |
0x0E |
|
|
Inv |
|||
INC R7 |
0x0F |
|
|
Inv |
|||
INC DPTR |
0xA3 |
|
|
Inv |
|||
Descrizione: INC incrementa il valore del registro di 1. Se il valore inizialedel registro e' pari a 255 (0xFF esadecimale) tale incremento lo portera' a zero. Nota: il bit C non viene settato dal passaggio da 255 a 0 (rolls over). Nel caso di "INC DPTR", viene incrementato il valore a 2 byte di DPTR come un intero senza segno. Se il valore iniziale di DPTR e' 65535 (0xFFFF esadecimale) l'incremento portera' DPTR a zero. Anche in questo caso il bit C non viene settato.
MUL
Istruzione: |
MUL |
||||||
Funzione: |
Moltiplica l'Accumulatore per B |
||||||
Sintassi: |
MUL AB |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
MUL AB |
0xA4 |
|
|
C, OV |
|||
Descrizione: Moltiplica il valore senza segno
dell'Accumulatore per il valore senza segno del registro "B". Il byte
piu' significativo del risultato e' posto nell'Accumullatore e quello meno
significativo in B.
Il bit Carry (C) e sempre azzerato.
Il bit Overflow (OV) e' settato se il risultato dell'operazione e' maggiore di 255, altrimenti e' resettato.
SUBB
Istruzione: |
SUBB |
||||||
Funzione: |
Sottrai dall'Accumulatore con il prestito |
||||||
Sintassi: |
SUBB A,operando |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
SUBB A,#data |
0x94 |
|
|
C, AC, OV |
|||
SUBB A,iram addr |
0x95 |
|
|
C, AC, OV |
|||
SUBB A,@R0 |
0x96 |
|
|
C, AC, OV |
|||
SUBB A,@R1 |
0x97 |
|
|
C, AC, OV |
|||
SUBB A,R0 |
0x98 |
|
|
C, AC, OV |
|||
SUBB A,R1 |
0x99 |
|
|
C, AC, OV |
|||
SUBB A,R2 |
0x9A |
|
|
C, AC, OV |
|||
SUBB A,R3 |
0x9B |
|
|
C, AC, OV |
|||
SUBB A,R4 |
0x9C |
|
|
C, AC, OV |
|||
SUBB A,R5 |
0x9D |
|
|
C, AC, OV |
|||
SUBB A,R6 |
0x9E |
|
|
C, AC, OV |
|||
SUBB A,R7 |
0x9F |
|
|
C, AC, OV |
|||
Descrizione: SUBB sottrae il valore dell'operando dal valore dell'Accumulatore, lasciando il risultato nell'Accumulatore stesso. Il valore dell'operando non viene modificato.
Il bit Carry (C) viene settato se e' stato richiesto il prestito per il bit 7, altrimenti e' resettato. In altre parole, se il valore da sottrarre e' maggiore dell'Accumulatore il bit C e' settato.
Il bit Auxillary Carry (AC) e' settato se il prestito e' richiesto dal bit 3. In altre parole, il bit e' settato se il nibble meno significato del valore da sottrarre e' stato piu' alto del nibble meno significativo dell'Accumulatore.
Il bit Overflow (OV) e' settato se il prestito e' stato richiesto dal bit 6 o dal bit 7, ma non da entrambi. In altri termini, il bit OV e' settato se la sottrazione di due byte con segno ha dato come risultato un valore fuori del range (da -128 a +127), altrimenti e' resettato.
ISTRUZIONI LOGICHE
ANL
Istruzione: |
ANL |
||||||
Funzione: |
AND a bit |
||||||
Sintassi: |
ANL Operando 1, Operando 2 |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
ANL iram addr,A |
0x52 |
|
|
Inv |
|||
ANL iram addr,#data |
0x53 |
|
|
Inv |
|||
ANL A,#data |
0x54 |
|
|
Inv |
|||
ANL A,iram addr |
0x55 |
|
|
Inv |
|||
ANL A,@R0 |
0x56 |
|
|
Inv |
|||
ANL A,@R1 |
0x57 |
|
|
Inv |
|||
ANL A,R0 |
0x58 |
|
|
Inv |
|||
ANL A,R1 |
0x59 |
|
|
Inv |
|||
ANL A,R2 |
0x5A |
|
|
Inv |
|||
ANL A,R3 |
0x5B |
|
|
Inv |
|||
ANL A,R4 |
0x5C |
|
|
Inv |
|||
ANL A,R5 |
0x5D |
|
|
Inv |
|||
ANL A,R6 |
0x5E |
|
|
Inv |
|||
ANL A,R7 |
0x5F |
|
|
Inv |
|||
Descrizione: ANL esegue l'operazione di "AND" bit a bit tra l'operando 1 e l'operando 2. Il risultato viene memorizzato nell'operando 1. Il valore dell'operando 2 non viene modificato. L'AND logico compara ogni bit del primo operando con il bit corrispondente del secondo e viene settato solo e solo se entrambi i bit erano ad uno, altrimenti viene resettato.
CLR
Istruzione: |
CLR |
Funzione: |
Pone a zero il Registro |
Sintassi: |
CLR A |
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
CLR A |
0xE4 |
|
|
Inv |
Descrizione: CLR A pone a zero tutti i bit dell'Accumulatore.
CPL
Istruzione: |
CPL |
||||||
Funzione: |
Complementa il Registro |
||||||
Sintassi: |
CPL A |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
CPL A |
0xF4 |
|
|
Inv |
|||
Descrizione: CPL A complementa l'Accumulatore
ORL
Istruzione: |
ORL |
||||||
Funzione: |
OR a bit |
||||||
Sintassi: |
ORL Operando1,Operando2 |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
ORL iram addr,A |
0x42 |
|
|
Inv |
|||
ORL iram addr,#data |
0x43 |
|
|
Inv |
|||
ORL A,#data |
0x44 |
|
|
Inv |
|||
ORL A,iram addr |
0x45 |
|
|
Inv |
|||
ORL A,@R0 |
0x46 |
|
|
Inv |
|||
ORL A,@R1 |
0x47 |
|
|
Inv |
|||
ORL A,R0 |
0x48 |
|
|
Inv |
|||
ORL A,R1 |
0x49 |
|
|
Inv |
|||
ORL A,R2 |
0x4A |
|
|
Inv |
|||
ORL A,R3 |
0x4B |
|
|
Inv |
|||
ORL A,R4 |
0x4C |
|
|
Inv |
|||
ORL A,R5 |
0x4D |
|
|
Inv |
|||
ORL A,R6 |
0x4E |
|
|
Inv |
|||
ORL A,R7 |
0x4F |
|
|
Inv |
|||
Descrizione: ORL
esegue l'operazione di "OR" bit a bit tra l'operando 1 e l'operando
2. Il risultato viene memorizzato nell'operando 1. Il valore dell'operando
2 non viene modificato. L'OR logico compara ogni bit del primo operando con
il bit corrispondente del secondo e viene resettato se tutti e due bit erano ad
zero, altrimenti viene settato.
RL
Istruzione: |
RL |
Funzione: |
Ruota l'Accumulatore a sinistra |
Sintassi: |
RL A |
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
RL A |
0x23 |
|
|
C |
Descrizione: Esegue lo shift dei bit dell'Accumulatore a sinistra. Il bit piu' a sinistra (bit 7) dell'Accumulatore e' caricato nel bit piu' a destra (bit 0).
RLC
Istruzione: |
RLC |
||||||
Funzione: |
Ruota l'Accumulatore a sinistra attraverso il carry |
||||||
Sintassi: |
RLC A |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
RLC A |
0x33 |
|
|
C |
|||
Descrizione: Esegue lo shift dei bit dell'Accumulatore a sinistra. Il bit piu' a sinistra (bit 7) dell'Accumulatore viene caricato nel Carry Flag e il valore originale del Carry e' caricato nel bit piu' a destra (bit 0). Questa funzione e' usata per effettuare la motiplicazione veloce per due.
RR
Istruzione: |
RR |
||||||
Funzione: |
Ruota l'Accumulatore a edestra |
||||||
Sintassi: |
RR A |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
RR A |
0x03 |
|
|
Inv |
|||
Descrizione: Esegue lo shift a destra dei bit dell'Accumulatore. Il bit piu' a destra (bit 0) dell'Accumulatore e' caricato nel bit piu' a sinistra (bit 7).
RRC
Istruzione: |
RRC |
||||||
Funzione: |
Ruota l'Accumulatore a destra attraverso il Carry |
||||||
Sintassi: |
RRC A |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
RRC A |
0x13 |
|
|
C |
|||
Descrizione: Esegue lo shift dei bit dell'Accumulatore a destra. Il bit piu' a destra (bit 0) dell'Accumulatore e' caricato nel Carry Flag e il valore originale del Carry e' caricato nel bit piu' a sinistra (bit 7). Questa funzione e' usata per dividere velocemente per due.
XRL
Istruzione: |
XRL |
||||||
Funzione: |
OR esclusivo a bit |
||||||
Sintassi: |
XRL Operando1,Operando2 |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
XRL iram addr,A |
0x62 |
|
|
Inv |
|||
XRL iram addr,#data |
0x63 |
|
|
Inv |
|||
XRL A,#data |
0x64 |
|
|
Inv |
|||
XRL A,iram addr |
0x65 |
|
|
Inv |
|||
XRL A,@R0 |
0x66 |
|
|
Inv |
|||
XRL A,@R1 |
0x67 |
|
|
Inv |
|||
XRL A,R0 |
0x68 |
|
|
Inv |
|||
XRL A,R1 |
0x69 |
|
|
Inv |
|||
XRL A,R2 |
0x6A |
|
|
Inv |
|||
XRL A,R3 |
0x6B |
|
|
Inv |
|||
XRL A,R4 |
0x6C |
|
|
Inv |
|||
XRL A,R5 |
0x6D |
|
|
Inv |
|||
XRL A,R6 |
0x6E |
|
|
Inv |
|||
XRL A,R7 |
0x6F |
|
|
Inv |
|||
Descrizione: XRL esegue l'OR esclusivo "XOR" bit a bit tra l'operando 1 e l'operando 2, lasciando il risultato nell'operando 1. Il valore dell'operando 2 non viene modificato. Lo XOR logico compara i bit dell'operando 1 con i corrispondenti dell'operando 2 e setta il bit corrispondente se essi sono diversi altrimenti lo resetta.
ISTRUZIONI DI TRASFERIMENTO DATI
MOV
Istruzione: |
MOV |
||||||
Funzione: |
Trasferisci un byte di Memoria |
||||||
Sintassi: |
MOV Operando1,Operando2 |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
MOV @R0,#data |
0x76 |
|
|
Inv |
|||
MOV @R1,#data |
0x77 |
|
|
Inv |
|||
MOV @R0,A |
0xF6 |
|
|
Inv |
|||
MOV @R1,A |
0xF7 |
|
|
Inv |
|||
MOV @R0,iram addr |
0xA6 |
|
|
Inv |
|||
MOV @R1,iram addr |
0xA7 |
|
|
Inv |
|||
MOV A,#data |
0x74 |
|
|
Inv |
|||
MOV A,@R0 |
0xE6 |
|
|
Inv |
|||
MOV A,@R1 |
0xE7 |
|
|
Inv |
|||
MOV A,R0 |
0xE8 |
|
|
Inv |
|||
MOV A,R1 |
0xE9 |
|
|
Inv |
|||
MOV A,R2 |
0xEA |
|
|
Inv |
|||
MOV A,R3 |
0xEB |
|
|
Inv |
|||
MOV A,R4 |
0xEC |
|
|
Inv |
|||
MOV A,R5 |
0xED |
|
|
Inv |
|||
MOV A,R6 |
0xEE |
|
|
Inv |
|||
MOV A,R7 |
0xEF |
|
|
Inv |
|||
MOV A,iram addr |
0xE5 |
|
|
Inv |
|||
MOV DPTR,#data16 |
0x90 |
|
|
Inv |
|||
MOV R0,#data |
0x78 |
|
|
Inv |
|||
MOV R1,#data |
0x79 |
|
|
Inv |
|||
MOV R2,#data |
0x7A |
|
|
Inv |
|||
MOV R3,#data |
0x7B |
|
|
Inv |
|||
MOV R4,#data |
0x7C |
|
|
Inv |
|||
MOV R5,#data |
0x7D |
|
|
Inv |
|||
MOV R6,#data |
0x7E |
|
|
Inv |
|||
MOV R7,#data |
0x7F |
|
|
Inv |
|||
MOV R0,A |
0xF8 |
|
|
Inv |
|||
MOV R1,A |
0xF9 |
|
|
Inv |
|||
MOV R2,A |
0xFA |
|
|
Inv |
|||
MOV R3,A |
0xFB |
|
|
Inv |
|||
MOV R4,A |
0xFC |
|
|
Inv |
|||
MOV R5,A |
0xFD |
|
|
Inv |
|||
MOV R6,A |
0xFE |
|
|
Inv |
|||
MOV R7,A |
0xFF |
|
|
Inv |
|||
MOV R0,iram addr |
0xA8 |
|
|
Inv |
|||
MOV R1,iram addr |
0xA9 |
|
|
Inv |
|||
MOV R2,iram addr |
0xAA |
|
|
Inv |
|||
MOV R3,iram addr |
0xAB |
|
|
Inv |
|||
MOV R4,iram addr |
0xAC |
|
|
Inv |
|||
MOV R5,iram addr |
0xAD |
|
|
Inv |
|||
MOV R6,iram addr |
0xAE |
|
|
Inv |
|||
MOV R7,iram addr |
0xAF |
|
|
Inv |
|||
MOV bit addr,C |
0x92 |
|
|
Inv |
|||
MOV iram addr,#data |
0x75 |
|
|
Inv |
|||
MOV iram addr,@R0 |
0x86 |
|
|
Inv |
|||
MOV iram addr,@R1 |
0x87 |
|
|
Inv |
|||
MOV iram addr,R0 |
0x88 |
|
|
Inv |
|||
MOV iram addr,R1 |
0x89 |
|
|
Inv |
|||
MOV iram addr,R2 |
0x8A |
|
|
Inv |
|||
MOV iram addr,R3 |
0x8B |
|
|
Inv |
|||
MOV iram addr,R4 |
0x8C |
|
|
Inv |
|||
MOV iram addr,R5 |
0x8D |
|
|
Inv |
|||
MOV iram addr,R6 |
0x8E |
|
|
Inv |
|||
MOV iram addr,R7 |
0x8F |
|
|
Inv |
|||
MOV iram addr,A |
0xF5 |
|
|
Inv |
|||
MOV iram addr,iram addr |
0x85 |
|
|
Inv |
|||
Descrizione: MOV copia il valore dell'Operando 2 nell'Operando 1. Il valore dell'Operando 2 rimane inalterato. Ambedue gli operandi devono risiedere nella RAM interna. Nessun flag viene modificato a meno che l'istruzione non trasferisce il valore nel registro PSW (che contiene esso stesso i flag).
** Nota: Nel caso di
"MOV iram addr,iram addr" il trasferimento viene effettuato all'inverso
delle altre operazioni di mov. Per esempio l'istruzione 0x85, 0x20, 0x20 va
interpretata come:
"Carica il contenuto della locazione 0x20 nella locazione 0x50" e non
il viceversa come si e' portati a presumere.
MOVC
Istruzione: |
MOVC |
||||||
Funzione: |
Trasferisci il byte di codice nell'Accumulatore |
||||||
Sintassi: |
MOVC A,@A+Registro |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
MOVC A,@A+DPTR |
0x93 |
|
|
Inv |
|||
MOVC A,@A+PC |
0x83 |
|
|
Inv |
|||
Descrizione: MOVC trasferisce un byte di memoria programma nell'Accumulatore. L'indirizzo del byte da trasferire e' calcolato sommando il valore dell'Accumulatore o con DPTR o con il PC (Program Counter). Nel secondo caso il valore del Program Counter viene incrementato di uno prima di essere usato.
MOVX
Istruzione: |
MOVX |
Funzione: |
Trasferisci i dati alla/dalla memoria esterna (XRAM) |
Sintassi: |
MOVX Operando1,Operando2 |
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
MOVX @DPTR,A |
0xF0 |
|
|
Inv |
MOVX @R0,A |
0xF2 |
|
|
Inv |
MOVX @R1,A |
0xF3 |
|
|
Inv |
MOVX A,@DPTR |
0xE0 |
|
|
Inv |
MOVX A,@R0 |
0xE2 |
|
|
Inv |
MOVX A,@R1 |
0xE3 |
|
|
Inv |
Descrizione: MOVX trasferisce un byte alla o dalla memoria esterna dal o all'Accumulatore.
Se l'Operando 1 e' @DPTR, l'Accumulatore e' trasferito nell'indirizzo a 16-bit della memoria esterna indicato da DPTR. Questa istruzione usa entrambe le porte P0 e P2 per trasferire l'indirizzo a 16-bit ed il dato verso l'esterno. Se l'operando 2 e' @DPTR il trasferimento viene eseguito dalla memoria esterna all'Accumulatore.
Se l'Operando 1 e' @R0 o @R1, l'Accumulatore e' trasferito nell'indirizzo a 8-bit della memoria esterna indicata dal registro corrispondente. Questa istruzione usa soltanto la porta P0 per trasferire l'indirizzo a 8-bit ed il dato verso l'esterno. La porta P2 non viene modificata. Se l'operando 2 e' @R0 o @R1 allora il byte viene trasferito dalla memoria esterna all'Accumulatore.
POP
Istruzione: |
POP |
||||||
Funzione: |
Prendi il valore dallo Stack |
||||||
Sintassi: |
POP |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
POP iram addr |
0xD0 |
|
|
Inv |
|||
Descrizione: POP effettua il "pop" dallo stack all'indirizzo iram addr specificato. L'istruzione POP prende il valore contenuto nella RAM interna puntato dallo stack pointer e lo carica nell'indirizzo iram addr. Lo stack pointer viene poi decrementato di uno.
PUSH
Istruzione: |
PUSH |
||||||
Funzione: |
Metti il valore nello Stack |
||||||
Sintassi: |
PUSH |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
PUSH iram addr |
0xC0 |
|
|
Inv |
|||
Descrizione: PUSH effettua l'operazione di "push" del valore specificato da iram addr nello stack. L'istruzione PUSH, prima incrementa il valore dello stack pointer di uno, poi prende il valore contenuto nell'indirizzo iram addr e lo memorizza nella RAM interna all'indirizzo puntato dallo Stack Pointer.
XCH
Istruzione: |
XCH |
||||||
Funzione: |
Scambia i byte |
||||||
Sintassi: |
XCH A,Registro |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
XCH A,@R0 |
0xC6 |
|
|
Inv |
|||
XCH A,@R1 |
0xC7 |
|
|
Inv |
|||
XCH A,R0 |
0xC8 |
|
|
Inv |
|||
XCH A,R1 |
0xC9 |
|
|
Inv |
|||
XCH A,R2 |
0xCA |
|
|
Inv |
|||
XCH A,R3 |
0xCB |
|
|
Inv |
|||
XCH A,R4 |
0xCC |
|
|
Inv |
|||
XCH A,R5 |
0xCD |
|
|
Inv |
|||
XCH A,R6 |
0xCE |
|
|
Inv |
|||
XCH A,R7 |
0xCF |
|
|
Inv |
|||
XCH A,iram addr |
0xC5 |
|
|
Inv |
|||
Descrizione: L'istruzione scambia il valore dell'Accumulatore con il valore del registro indicato nell'istruzione.
XCHD
Istruzione: |
XCHD |
||||||
Funzione: |
Scambia i digit |
||||||
Sintassi: |
XCHD A,[@R0/@R1] |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
XCHD A,@R0 |
0xD6 |
|
|
Inv |
|||
XCHD A,@R1 |
0xD7 |
|
|
Inv |
|||
Descrizione: Scambia il nibble meno significato dell'Accumulatore con il nibble meno significativo della locazione di RAM interna indirizzata da R0 o R1. Il nibble piu' significativo dei registri non viene modificato.
ISTRUZIONI SU VARIABILI A BIT
ANL
Istruzione: |
ANL |
||||||
Funzione: |
AND a bit |
||||||
Sintassi: |
ANL C, bit |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
ANL C,bit addr |
0x82 |
|
|
C |
|||
ANL C,/bit addr |
0xB0 |
|
|
C |
|||
Descrizione: Il valore del bit C e' calcolato in AND logico con il bit indirizzato e il risultato viene lasciato in C. Un simbolo "/" davanti al bit indica che verra' preso il suo valore negato. Il valore del bit indirizzato rimane in ogni caso inalterato.
CLR
Istruzione: |
CLR |
||||||
Funzione: |
Poni a zero il bit |
||||||
Sintassi: |
CLR bit |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
CLR bit addr |
0xC2 |
|
|
Inv |
|||
CLR C |
0xC3 |
|
|
C |
|||
Descrizione: CLR pone a zero il bit indicato nell'istruzione.
CPL
Istruzione: |
CPL |
||||||
Funzione: |
Complementa il bit |
||||||
Sintassi: |
CPL bit |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
CPL C |
0xB3 |
|
|
C |
|||
CPL bit addr |
0xB2 |
|
|
Inv |
|||
Descrizione: CPL complementa il valore del bit indicato nell'istruzione.
JB
Istruzione: |
JB |
||||||
Funzione: |
Salta se il bit e' ad uno |
||||||
Sintassi: |
JB bit addr, reladdr |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
JB bit addr,reladdr |
0x20 |
|
|
Inv |
|||
Descrizione: JB salta all'indirizzo indicato da reladdr se il bit indicato da bit addr e' da uno, altrimenti l'esecuzione del programma continua con l'istruzione successiva a quella dell'istruzione JB.
JBC
Istruzione: |
JBC |
||||||
Funzione: |
Salta se il bit e' ad uno e resettato |
||||||
Sintassi: |
JB bit addr, reladdr |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
JBC bit addr,reladdr |
0x10 |
|
|
Inv |
|||
Descrizione: JBC salta all'indirizzo indicato da reladdr se il bit indicato da bit addr e' ad uno e prima di saltare resetta il bit di condizione. Se il bit di condizione non e' settato l'esecuzione del programma continua con l'istruzione successiva a quella dell'istruzione JBC.
JC
Istruzione: |
JC |
||||||
Funzione: |
Salta se il Carry e' settato |
||||||
Sintassi: |
JC reladdr |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
JC reladdr |
0x40 |
|
|
Inv |
|||
Descrizione: JC salta all'indirizzo indicato da reladdr se il Carry bit e' ad uno, altrimenti l'esecuzione del programma continua con l'istruzione successiva a quella dell'istruzione JC.
JNB
Istruzione: |
JNB |
||||||
Funzione: |
Salta se il bit non e' settato |
||||||
Sintassi: |
JNB bit addr,reladdr |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
JNB bit addr,reladdr |
0x30 |
|
|
Inv |
|||
Descrizione: JNB salta all'indirizzo indicato da reladdr se il bit indicato da bit addr non e' settato, altrimenti l'esecuzione del programma continua con l'istruzione successiva a quella dell'istruzione JNB.
JNC
Istruzione: |
JNC |
||||||
Funzione: |
Salta se il Carry non e' settato |
||||||
Sintassi: |
JNC reladdr |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
JNC reladdr |
0x50 |
|
|
Inv |
|||
Descrizione: JNC salta all'indirizzo indicato da reladdr se il Carry bit non e' settato, altrimenti l'esecuzione del programma continua con l'istruzione successiva a quella dell'istruzione JNC.
MOV
Istruzione: |
MOV |
||||||
Funzione: |
Trasferisci un bit |
||||||
Sintassi: |
MOV bit |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
MOV C,bit addr |
0xA2 |
|
|
C |
|||
MOV bit addr,C |
0x92 |
|
|
Inv |
|||
Descrizione: MOV copia il valore del secondo operando a bit nel primo. Il valore del secondo operando a bit rimane inalterato.
ORL
Istruzione: |
ORL |
||||||
Funzione: |
OR a bit |
||||||
Sintassi: |
ORL Operando1,Operando2 |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
ORL C,bit addr |
0x72 |
|
|
C |
|||
ORL C,/bit addr |
0xA0 |
|
|
C |
|||
Descrizione: Il valore del bit C e' calcolato in OR logico con il bit indirizzato e il risultato viene lasciato in C. Un simbolo "/" davanti al bit indica che verra' preso il suo valore negato. Il valore del bit indirizzato rimane in ogni caso inalterato.
SETB
Istruzione: |
SETB |
||||||
Funzione: |
Setta il Bit |
||||||
Sintassi: |
SETB bit addr |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
SETB C |
0xD3 |
|
|
C |
|||
SETB bit addr |
0xD2 |
|
|
Inv |
|||
Descrizione: Setta il bit specificato
ISTRUZIONI DI SALTO
ACALL
Istruzione: |
ACALL |
||||||
Funzione: |
Chiama una subroutine con salto assoluto in un blocco di 2K |
||||||
Sintassi: |
ACALL code address |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
ACALL page0 |
0x11 |
|
|
Inv |
|||
ACALL page1 |
0x31 |
|
|
Inv |
|||
ACALL page2 |
0x51 |
|
|
Inv |
|||
ACALL page3 |
0x71 |
|
|
Inv |
|||
ACALL page4 |
0x91 |
|
|
Inv |
|||
ACALL page5 |
0xB1 |
|
|
Inv |
|||
ACALL page6 |
0xD1 |
|
|
Inv |
|||
ACALL page7 |
0xF1 |
|
|
Inv |
|||
Descrizione: ACALL chiama una subroutine senza condizioni all'indirizzo di codice indicato da code address. A questo punto viene salvato nello stack l'indirizzo dell'istruzione che segue ACALL, prima il byte meno significativo e poi quello piu' significativo. Il Program Counter viene caricato con il valore dove risiede la subroutine chiamata.
Il nuovo valore del Program Counter e' calcolato sostituendo il suo byte meno significativo con il secondo byte dell'istruzione ACALL e sostituendo i bit da 0 a 2 del byte piu' significativo del Program Counter con i 3 bit che indicano la pagina ove saltare. I bit da 3 a 7 del byte piu' signficativo del Program Counter restano inalterati.
Poiche' ACALL modifica solo 11 bit del Program Counter, le chiamate possono dirette a routine locate all'interno dello stesso blocco di 2k come il primo byte che segue l'istruzione ACALL.
AJMP
Istruzione: |
AJMP |
||||||
Funzione: |
Salto assoluto in un blocco di 2k |
||||||
Sintassi: |
AJMP code address |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
AJMP page0 |
0x01 |
|
|
Inv |
|||
AJMP page1 |
0x21 |
|
|
Inv |
|||
AJMP page2 |
0x41 |
|
|
Inv |
|||
AJMP page3 |
0x61 |
|
|
Inv |
|||
AJMP page4 |
0x81 |
|
|
Inv |
|||
AJMP page5 |
0xA1 |
|
|
Inv |
|||
AJMP page6 |
0xC1 |
|
|
Inv |
|||
AJMP page7 |
0xE1 |
|
|
Inv |
|||
Descrizione: AJMP salta senza condizioni all'indirizzo di codice indicato da code address.
Il nuovo valore del Program Counter e' calcolato sostituendo il suo byte meno significativo con il secondo byte dell'istruzione AJMP e sostituendo i bit da 0 a 2 del byte piu' significativo del Program Counter con i 3 bit che indicano la pagina ove saltare. I bit da 3 a 7 del byte piu' signficativo del Program Counter restano inalterati.
Poiche' AJMP modifica solo 11 bit del Program Counter, le chiamate possono dirette a routine locate all'interno dello stesso blocco di 2k come il primo byte che segue l'istruzione AJMP.
CJNE
Istruzione: |
CJNE |
||||||
Funzione: |
Compara e salta se non uguale |
||||||
Sintassi: |
CJNE Operando1,Operando2,reladdr |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
CJNE A,#data,reladdr |
0xB4 |
|
|
C |
|||
CJNE A,iram addr,reladdr |
0xB5 |
|
|
C |
|||
CJNE @R0,#data,reladdr |
0xB6 |
|
|
C |
|||
CJNE @R1,#data,reladdr |
0xB7 |
|
|
C |
|||
CJNE R0,#data,reladdr |
0xB8 |
|
|
C |
|||
CJNE R1,#data,reladdr |
0xB9 |
|
|
C |
|||
CJNE R2,#data,reladdr |
0xBA |
|
|
C |
|||
CJNE R3,#data,reladdr |
0xBB |
|
|
C |
|||
CJNE R4,#data,reladdr |
0xBC |
|
|
C |
|||
CJNE R5,#data,reladdr |
0xBD |
|
|
C |
|||
CJNE R6,#data,reladdr |
0xBE |
|
|
C |
|||
CJNE R7,#data,reladdr |
0xBF |
|
|
C |
|||
Descrizione: CJNE compara il valore dell'operando 1 con quello dell'operando 2 e salta all'indirizzo relativo indicato se essi non sono uguali. In caso contrario, il programma prosegue la sua esecuzione dell'istruzione successiva a quella dell'istruzione CJNE.
Il bit Carry (C) e' settato se l'operando 1 e' inferiore all'operando 2, altrimenti e' resettato.
DJNZ
Istruzione: |
DJNZ |
||||||
Funzione: |
Decrementa e salta se il risultato non e' zero |
||||||
Sintassi: |
DJNZ Registro,reladdr |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
DJNZ iram addr,reladdr |
0xD5 |
|
|
Inv |
|||
DJNZ R0,reladdr |
0xD8 |
|
|
Inv |
|||
DJNZ R1,reladdr |
0xD9 |
|
|
Inv |
|||
DJNZ R2,reladdr |
0xDA |
|
|
Inv |
|||
DJNZ R3,reladdr |
0xDB |
|
|
Inv |
|||
DJNZ R4,reladdr |
0xDC |
|
|
Inv |
|||
DJNZ R5,reladdr |
0xDD |
|
|
Inv |
|||
DJNZ R6,reladdr |
0xDE |
|
|
Inv |
|||
DJNZ R7,reladdr |
0xDF |
|
|
Inv |
|||
Descrizione: DJNZ decementa il valore del registro di 1. Se il valore iniziale del registro e' 0, l'operazione fara' in modo che esso contenga 255 (0xFF Esadecimale). Se il nuovo valore del Registro non e' zero, il programma saltera' all'indirizzo indicato da relative addr. Se invece il nuovo valore del Registro e' zero, il programma continuera' dall'istruzione che segue l'istruzione di DJNZ.
JMP
Istruzione: |
JMP |
||||||
Funzione: |
Salra al Data Pointer piu' l'Accumulatore |
||||||
Sintassi: |
JMP @A+DPTR |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
JMP @A+DPTRE |
0x73 |
|
|
Inv |
|||
Descrizione: JMP salta senza condizioni all'indirizzo rappresentato dalla somma del valore di DPTR e il valore dell'Accumulatore.
JNZ
Istruzione: |
JNZ |
||||||
Funzione: |
Salta se l'Accumulatore non e' nullo |
||||||
Sintassi: |
JNZ reladdr |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
JNZ reladdr |
0x70 |
|
|
Inv |
|||
Descrizione: JNZ salta all'indirizzo indicato da reladdr se l'Accumulatore un qualsiasi valore tranne lo zero. Nell'altro caso, il programma continua con l'istruzione che segue l'istruzione JNZ.
JZ
Istruzione: |
JZ |
||||||
Funzione: |
Salta se l'Accumulatore e' nullo |
||||||
Sintassi: |
JNZ reladdr |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
JZ reladdr |
0x60 |
|
|
Inv |
|||
Descrizione: JZ salta all'indirizzo indicato da reladdr se l'Accumulatore contiene il valore zero. Nell'altro caso, il programma continua con l'istruzione che segue l'istruzione JZ.
LCALL
Istruzione: |
LCALL |
||||||
Funzione: |
Chiamata lunga |
||||||
Sintassi: |
LCALL code addr |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
LCALL code addr |
0x12 |
|
|
Inv |
|||
Descrizione: LCALL chiama una subroutine. Essa incrementa il Program Counter (per puntare all'istruzione seguente) ed effettua il push del PC nello stack (il byte meno significativo prima e poi quello piu' significativo). Il Program Counter viene caricato con il valore a 16-bit corrispondente ai due byte successivi al codice operativo dell'istruzione LCALL.
LJMP
Istruzione: |
LJMP |
||||||
Funzione: |
Salto lungo |
||||||
Sintassi: |
LJMP code addr |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
LJMP code addr |
0x02 |
|
|
Inv |
|||
Descrizione: LJMP salta senza condizioni all'indirizzo specificato da code addr.
NOP
Istruzione: |
NOP |
||||||
Funzione: |
Nessuna operazione, attendi |
||||||
Sintassi: |
NOP |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
NOP |
0x00 |
|
|
Inv |
|||
Descrizione: NOP, come suggerisce anche il nome nonfanulla per la durata di un ciclo macchina. Essa e' generalmente usata per scopi di temporizzazione. Assolutamente, nessun Flag o registro viene alterato.
RET
Istruzione: |
RET |
||||||
Funzione: |
Ritorna da Subroutine |
||||||
Sintassi: |
RET |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
RET |
0x22 |
|
|
Inv |
|||
Descrizione: RET e' usato per tornare da una subroutine percedentemente chiamata da LCALL o da ACALL. l'esecuzione del programma continua dall'indirizzo calcolato prendendo due byte dalla cima dello stack. Prima viene preso il byte piu' significativo e poi quello meno significativo.
RETI
Istruzione: |
RETI |
||||||
Funzione: |
Ritorna da Interrupt |
||||||
Sintassi: |
RETI |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
RETI |
0x32 |
|
|
Inv |
|||
Descrizione: RETI e' usato per ritonare da un routine di servizio di un interrupt. RETI prima abilita tutti gli interrupt di priorita' uguale o inferiore a quella dell'interrupr che si sta terminando. Poi l'esecuzione del programma prosegue all'indirizzo calcolato prendendo due byte dalla cima dello stack. Prima viene preso il byte piu' significativo e poi quello meno significativo.
RETI funziona come RET che viene pero' utilizzato al di fuori delle routine di interrupt.
SJMP
Istruzione: |
SJMP |
||||||
Funzione: |
Salto corto |
||||||
Sintassi: |
SJMP reladdr |
||||||
Istruzione |
OpCode |
N.Byte |
N.Cicli |
Flag |
|||
SJMP reladdr |
0x80 |
|
|
Inv |
|||
Descrizione: SJMP salta senza condizioni all'indirizzo specificato da reladdr. Reladdr deve essere contenuto nel range da -128 a +127 byte dall'istruzione che segue SJMP stesso.
ELENCO ALFABETICO DELLE ISTRUZIONI - 8051
Privacy |
Articolo informazione
Commentare questo articolo:Non sei registratoDevi essere registrato per commentare ISCRIVITI |
Copiare il codice nella pagina web del tuo sito. |
Copyright InfTub.com 2025