Caricare documenti e articoli online  
INFtube.com è un sito progettato per cercare i documenti in vari tipi di file e il caricamento di articoli online.
 
Architettura
Biologia
Diritto
Economia Agraria Agronomia Economia aziendale Economia politica Economia turistica Estimo Finanze Politica Turismo Zoologia Zootecnia
Educazione fisica
Filosofia
Generale
Geografia
Italiano
Letteratura
Marketing
Medicina
Scienze
Storia
Tecnica
 
 
 
Meneame
 
Non ricordi la password?  ››  Iscriviti gratis
 

Istruzioni 8051 - ISTRUZIONI ARITMETICHE

finanze

Inviare l'articolo a Facebook Inviala documento ad un amico Appunto e analisi gratis - tweeter Scheda libro l'a yahoo - corso di

ALTRI DOCUMENTI

CANCELLO AUTOMATICO SCORREVOLE CONTROLLATO DA PLC SIEMENS S7-200
I PRESTITI PUBBLICI
Relacción sobre la inmigración
VALORE ATTUALE DELLE AZIONI
ENTRATE PUBLICHE
L’IMPOSTA
BACK UP FACILITIES
La struttura di una rete - Introduzione allo Standard Osi - I livelli del modello Osi
IL SETTORE PUBBLICO DELL’ECONOMIA - I BISOGNI PUBBLICI, I SERVIZI PUBBLICI
Istruzioni 8051 - ISTRUZIONI ARITMETICHE

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

Commentare questo articolo:

Non sei registrato
Devi essere registrato per commentare

ISCRIVITI

E 'stato utile?



Copiare il codice

nella pagina web del tuo sito.