| |
Istruzioni 8051 - ISTRUZIONI ARITMETICHE
finanze
|
|
Istruzioni 8051
- A - Accumulatore (Registro "A")
- AB - Tra l'Accumulatore ed il registro "B"
- DPTR - Data Pointer
- C - Carri bit
- Rn - Registro (R7-R0)del banco di registri "R" attualmente
selezionato
- @Ri - Indirizzamento indiretto tramite un registro R (R0 o R1) nella
RAm interna da 0 a 255.
- @DPTR - Indirizzamento diretto tramite DPTR
- @A+DPTR - Indirizzamento indiretto tramite la somma di DPTR piu'
"A"
- @A+PC - Indirizzamento indiretto tramite la somma di PC piu'
"A"
- iram addr - Indirizzo della RAM interna
- #data - Indirizzamento immediato
- bit addr -indirizzo del bit
- /bit addr - indirizzo del bit (prendi il bit negato)
- reladdr - Indirizzo relativo (da +128 a -127)
- page i - pagina i (0 -7)
- code addr - Indirizzo di programma
ISTRUZIONI ARITMETICHE
- ADD,
ADDC: Somma l'Accumulatore (con il riporto)
- DA: Aggiusta la parte decimale
- DEC: Decrementa il registro
- DIV: Dividi l'Accumulatore per il registro B
- INC: Incrementa il registro
- MUL: Moltiplica l'Accumulatore per il registro B
- SUBB: Sottrai dall'Accumulatore con il prestito
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
|
2
|
1
|
C, AC, OV
|
|
ADD A,iram
addr
|
0x25
|
2
|
1
|
C, AC, OV
|
|
ADD A,@R0
|
0x26
|
1
|
1
|
C, AC, OV
|
|
ADD A,@R1
|
0x27
|
1
|
1
|
C, AC, OV
|
|
ADD A,R0
|
0x28
|
1
|
1
|
C, AC, OV
|
|
ADD A,R1
|
0x29
|
1
|
1
|
C, AC, OV
|
|
ADD A,R2
|
0x2A
|
1
|
1
|
C, AC, OV
|
|
ADD A,R3
|
0x2B
|
1
|
1
|
C, AC, OV
|
|
ADD A,R4
|
0x2C
|
1
|
1
|
C, AC, OV
|
|
ADD A,R5
|
0x2D
|
1
|
1
|
C, AC, OV
|
|
ADD A,R6
|
0x2E
|
1
|
1
|
C, AC, OV
|
|
ADD A,R7
|
0x2F
|
1
|
1
|
C, AC, OV
|
|
|
|
|
|
|
|
|
|
Istruzione
|
OpCode
|
N.Byte
|
N.Cicli
|
Flag
|
|
ADDC A,#data
|
0x34
|
2
|
1
|
C, AC, OV
|
|
ADDC A,iram
addr
|
0x35
|
2
|
1
|
C, AC, OV
|
|
ADDC
A,@R0
|
0x36
|
1
|
1
|
C, AC, OV
|
|
ADDC
A,@R1
|
0x37
|
1
|
1
|
C, AC, OV
|
|
ADDC A,R0
|
0x38
|
1
|
1
|
C, AC, OV
|
|
ADDC A,R1
|
0x39
|
1
|
1
|
C, AC, OV
|
|
ADDC A,R2
|
0x3A
|
1
|
1
|
C, AC, OV
|
|
ADDC A,R3
|
0x3B
|
1
|
1
|
C, AC, OV
|
|
ADDC A,R4
|
0x3C
|
1
|
1
|
C, AC, OV
|
|
ADDC A,R5
|
0x3D
|
1
|
1
|
C, AC, OV
|
|
ADDC A,R6
|
0x3E
|
1
|
1
|
C, AC, OV
|
|
ADDC A,R7
|
0x3F
|
1
|
1
|
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
|
1
|
1
|
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
|
1
|
1
|
Inv
|
|
DEC iram
addr
|
0x15
|
2
|
1
|
Inv
|
|
DEC @R0
|
0x16
|
1
|
1
|
Inv
|
|
DEC @R1
|
0x17
|
1
|
1
|
Inv
|
|
DEC R0
|
0x18
|
1
|
1
|
Inv
|
|
DEC R1
|
0x19
|
1
|
1
|
Inv
|
|
DEC R2
|
0x1A
|
1
|
1
|
Inv
|
|
DEC R3
|
0x1B
|
1
|
1
|
Inv
|
|
DEC R4
|
0x1C
|
1
|
1
|
Inv
|
|
DEC R5
|
0x1D
|
1
|
1
|
Inv
|
|
DEC R6
|
0x1E
|
1
|
1
|
Inv
|
|
DEC R7
|
0x1F
|
1
|
1
|
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
|
1
|
1
|
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
|
1
|
1
|
Inv
|
|
INC iram
addr
|
0x05
|
2
|
1
|
Inv
|
|
INC @R0
|
0x06
|
1
|
1
|
Inv
|
|
INC @R1
|
0x07
|
1
|
1
|
Inv
|
|
INC R0
|
0x08
|
1
|
1
|
Inv
|
|
INC R1
|
0x09
|
1
|
1
|
Inv
|
|
INC R2
|
0x0A
|
1
|
1
|
Inv
|
|
INC R3
|
0x0B
|
1
|
1
|
Inv
|
|
INC R4
|
0x0C
|
1
|
1
|
Inv
|
|
INC R5
|
0x0D
|
1
|
1
|
Inv
|
|
INC R6
|
0x0E
|
1
|
1
|
Inv
|
|
INC R7
|
0x0F
|
1
|
1
|
Inv
|
|
INC DPTR
|
0xA3
|
1
|
2
|
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
|
1
|
4
|
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
|
2
|
1
|
C, AC, OV
|
|
SUBB A,iram addr
|
0x95
|
2
|
1
|
C, AC, OV
|
|
SUBB A,@R0
|
0x96
|
1
|
1
|
C, AC, OV
|
|
SUBB A,@R1
|
0x97
|
1
|
1
|
C, AC, OV
|
|
SUBB A,R0
|
0x98
|
1
|
1
|
C, AC, OV
|
|
SUBB A,R1
|
0x99
|
1
|
1
|
C, AC, OV
|
|
SUBB A,R2
|
0x9A
|
1
|
1
|
C, AC, OV
|
|
SUBB A,R3
|
0x9B
|
1
|
1
|
C, AC, OV
|
|
SUBB A,R4
|
0x9C
|
1
|
1
|
C, AC, OV
|
|
SUBB A,R5
|
0x9D
|
1
|
1
|
C, AC, OV
|
|
SUBB
A,R6
|
0x9E
|
1
|
1
|
C, AC, OV
|
|
SUBB A,R7
|
0x9F
|
1
|
1
|
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: AND logico
- CLR: Azzera il registro
- CPL: Complementa il registro
- ORL: OR logico
- RL: Ruota l'accumulatore a sinistra
- RLC: Ruota l'Accumulatore a sinistra attraverso il Carry
- RR: Ruota l'accumulatore a destra
- RRC: Ruota l'Accumulatore a destra attraverso il Carry
- SWAP: Scambia i nibble dell'Accumulatore
- XRL: OR esclusivo logico
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
|
2
|
1
|
Inv
|
|
ANL iram
addr,#data
|
0x53
|
3
|
2
|
Inv
|
|
ANL A,#data
|
0x54
|
2
|
1
|
Inv
|
|
ANL A,iram
addr
|
0x55
|
2
|
1
|
Inv
|
|
ANL A,@R0
|
0x56
|
1
|
1
|
Inv
|
|
ANL A,@R1
|
0x57
|
1
|
1
|
Inv
|
|
ANL A,R0
|
0x58
|
1
|
1
|
Inv
|
|
ANL A,R1
|
0x59
|
1
|
1
|
Inv
|
|
ANL A,R2
|
0x5A
|
1
|
1
|
Inv
|
|
ANL A,R3
|
0x5B
|
1
|
1
|
Inv
|
|
ANL A,R4
|
0x5C
|
1
|
1
|
Inv
|
|
ANL A,R5
|
0x5D
|
1
|
1
|
Inv
|
|
ANL A,R6
|
0x5E
|
1
|
1
|
Inv
|
|
ANL A,R7
|
0x5F
|
1
|
1
|
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
|
1
|
1
|
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
|
1
|
1
|
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
|
2
|
1
|
Inv
|
|
ORL iram addr,#data
|
0x43
|
3
|
2
|
Inv
|
|
ORL
A,#data
|
0x44
|
2
|
1
|
Inv
|
|
ORL A,iram addr
|
0x45
|
2
|
1
|
Inv
|
|
ORL A,@R0
|
0x46
|
1
|
1
|
Inv
|
|
ORL A,@R1
|
0x47
|
1
|
1
|
Inv
|
|
ORL A,R0
|
0x48
|
1
|
1
|
Inv
|
|
ORL A,R1
|
0x49
|
1
|
1
|
Inv
|
|
ORL A,R2
|
0x4A
|
1
|
1
|
Inv
|
|
ORL A,R3
|
0x4B
|
1
|
1
|
Inv
|
|
ORL A,R4
|
0x4C
|
1
|
1
|
Inv
|
|
ORL A,R5
|
0x4D
|
1
|
1
|
Inv
|
|
ORL A,R6
|
0x4E
|
1
|
1
|
Inv
|
|
ORL
A,R7
|
0x4F
|
1
|
1
|
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
|
1
|
1
|
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
|
1
|
1
|
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
|
1
|
1
|
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
|
1
|
1
|
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
|
2
|
1
|
Inv
|
|
XRL iram addr,#data
|
0x63
|
3
|
2
|
Inv
|
|
XRL
A,#data
|
0x64
|
2
|
1
|
Inv
|
|
XRL A,iram addr
|
0x65
|
2
|
1
|
Inv
|
|
XRL A,@R0
|
0x66
|
1
|
1
|
Inv
|
|
XRL A,@R1
|
0x67
|
1
|
1
|
Inv
|
|
XRL A,R0
|
0x68
|
1
|
1
|
Inv
|
|
XRL A,R1
|
0x69
|
1
|
1
|
Inv
|
|
XRL A,R2
|
0x6A
|
1
|
1
|
Inv
|
|
XRL A,R3
|
0x6B
|
1
|
1
|
Inv
|
|
XRL A,R4
|
0x6C
|
1
|
1
|
Inv
|
|
XRL
A,R5
|
0x6D
|
1
|
1
|
Inv
|
|
XRL
A,R6
|
0x6E
|
1
|
1
|
Inv
|
|
XRL A,R7
|
0x6F
|
1
|
1
|
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: Trasferisci un byte
- MOVC: Trasferisci un byte della memoria programma
- MOVX: Trasferisci un byte della memoria estesa
- POP: Prendi l'Accumulatore dallo stack
- PUSH: Metti l'accumulatore nello stack
- XCH: Scambia i byte
- XCHD: Scambia i digit
MOV
|
Istruzione:
|
MOV
|
|
Funzione:
|
Trasferisci un byte di Memoria
|
|
Sintassi:
|
MOV Operando1,Operando2
|
|
Istruzione
|
OpCode
|
N.Byte
|
N.Cicli
|
Flag
|
|
MOV @R0,#data
|
0x76
|
2
|
1
|
Inv
|
|
MOV @R1,#data
|
0x77
|
2
|
1
|
Inv
|
|
MOV @R0,A
|
0xF6
|
1
|
1
|
Inv
|
|
MOV @R1,A
|
0xF7
|
1
|
1
|
Inv
|
|
MOV @R0,iram
addr
|
0xA6
|
2
|
2
|
Inv
|
|
MOV @R1,iram
addr
|
0xA7
|
2
|
2
|
Inv
|
|
MOV A,#data
|
0x74
|
2
|
1
|
Inv
|
|
MOV A,@R0
|
0xE6
|
1
|
1
|
Inv
|
|
MOV A,@R1
|
0xE7
|
1
|
1
|
Inv
|
|
MOV A,R0
|
0xE8
|
1
|
1
|
Inv
|
|
MOV A,R1
|
0xE9
|
1
|
1
|
Inv
|
|
MOV A,R2
|
0xEA
|
1
|
1
|
Inv
|
|
MOV A,R3
|
0xEB
|
1
|
1
|
Inv
|
|
MOV A,R4
|
0xEC
|
1
|
1
|
Inv
|
|
MOV A,R5
|
0xED
|
1
|
1
|
Inv
|
|
MOV A,R6
|
0xEE
|
1
|
1
|
Inv
|
|
MOV A,R7
|
0xEF
|
1
|
1
|
Inv
|
|
MOV A,iram
addr
|
0xE5
|
2
|
1
|
Inv
|
|
MOV DPTR,#data16
|
0x90
|
3
|
2
|
Inv
|
|
MOV R0,#data
|
0x78
|
2
|
1
|
Inv
|
|
MOV R1,#data
|
0x79
|
2
|
1
|
Inv
|
|
MOV R2,#data
|
0x7A
|
2
|
1
|
Inv
|
|
MOV R3,#data
|
0x7B
|
2
|
1
|
Inv
|
|
MOV R4,#data
|
0x7C
|
2
|
1
|
Inv
|
|
MOV R5,#data
|
0x7D
|
2
|
1
|
Inv
|
|
MOV R6,#data
|
0x7E
|
2
|
1
|
Inv
|
|
MOV R7,#data
|
0x7F
|
2
|
1
|
Inv
|
|
MOV R0,A
|
0xF8
|
1
|
1
|
Inv
|
|
MOV R1,A
|
0xF9
|
1
|
1
|
Inv
|
|
MOV R2,A
|
0xFA
|
1
|
1
|
Inv
|
|
MOV R3,A
|
0xFB
|
1
|
1
|
Inv
|
|
MOV R4,A
|
0xFC
|
1
|
1
|
Inv
|
|
MOV R5,A
|
0xFD
|
1
|
1
|
Inv
|
|
MOV R6,A
|
0xFE
|
1
|
1
|
Inv
|
|
MOV R7,A
|
0xFF
|
1
|
1
|
Inv
|
|
MOV R0,iram
addr
|
0xA8
|
2
|
2
|
Inv
|
|
MOV R1,iram
addr
|
0xA9
|
2
|
2
|
Inv
|
|
MOV R2,iram
addr
|
0xAA
|
2
|
2
|
Inv
|
|
MOV R3,iram
addr
|
0xAB
|
2
|
2
|
Inv
|
|
MOV R4,iram
addr
|
0xAC
|
2
|
2
|
Inv
|
|
MOV R5,iram
addr
|
0xAD
|
2
|
2
|
Inv
|
|
MOV R6,iram
addr
|
0xAE
|
2
|
2
|
Inv
|
|
MOV R7,iram
addr
|
0xAF
|
2
|
2
|
Inv
|
|
MOV bit
addr,C
|
0x92
|
2
|
2
|
Inv
|
|
MOV iram
addr,#data
|
0x75
|
3
|
2
|
Inv
|
|
MOV iram
addr,@R0
|
0x86
|
2
|
2
|
Inv
|
|
MOV iram
addr,@R1
|
0x87
|
2
|
2
|
Inv
|
|
MOV iram
addr,R0
|
0x88
|
2
|
2
|
Inv
|
|
MOV iram
addr,R1
|
0x89
|
2
|
2
|
Inv
|
|
MOV iram
addr,R2
|
0x8A
|
2
|
2
|
Inv
|
|
MOV iram
addr,R3
|
0x8B
|
2
|
2
|
Inv
|
|
MOV iram
addr,R4
|
0x8C
|
2
|
2
|
Inv
|
|
MOV iram
addr,R5
|
0x8D
|
2
|
2
|
Inv
|
|
MOV iram
addr,R6
|
0x8E
|
2
|
2
|
Inv
|
|
MOV iram
addr,R7
|
0x8F
|
2
|
2
|
Inv
|
|
MOV iram
addr,A
|
0xF5
|
2
|
1
|
Inv
|
|
MOV iram
addr,iram addr
|
0x85
|
3
|
1
|
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
|
1
|
2
|
Inv
|
|
MOVC
A,@A+PC
|
0x83
|
1
|
1
|
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
|
1
|
2
|
Inv
|
|
MOVX @R0,A
|
0xF2
|
1
|
2
|
Inv
|
|
MOVX @R1,A
|
0xF3
|
1
|
2
|
Inv
|
|
MOVX A,@DPTR
|
0xE0
|
1
|
2
|
Inv
|
|
MOVX
A,@R0
|
0xE2
|
1
|
2
|
Inv
|
|
MOVX
A,@R1
|
0xE3
|
1
|
2
|
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
|
2
|
2
|
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
|
2
|
2
|
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
|
1
|
1
|
Inv
|
|
XCH A,@R1
|
0xC7
|
1
|
1
|
Inv
|
|
XCH A,R0
|
0xC8
|
1
|
1
|
Inv
|
|
XCH A,R1
|
0xC9
|
1
|
1
|
Inv
|
|
XCH A,R2
|
0xCA
|
1
|
1
|
Inv
|
|
XCH A,R3
|
0xCB
|
1
|
1
|
Inv
|
|
XCH A,R4
|
0xCC
|
1
|
1
|
Inv
|
|
XCH A,R5
|
0xCD
|
1
|
1
|
Inv
|
|
XCH A,R6
|
0xCE
|
1
|
1
|
Inv
|
|
XCH A,R7
|
0xCF
|
1
|
1
|
Inv
|
|
XCH A,iram addr
|
0xC5
|
2
|
1
|
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
|
1
|
1
|
Inv
|
|
XCHD
A,@R1
|
0xD7
|
1
|
1
|
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: AND per variabili a bit
- CLR: Azzera il bit
- CPL: Complementa il bit
- JB: Salta se il bit e' a uno
- JBC: Salta se il bit e' a uno e resettalo
- JC: Salta se il Carry e' a uno
- JNB: Salta se il bit non e' a uno
- JNC: Salta se il Carry non e' a uno
- MOV: Trasferisci un bit
- ORL: OR a bit
- SETB: Poni il bit a uno
ANL
|
Istruzione:
|
ANL
|
|
Funzione:
|
AND a bit
|
|
Sintassi:
|
ANL C, bit
|
|
Istruzione
|
OpCode
|
N.Byte
|
N.Cicli
|
Flag
|
|
ANL C,bit
addr
|
0x82
|
2
|
1
|
C
|
|
ANL C,/bit
addr
|
0xB0
|
2
|
1
|
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
|
2
|
1
|
Inv
|
|
CLR C
|
0xC3
|
1
|
1
|
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
|
1
|
1
|
C
|
|
CPL bit
addr
|
0xB2
|
2
|
1
|
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
|
3
|
2
|
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
|
3
|
2
|
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
|
2
|
2
|
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
|
3
|
2
|
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
|
2
|
2
|
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
|
2
|
1
|
C
|
|
MOV bit
addr,C
|
0x92
|
2
|
2
|
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
|
2
|
2
|
C
|
|
ORL C,/bit addr
|
0xA0
|
2
|
1
|
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
|
1
|
1
|
C
|
|
SETB bit addr
|
0xD2
|
2
|
1
|
Inv
|
|
|
|
|
|
|
|
|
Descrizione: Setta il bit specificato
ISTRUZIONI DI SALTO
- ACALL: Chiamata a subroutine con indirizzo assoluto
- AJMP: Salto asssoluto
- CJNE: Compara e salta se non uguale
- DJNZ: Decrementa il registro e salta se il risultato non e' nullo
- JMP: Salta all'indirizzo
- JNZ: Salta se l'Accumulatore non e' nullo
- JZ: Salta se l'Accumulatore e' nullo
- LCALL: Chiamata a subroutine con indirizzo a 16-bit
- LJMP: Salto con indirizzo a 16-bit
- NOP: Nessuna operazione
- RET: Torna da subroutine
- RETI: Torna da interrupt
- SJMP: Salto con indirizzo relativo a 8-bit
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
|
2
|
2
|
Inv
|
|
ACALL page1
|
0x31
|
2
|
2
|
Inv
|
|
ACALL page2
|
0x51
|
2
|
2
|
Inv
|
|
ACALL page3
|
0x71
|
2
|
2
|
Inv
|
|
ACALL page4
|
0x91
|
2
|
2
|
Inv
|
|
ACALL page5
|
0xB1
|
2
|
2
|
Inv
|
|
ACALL page6
|
0xD1
|
2
|
2
|
Inv
|
|
ACALL page7
|
0xF1
|
2
|
2
|
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
|
2
|
2
|
Inv
|
|
AJMP page1
|
0x21
|
2
|
2
|
Inv
|
|
AJMP page2
|
0x41
|
2
|
2
|
Inv
|
|
AJMP page3
|
0x61
|
2
|
2
|
Inv
|
|
AJMP page4
|
0x81
|
2
|
2
|
Inv
|
|
AJMP page5
|
0xA1
|
2
|
2
|
Inv
|
|
AJMP page6
|
0xC1
|
2
|
2
|
Inv
|
|
AJMP page7
|
0xE1
|
2
|
2
|
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
|
3
|
2
|
C
|
|
CJNE A,iram
addr,reladdr
|
0xB5
|
3
|
2
|
C
|
|
CJNE @R0,#data,reladdr
|
0xB6
|
3
|
2
|
C
|
|
CJNE @R1,#data,reladdr
|
0xB7
|
3
|
2
|
C
|
|
CJNE R0,#data,reladdr
|
0xB8
|
3
|
2
|
C
|
|
CJNE R1,#data,reladdr
|
0xB9
|
3
|
2
|
C
|
|
CJNE R2,#data,reladdr
|
0xBA
|
3
|
2
|
C
|
|
CJNE R3,#data,reladdr
|
0xBB
|
3
|
2
|
C
|
|
CJNE R4,#data,reladdr
|
0xBC
|
3
|
2
|
C
|
|
CJNE R5,#data,reladdr
|
0xBD
|
3
|
2
|
C
|
|
CJNE R6,#data,reladdr
|
0xBE
|
3
|
2
|
C
|
|
CJNE R7,#data,reladdr
|
0xBF
|
3
|
2
|
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
|
3
|
2
|
Inv
|
|
DJNZ R0,reladdr
|
0xD8
|
2
|
2
|
Inv
|
|
DJNZ R1,reladdr
|
0xD9
|
2
|
2
|
Inv
|
|
DJNZ R2,reladdr
|
0xDA
|
2
|
2
|
Inv
|
|
DJNZ R3,reladdr
|
0xDB
|
2
|
2
|
Inv
|
|
DJNZ R4,reladdr
|
0xDC
|
2
|
2
|
Inv
|
|
DJNZ R5,reladdr
|
0xDD
|
2
|
2
|
Inv
|
|
DJNZ R6,reladdr
|
0xDE
|
2
|
2
|
Inv
|
|
DJNZ R7,reladdr
|
0xDF
|
2
|
2
|
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
|
1
|
2
|
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
|
2
|
2
|
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
|
2
|
2
|
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
|
3
|
2
|
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
|
3
|
2
|
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
|
1
|
1
|
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
|
1
|
2
|
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
|
1
|
2
|
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
|
2
|
2
|
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
- ACALL: Chiamata a subroutine con indirizzo assoluto
- ADD,
ADDC: Somma l'Accumulatore (con il riporto)
- AJMP: Salto asssoluto
- ANL: AND logico
- ANL: AND per variabili a bit
- CJNE: Compara e salta se non uguale
- CLR: Azzera il registro
- CLR: Azzera il bit
- CPL: Complementa il registro
- CPL: Complementa il bit
- DA: Aggiusta la parte decimale
- DEC: Decrementa il registro
- DIV: Dividi l'Accumulatore per il registro B
- DJNZ: Decrementa il registro e salta se il risultato non e' nullo
- INC: Incrementa il registro
- JB: Salta se il bit e' a uno
- JBC: Salta se il bit e' a uno e resettalo
- JC: Salta se il Carry e' a uno
- JMP: Salta all'indirizzo
- JNB: Salta se il bit non e' a uno
- JNC: Salta se il Carry non e' a uno
- JNZ: Salta se l'Accumulatore non e' nullo
- JZ: Salta se l'Accumulatore e' nullo
- LCALL: Chiamata a subroutine con indirizzo a 16-bit
- LJMP: Salto con indirizzo a 16-bit
- MOV: Trasferisci un byte
- MOV: Trasferisci un bit
- MOVC: Trasferisci un byte della memoria programma
- MOVX: Trasferisci un byte della memoria estesa
- MUL: Moltiplica l'Accumulatore per il registro B
- NOP: Nessuna operazione
- ORL: OR logico
- ORL: OR a bit
- POP: Prendi l'Accumulatore dallo stack
- PUSH: Metti l'accumulatore nello stack
- RET: Torna da subroutine
- RETI: Torna da interrupt
- RL: Ruota l'accumulatore a sinistra
- RLC: Ruota l'Accumulatore a sinistra attraverso il Carry
- RR: Ruota l'accumulatore a destra
- RRC: Ruota l'Accumulatore a destra attraverso il Carry
- SETB: Poni il bit ad uno
- SJMP: Salto con indirizzo relativo a 8-bit
- SUBB: Sottrai dall'Accumulatore con il prestito
- SWAP: Scambia i nibble dell'Accumulatore
- XCH: Scambia i byte
- XCHD: Scambia i digit
- XRL: OR esclusivo logico
|
Articolo informazione
Hits:
97
Apprezzato: 
Commentare questo articolo:
Non sei registrato
Devi essere registrato per commentare ISCRIVITI
|
E 'stato utile?
Copiare il codice
nella pagina web del tuo sito.
|
|
|
|