Sei sulla pagina 1di 56

Linsieme delle istruzioni

Instruction set della famiglia AVR


Indice

Lettura del manuale del linguaggio assembly AVR


Notazioni per registri e tipi di valore
Modalit di indirizzamento degli operandi
Categorie di istruzioni
Sintesi delle istruzioni principali

La famiglia AVR (1)

Scegliamo lassembly di questa famiglia


di microcontrollori ATMEL a 8 b

Esempio di dimensioni medie:


ATXMEGA32A4U

16384 istruzioni da 16 b nella memoria di


programma

Cio 32 kB, organizzati in righe da 2 B

4096 byte (4 kB) nella memoria dati

La famiglia AVR (2)

Motivazioni

Basso costo e grandissima diffusione

Strumenti di sviluppo facilmente accessibili

Data sheets completi di dispositivi e assembly


Software development kit fornito dal produttore
(AVRStudio5)
Application notes e reference designs
Development boards e demo boards
Programmatori a basso costo

Notazioni flag (1)

Registro di stato

SREG

Registro di stato, nello spazio di I/O

I suoi bit, detti flag,


flag danno informazioni sullesito
dellesecuzione di una istruzione
Sono normalmente indicati simbolicamente da
una lettera maiuscala, riconosciuta
dall'assembler
Sono usati dalle istruzioni di controllo del
programma per influenzare il flusso di
esecuzione delle istruzioni

Notazioni flag (2)

Carry flag in status register (SREG0)

Il valore C = 1 significa che unistruzione


aritmetica su numeri interi senza segno ha
generato un risultato non rappresentabile

R < 0 oppure R > 255

Zero flag in status register (SREG1)

Il valore Z = 1 significa che unistruzione


aritmetica o logica ha generato un risultato
nullo

R=0

Notazioni flag (3)

Negative flag in status register (SREG2)

Il valore N = 1 significa che il valore memorizzato


come risultato, interpretato come intero con
segno, ha valore negativo, cio R7 = 1
Twos complement overflow indicator (SREG3)

Il valore V = 1 significa che unistruzione


aritmetica tra interi con segno ha generato un
risultato non rappresentabile

R < 128 oppure R > 127

In questo caso il segno del risultato calcolato


dalla macchina opposto a quello del risultato
corretto
6

Notazioni flag (4)

(N V) For signed tests (SREG4)

Loperazione combina due bit dando 1 solo se


gli argomenti sono diversi
Il valore di S indica il segno effettivo di una
operazione aritmetica tra interi con segno
La risposta corretta anche in caso di overflow

In assenza di overflow il risultato negativo (S = 1)


quando N 1; in presenza di overflow avviene il
contrario

Half Carry flag in the status register (SREG5)

Il valore di H ha lo stesso significato di C, ma


riferito ai valori contenuti nei 4 b (digit) meno
significativi degli operandi

Notazioni flag (5)

Transfer bit used by BLD and BST (SREG6)

Bit di appoggio in cui possibile memorizzare o


riprendere bit di altri registri interni

BST (Bit STore) memorizza


BLD (Bit LoaD) riprende

Global interrupt enable/disable flag (SREG7)

Bit di abilitazione della funzione di interruzione


del processore
Esistono istruzioni apposite per impostare I

SEI (SEt Interrupt)


CLI (CLear Interrupt)
8

Notazioni flag (6)

Effetto di una operazione sui flag

Flag affected by instruction

Il flag sar modificato dall'esecuzione


dell'istruzione in accordo al suo esito
Flag cleared by instruction

Il flag azzerato
Flag set by instruction

Il flag posto a 1
Flag not affected by instruction

Il flag mantiene il valore precedente


9

Notazioni valori (1)

Registri e operandi

Rd

Destination (and source) register in the register file

Registro contenente uno degli operandi e


destinato a ricevere il risultato
Se non specificato diversamente, 0 d 31,
perch i registri interni sono 32.

Rr

Alcune istruzioni operano solo con parte dei registri,


per ridurre i bit per codificare l'indirizzo dell'operando

Source register in the register file

Secondo registro sorgente, contenente laltro


termine nelle istruzioni a due operandi
10

Notazioni valori (2)

Result after instruction is executed

Valore del risultato delloperazione, che sar


posto di norma nel registro Rd
Per indicare i bit del risultato, oppure di uno dei
registri sorgente, viene posto il numero del bit
dopo il nome del registro

R = R7 (MSB), R6, R5, R4, R3, R2, R1, R0 (LSB)

Constant data

Valore costante su 8 b, con 0 K 255


Constant address

Indirizzo di memoria su 16 b, con 0 k 65535


11

Notazioni valori (3)

Bit in the register file or I/O register (3 bit)

Valore 0 b 7 che indica un particolare bit di


un registro interno del register file o di I/O
Il bit 0 il meno significativo, il 7 ha peso 27
Bit in the status register (3 bit)

Valore 0 s 7 che indica un particolare bit del


registro di stato, cio SREG
Di norma si fa riferimento a questi bit (i flag)
usando particolari lettere maiuscole
Lassembler riconosce queste lettere e
assegna a s (in uno dei campi dellistruzione)
il giusto valore
12

Notazioni valori (4)

X, Y, Z

Registri puntatori contenenti indirizzi (16 b),


ottenuti combinando coppie di registri interni

Indirect address register

X = R27:R26, Y = R29:R28 e Z = R31:R30

Il registro con indirizzo maggiore contiene i bit


pi significativi
I/O location address

Indirizzo di un registro di I/O, con 0 A 63


Viene anche chiamato porta di I/O

13

Notazioni valori (5)

Displacement for direct addressing (6 bit)

Valore costante contenuto nell'istruzione da


sommare al valore di un puntatore per ottenere
lindirizzo effettivo di un operando

14

Indirizzamento (1)

Esistono diversi meccanismi con cui le


istruzioni si procurano gli operandi

L'indirizzamento ha un notevole impatto


sulla dimensione dei campi dellistruzione
Influenza il tempo di esecuzione, perch
ogni meccanismo richiede un tempo diverso
per portare il corretto valore alla ALU

Nelle istruzioni a due operandi, possono


essere usati due meccanismi di
indirizzamento diversi
15

Indirizzamento (2)

Generalmente, uno degli operandi un


registro di lavoro
L'istruzione deve inoltre specificare il
destinatario,
destinatario cio dove mettere il risultato

Di norma, in assembly coincide con il primo


degli operandi specificato

16

Indirizzamento (3)

I principali meccanismi di indirizzamento


si possono classificare in grandi gruppi:

Indirizzamento immediato

Indirizzamento diretto

Indirizzamento indiretto

Indirizzamento indiretto con modifica del


puntatore

17

Indirizzamento immediato

Loperando immediatamente
disponibile come costante numerica
contenuta in un campo dellistruzione
Nellistruzione assembly appare un
valore costante

ANDI R16,122

Esegue unoperazione logica tra un registro interno e


la costante 122, che fornita in modo immediato

LDI R23,0xAA

Carica in un registro interno la costante esadecimale


0xAA (170), fornita in modo immediato
18

Indirizzamento diretto

Loperando specificato dichiarando


direttamente la memoria che lo contiene
La memoria pu essere un registro,
registro una
porta o una cella di memoria dati

In questo ultimo caso, listruzione sar lenta


e ingombrante

MOV R1,
R1 R15

Copia in R1 il contenuto del registro R15

STS 31456,
31456 R3

Memorizza (STorize) R3 nella memoria allindirizzo


specificato direttamente (31456)
19

Indirizzamento indiretto

Loperando, nella memoria dati,


specificato indicando un puntatore che
contiene il suo indirizzo

Nel nostro esempio il puntatore un registro


da 16 b (cio una coppia di registri da 8 b)

X = R27:R26; Y = R29:R28; Z = R31:R30

Lindirizzamento indiretto efficiente,


perch l'indirizzo gi nel register file

LD R10, X

Copia in R10 il contenuto puntato dalla coppia


R27:R26
20

Indiretto con automodifica

Istruzioni con indirizzamento indiretto che


alterano automaticamente il puntatore

Se ripetute, operano su dati diversi!


La modifica consiste nella variazione del
puntatore di 1, prima o dopo loperazione

Si parla di pre-decremento o post-incremento


ST Y+,
Y+ R10

Copia R10 dove punta X e poi incrementa X

LD R10, -X

Decrementa X e poi copia in R10 il contenuto della


memoria puntato da X stesso (la coppia R27:R26)
21

Diretto,
singolo registro
0
15

6 5

OP

Rd
d

L'operando contenuto
nel registro Rd.

Il risultato viene
posto in Rd

31
REGISTER FILE
22

Diretto-diretto,
due registri Rd e Rr
15

10 9

OP

5 4

Rr

Rd
d
r

Il risultato viene
posto in Rd
I due operandi sono
contenuti nei registri Rd e Rr.

31
REGISTER FILE
23

Diretto-diretto,
registro Rd/r e porta A
15

11 10

OP

6 5

Rr/d

0
A

r/d

Il risultato viene
posto in Rd o A
I due operandi sono
contenuti nel
registro Rr/d e la
porta A di I/O.

31
63
REGISTER FILE I/O REGISTERS
24

Diretto-immediato,
registro Rd e costante K
0
15 12 11 8 7

OP

KH

4 3

Rd'

KL

Deve essere d' >15


d' >15

Un operando costante,
l'altro contenuto in Rd
Il risultato viene
posto in Rd

31
REGISTER FILE
25

Diretto-diretto,
registro Rd/r e memoria
15

5 4

OP

Rr/d

k
31

16

0x0000

r/d

Il risultato viene
posto in Rd o (k)
I due operandi sono
contenuti nel
registro Rr/d e la
locazione di
memoria k.

31
RAMEND
REGISTER FILE DATA SPACE
26

Indiretto-diretto,
puntatore e registro Rr/d
15

5 4

OP

0x0000

Rr/d

X (Y o Z)

r/d

Il risultato viene
posto in Rd o (X)
I due operandi sono
contenuti nel
registro Rr/d e la
31
RAMEND
locazione puntata REGISTER FILE DATA SPACE
da X (o Y, o Z)
27

Altri indirizzamenti (1)

28

Altri indirizzamenti (2)

29

Altri indirizzamenti (3)

30

Altri indirizzamenti (4)

31

Altri indirizzamenti (5)

32

Altri indirizzamenti (6)

33

Altri indirizzamenti (7)

34

Categorie di istruzioni (1)

Operazioni di trasferimento di dati

Copiano il valore contenuto in una memoria


in memorie dello stesso o di altro tipo
Uno dei due operandi sempre un registro

Operazioni aritmetiche

Nei pi semplici microcontrollori sono


presenti solo somme, differenze e poco altro
Le operazioni pi complesse non presenti
devono essere eseguite da sottoprogrammi
35

Categorie di istruzioni (2)

Operazioni logiche (not, and, or, xor)

Operano su singole variabili logiche (1 b)

Il registro equivale a 8 variabili indipendenti

Le istruzioni agiscono su bit corrispondenti


Il risultato viene messo nel bit corrispondente

Operazioni di manipolazione dei bit

Esistono istruzioni che spostano o ruotano


tutti i bit di un registro
Altre istruzioni intervengono su un singolo
bit, lasciando inalterati gli altri
36

Categorie di istruzioni (3)

Operazioni di controllo

Rientrano in questa categoria tutte le


istruzioni che hanno un effetto diretto sul
flusso di esecuzione del programma

Salti incondizionati o condizionati


Chiamata di procedure

Oppure un effetto indiretto sul processore

Sospensione o blocco del processore


Gestione del watchdog
NOP (No Operation)!
37

Trasferimento dati (1)


Codice

Operandi

Descrizione

Effetto

Flag

MOV

Rd, Rr

Copy Register

RdRr

None

MOVW

Rd, Rr

Copy Register
Pair

[Rd+1:Rd][Rr+1:Rr]

None

LDI

Rd', K

Load Immediate

RdK

None

Codice Operandi

Descrizione

Effetto

Flag

LDS

Rd, k

Load Direct from


data space

Rd(k)

None

LD

Rd, X|Y|Z

Load Indirect

Rd(X)

None

LD

Rd, X+|Y+|
Z+

Load Indirect and


Post-Increment

Rd(X),
XX+1

None

LD

Rd, -X|-Y|-Z

Load Indirect and


Pre-Decrement

XX-1,
Rd(X)

None

LDD

Rd,Y+q|Z+q

Load Indirect with Rd(Y+q)


Displacement

None

2
38

Trasferimento dati (2)


Codice

Operandi

Descrizione

Effetto

Flag

STS

k, Rr

Store Direct to
data space

(k)Rr

None

ST

X|Y|Z, Rr

Store Indirect

(X)Rr

None

ST

X+|Y+|Z+,
Rr

Store Indirect and


Post-Increment

(X)Rr,
XX+1

None

ST

-X|-Y|-Z, Rr

Store Indirect and


Pre-Decrement

XX-1,
(X)Rr

None

STD

Y+q|Z+q,
Rr

Store Indirect with


Displacement

(Y+q)Rr

None

Codice

Operandi

Descrizione

Effetto

Flag

IN

Rd, A

In From I/O
Location

RdI/O(A)

None

OUT

A, Rr

Out To I/O
Location

I/O(A)Rr

None

1
39

Trasferimento dati (3)


Codice

Operandi

Descrizione

Effetto

Flag

PUSH

Rr

Push Register on
Stack

STACKRr,
SPSP-1

None

POP

Rd

Pop Register from


Stack

SPSP+1,
RdSTACK

None

Codice

Operandi

Descrizione

Effetto

Flag

Load Program
Memory

R0(Z)

None

LPM
LPM

Rd, Z

Load Program
Memory

Rd(Z)

None

LPM

Rd, Z+

Load Program
Rd(Z),
Memory and Post- ZZ+1
Increment

None

Store Program
Memory

(Z)[R1:R0]

None

Store Program
Memory

(Z)[R1:R0],
ZZ+2

None

SPM
SPM

Z+

40

Trasferimento dati (4)


Codice

Operandi

Descrizione

Effetto

Flag

XCH

Z,Rd

Exchange RAM
location

TempRd,
Rd(Z),
(Z)Temp

None

LAS

Z,Rd

Load and set RAM TempRd,


location
Rd(Z),
(Z)TempRd

None

LAC

Z,Rd

Load and clear


RAM location

TempRd,
Rd(Z),
(Z)TempRd

None

LAT

Z,Rd

Load and toggle


RAM location

TempRd,
Rd(Z),
(Z)TempRd

None

41

Aritmetiche (1)
Codice

Operandi

Descrizione

Effetto

Flag

ADD

Rd, Rr

Add without Carry

RdRd+Rr

Z,C,N,V,S, 1
H

ADC

Rd, Rr

Add with Carry

RdRd+Rr+C

Z,C,N,V,S, 1
H

ADIW

Rd1, K

Add Immediate to
Word

[Rd+1:Rd]
[Rd+1:Rd]+K

Z,C,N,V,S

Funziona solo con i valori di Rd pari a R24, R26, R28 e R30.

42

Aritmetiche (2)
Codice

Operandi

Descrizione

Effetto

Flag

SUB

Rd, Rr

Subtract without
Carry

RdRd-Rr

Z,C,N,V,S, 1
H

SBC

Rd, Rr

Subtract with
Carry

RdRd-Rr-C

Z,C,N,V,S, 1
H

SBIW

Rd1, K

Subtract
Immediate from
Word

[Rd+1:Rd]
[Rd+1:Rd]-K

Z,C,N,V,S

SUBI

Rdb, K

Subtract
Immediate

RdRd-K

Z,C,N,V,S, 1
H

SBCI

Rdb, K

Subtract
Immediate with
Carry

RdRd-K-C

Z,C,N,V,S, 1
H

Funziona solo con i valori di Rd pari a R24, R26, R28 e R30.

43

Aritmetiche (3)
Codice

Operandi

Descrizione

Effetto

Flag

NEG

Rd

Twos
Complement

Rd0-Rd

Z,C,N,V,S, 1
H

INC

Rd

Increment

RdRd+1

Z,N,V,S

DEC

Rd

Decrement

RdRd-1

Z,N,V,S

Codice

Operandi

Descrizione

Effetto

Flag

CLR

Rd

Clear Register

Rd0

Z,N,V,S

SER

Rd

Set Register

Rd0xFF

None

TST

Rd

Test for Zero or


Minus

RdRd&Rd

Z,N,V,S

CP

Rd, Rr

Compare

Rd-Rr

Z,C,N,V,S, 1
H

CPC

Rd, Rr

Compare with
Carry

Rd-Rr-C

Z,C,N,V,S, 1
H

CPI

Rdb, K

Compare with
Immediate

Rd-K

Z,C,N,V,S, 1
H
44

Aritmetiche (4)
Codice

Operandi

Descrizione

Effetto

Flag

MUL

Rd, Rr

Multiply unsigned

R1:R0Rd*Rr Z,C
(UU)

MULS

Rd, Rr

Multiply signed

R1:R0Rd*Rr Z,C
(SS)

MULSU

Rd, Rr

Multiply signed
with unsigned

R1:R0Rd*Rr Z,C
(SU)

FMUL

Rd, Rr

Fractional multiply
unsigned

R1:R0Rd*Rr Z,C
<<1 (UU)

FMULS

Rd, Rr

Fractional multiply
signed

R1:R0Rd*Rr Z,C
<<1 (SS)

FMULSU

Rd, Rr

Fractional multiply
signed with
unsigned

R1:R0Rd*Rr Z,C
<<1 (SU)

Funziona solo con i valori di Rd e Rr da R16 a R23.


45

Logiche
Codice

Operandi

Descrizione

Effetto

Flag

AND

Rd, Rr

Logical AND

RdRdRr

Z,N,V,S

ANDI

Rd', K
d' > 15

Logical AND with


Immediate

RdRdK

Z,N,V,S

CBR

Rd', K
d' > 15

Clear Bit(s) in
Register

Rd
Rd(0xFF-K)

Z,N,V,S

OR

Rd, Rr

Logical OR

RdRdRr

Z,N,V,S

ORI

Rd', K
d' > 15

Logical OR with
Immediate

RdRdK

Z,N,V,S

SBR

Rd', K
d' > 15

Set Bit(s) in
Register

RdRdK

Z,N,V,S

EOR

Rd

Exclusive OR

RdRdRr

Z,N,V,S

COM

Rd

Ones
Complement

Rd0xFF-Rd

Z,C,N,V,S

46

Manipolazione di bit (1)


Codice

Operandi

Descrizione Effetto

Flag

LSL

Rd

Logical
Shift Left

CRd(7), n=6..0
Rd(n+1)Rd(n),
Rd(0)0

Z,C,N,V,H

LSR

Rd

Logical
Shift Right

CRd(0), n=0..6
Rd(n)Rd(n+1),
Rd(7)0

Z,C,N,V

ASR

Rd

Arithmetic
Shift Right

CRd(0), n=0..6
Rd(n)Rd(n+1),
Rd(7)Rd(7)

Z,C,N,V

47

Manipolazione di bit (2)


Codice

Operandi

Descrizione

Effetto

Flag

ROL

Rd

Rotate Left
Through Carry

CRd(7), n=6..0
Rd(n+1)Rd(n),
Rd(0)Coldold

Z,C,N,V,H

ROR

Rd

Rotate Right
Through Carry

CRd(0), n=0..6
Rd(n)Rd(n+1),
Rd(7)Cold

Z,C,N,V

SWAP

Rd

Swap Nibbles

Rd(3..0)(7..4)

None

48

Manipolazione di bit (3)


Codice

Operandi

Descrizione

Effetto

Flag

BSET

Flag Set

SREG(s)1

SREG(s)

Set flag

Flag Clear

SREG(s)0

SREG(s)

Clear flag

SE1
BCLR

CL

SBI

Aa , b

Set Bit in I/O


Register

I/O(A, b)1

None

CBI

Aa , b

Clear Bit in I/O


Register

I/O(A, b)0

None

BST

Rr, b

Bit Store from


Register to T

TRr(b)

BLD

Rd, b

Bit load from T to


Register

Rd(b)T

None

Il simbolo una delle lettere con cui si designano i flag di SREG,


cio C, Z, N, V, S, H, T, I.
49

Controllo del programma (1)


Codice Operandi

Descrizione

Effetto

Flag

RJMP

Relative Jump

PCPC+k+1

None

IJMP

Indirect Jump

PCZ

None

EIJMP

Indirect Jump

PCZ

None

Indirect Jump

PCZ

None

JMP

50

Controllo del programma (1)


Codice Operandi

Descrizione

Effetto

Flag

RCALL k

Relative Call
Subroutine

PUSH PCH
PUSH PCL

None

PCPC+k+1
ICALL

Indirect Call

PUSH PCH,
PUSH PCL,
PCZ

None

RET

Subroutine
Return

POP PCH, PCL None

RETI

Interrupt Return

POP PCH, PCL I1

Il flag I viene ripristinato al valore precedente linterruzione.


51

Controllo del programma (2)


Codice

Operandi

Descrizione

Effetto

Flag

CPSE

Rd, Rr

Compare, Skip if
Equal

if (Rd=Rr)
PCPC+2 or 31

None

12

SBRC

Rr, b

Skip if Bit in
Register Cleared

if (Rr(b)=0)
PCPC+2 or 31

None

12

SBRS

Rr, b

Skip if Bit in
Register Set

if (Rr(b)=1)
PCPC+2 or 31

None

12

SBIC

A, b

Skip if Bit in I/O


Register Cleared

if (I/O(A,b)=0)
PCPC+2 or 31

None

22

SBIS

A, b

Skip if Bit in I/O


Register Set

If (I/O(A,b)=1)
PCPC+2 or 31

None

22

Il valore del salto 3 se listruzione da saltare lunga 2 parole.

Tempo di esecuzione in assenza di salto. Se c salto occorrono +1T se


listruzione da saltare lunga 1 parola oppure +2T se lunga 2 parole.
52

Controllo del programma (3)

Codice

Operandi

Descrizione

Effetto

Flag

BRBS

s, k

Branch if Status
Flag Set

if (SREG(s)=1)
PCPC+k+1

None

11

BRBC

s, k

Branch if Status
Flag Cleared

if (SREG(s)=0)
PCPC+k+1

None

11

BRXX2

Branch if
if (XX)
None
11
Condition XX is
PCPC+k+1
True
La condizione
XX corrisponde a uno dei possibili valori logici di un flag, secondo
1
Tempo di esecuzione in assenza di salto. Se c salto occorrono 2 T.
la tabellina nel lucido seguente.

53

Condizioni di salto (1)


Flag e Valore C=1
Condizione CS,
XX LO
Significato Carry
Set,
Lower

Flag e Valore S=1


Condizione GE
XX

C=0

Z=1

Z=0

N=1

N=0

CC, SH

EQ

NE

MI

PL

Carry
Cleared
Same or
Higher

Equal Not
Equal

Minus

Plus

S=0

H=1

H=0

T=1

T=0

LT

HS

HC

TS

TC

Half
carry
Set

Half
carry
cleared

T flag
Set

T flag
Cleared

Significato Greater Less


or
Than
Equal

54

Condizioni di salto (2)


Flag e Valore V=1
Condizione XX VS, LO
Significato Overflow
Set

V=0

I=1

I=0

VC

IE

ID

Overflow
Cleared

Interrupt Interrupt
enabled disabled

55

Controllo del programma (4)


Codice

Operandi

Descrizione

Effetto

Flag

BREAK

Break

(see specific
description)

None

NOP

No
operation

(see specific
description)

None

SLEEP

Sleep

(see specific
description)

None

WDR

Watchdog
Reset

(see specific
description)

None

56