Caricare documenti e articoli online 
INFtub.com è un sito progettato per cercare i documenti in vari tipi di file e il caricamento di articoli online.


 
Non ricordi la password?  ››  Iscriviti gratis
 

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



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: 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



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: 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



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: 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



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: 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



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

  • 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



Privacy




Articolo informazione


Hits: 2542
Apprezzato: scheda appunto

Commentare questo articolo:

Non sei registrato
Devi essere registrato per commentare

ISCRIVITI



Copiare il codice

nella pagina web del tuo sito.


Copyright InfTub.com 2024