Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

obrazek

Autor artykułu: mgr Jerzy Wałaszek
Konsultacje: Wojciech Grodowski, mgr inż. Janusz Wałaszek

©2023 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Instrukcje AVR

C

obrazek

Educational and Non-Profit Use of Copyrighted Material:

If you use Microchip copyrighted material solely for educational (non-profit) purposes falling under the “fair use” exception of the U.S. Copyright Act of 1976 then you do not need Microchip’s written permission. For example, Microchip’s permission is not required when using copyrighted material in: (1) an academic report, thesis, or dissertation; (2) classroom handouts or textbook; or (3) a presentation or article that is solely educational in nature (e.g., technical article published in a magazine).

https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines

SPIS TREŚCI
Podrozdziały

obrazek

CALL – Long Call to a Subroutine – Długie wywołanie podprogramu

Opis

Wywołuje podprogram umieszczony w obszarze całej pamięci programu. Adres powrotny (do instrukcji za rozkazem CALL) zostanie umieszczony na stosie. (Zobacz również na RCALL). Wskaźnik stosu wykorzystuje schemat postdekrementacji (zmniejszania po wykonaniu)   podczas wykonywania rozkazu CALL.
Instrukcja ta nie jest dostępna we wszystkich mikrokontrolerach AVR. Przeglądnij odpowiednie dane techniczne swojego urządzenia.

Działanie

                     
(i)  PC ← k Urządzenia z 16-bitowym PC, maksymalnie 128 KB pamięci programu.
(ii) PC ← k Urządzenia z 22-bitowym PC, maksymalnie 8 MB pamięci programu.

Składnia

 

Argumenty

 

Licznik rozkazów

 

Stos

(i) CALL k   0 ≤ k < 64K   PC ← k   STACK ← PC+2
SP ← SP-2, (2 bajty, 16 bitów)
(ii) CALL k   0 ≤ k < 4M   PC ← k   STACK ← PC+2
SP ← SP-3 (3 bajty, 22 bity)

32-bitowy kod instrukcji

1001
010k
kkkk
111k
kkkk
kkkk
kkkk
kkkk

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

       mov r16,r0  ; Kopiuj r0 do r16
       call check  ; Wywołaj podprogram
       nop         ; Kontynuuj (nic nie rób) 
       ...
check: cpi r16,0x42 ; Sprawdź, czy r16 ma specjalną wartość
       breq error  ; Skocz, jeśli równe
       ret         ; Wróć z podprogramu
       ...
error: rjmp error  ; Pętla nieskończona

Liczba słów: 2 (4 bajty)

Cykle: 4 dla urządzeń z 16-bitowym PC; 5 dla urządzeń z 22-bitowym PC

Na początek:  podrozdziału   strony 

CBI – Clear Bit in I/O Register – Zerowanie bitu w rejestrze we/wy

Opis

Zeruje określony bit w rejestrze we/wy. Instrukcja ta działa na niższych 32 rejestrach we/wy – adresy 0-31.

Działanie

                 
I/O(A,b) ← 0

Składnia

 

Argumenty

 

Licznik rozkazów

CBI A,b   0 ≤ A ≤ 31, 0 ≤ b ≤7   PC ← PC + 1

16-bitowy kod instrukcji

1001
1000
AAAA
Abbb

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

cbi 0x12,7 ; Zeruj bit 7 w Porcie D

Liczba słów: 1 (2 bajty)

Cykle: 2

Na początek:  podrozdziału   strony 

CBRClear Bits in Register – Zerowanie bitu w rejestrze

Opis

Zeruje określone bity w rejestrze Rd.  Wykonuje operację bitowego iloczynu logicznego zawartości rejestru Rd i zaprzeczenia stałej maski K. Wynik jest umieszczany w rejestrze Rd.

Działanie

                 
Rd ← Rd•(0xFF - K)

Składnia

 

Argumenty

 

Licznik rozkazów

CBR Rd,K   16 ≤ d ≤ 31, 0 ≤ K ≤ 255   PC ← PC + 1

16-bitowy kod instrukcji

0111
KKKK
ddd
KKKK

Jest to rozkaz ANDI z zanegowaną wartością argumentu K

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  
X 0 X X
S: N obrazek V, dla testów liczb ze znakiem w kodzie U2
V: 0
Zerowany
N: R7
Ustawiany, jeśli najstarszy bit wyniku jest ustawiony; w przeciwnym razie zerowany
Z: R7R6R5R4R3R2R1R0
Ustawiany, jeśli wynik wynosi 0x00; w przeciwnym razie zerowany

Wynik R (ang. Result) po operacji jest równy Rd.

Przykładowy kod:

cbr r16,0xF0 ; Wyzeruj górne 4 bity rejestru r16
cbr r18,1   ; Zeruj bit 0 w r18

Liczba słów: 1 (2 bajty)

Cykle: 1

Na początek:  podrozdziału   strony 

CLCClear Carry Flag – Zerowanie znacznika przeniesienia

Opis

Zeruje znacznik przeniesienia (C) w SREG (Rejestr Stanu).

Działanie

                 
C ← 0

Składnia

 

Argumenty

 

Licznik rozkazów

CLC   brak   PC ← PC + 1

16-bitowy kod instrukcji

1001
0100
1000
1000

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  
0
C: 0
Zerowany

Przykładowy kod:

add r0,r0 ; Dodaj r0 do siebie
clc       ; Wyzeruj znacznik przeniesienia

Liczba słów: 1 (2 bajty)

Cykle: 1

Na początek:  podrozdziału   strony 

CLHClear Half Carry Flag – Zerowanie znacznika przeniesienia połówkowego

Opis

Zeruje znacznik przeniesienia połówkowego (H) w SREG (Rejestr Stanu).

Działanie

                 
H ← 0

Składnia

 

Argumenty

 

Licznik rozkazów

CLH   brak   PC ← PC + 1

16-bitowy kod instrukcji

1001
0100
1101
1000

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  
0
H: 0
Zerowany

Przykładowy kod:

clh ; Zeruj znacznik przeniesienia połówkowego

Liczba słów: 1 (2 bajty)

Cykle: 1

Na początek:  podrozdziału   strony 

CLIClear Global Interrupt Flag – Zerowanie globalnego znacznika przerwań

Opis

Zeruje globalny znacznik przerwań (I) w SREG (Rejestr Stanu). Obsługa przerwań zostanie natychmiast wyłączona. Żadne przerwanie nie zostanie obsłużone po instrukcji CLI, nawet jeśli jego żądanie pojawi się jednocześnie z wykonywaniem instrukcji CLI.

Działanie

                 
I ← 0

Składnia

 

Argumenty

 

Licznik rozkazów

CLI   brak   PC ← PC + 1

16-bitowy kod instrukcji

1001
0100
1111
1000

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  
0
I: 0
Zerowany

Przykładowy kod:

in temp, SREG   ; Zapamiętaj zawartość SREG (temp musi być zdefiniowane przez użytkownika) 
cli             ; Wyłącz przerwania podczas sekwencji krytycznej czasowo
sbi EECR, EEMWE ; Rozpocznij zapis do EEPROM
sbi EECR, EEWE
out SREG, temp  ; Odtwórz zawartość SREG (Znacznik I) 

Liczba słów: 1 (2 bajty)

Cykle: 1

Na początek:  podrozdziału   strony 

CLNClear Negative Flag – Zerowanie znacznika N

Opis

Zeruje znacznik ujemnego wyniku (N) w SREG (Rejestr Stanu).

Działanie

                 
N ← 0

Składnia

 

Argumenty

 

Licznik rozkazów

CLN   brak   PC ← PC + 1

16-bitowy kod instrukcji

1001
0100
1010
1000

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  
0
N: 0
Zerowany

Przykładowy kod:

add r2,r3 ; Dodaj r3 do r2
cln       ; Wyzeruj znacznik ujemnego wyniku

Liczba słów: 1 (2 bajty)

Cykle: 1

Na początek:  podrozdziału   strony 

CLRClear Register – Zerowanie rejestru

Opis

Zeruje rejestr. Instrukcja ta wykonuje operację sumy symetrycznej rejestru z nim samym. Powoduje to wyzerowanie wszystkich bitów w rejestrze.

Działanie

                 
Rd ← Rd obrazek Rd

Składnia

 

Argumenty

 

Licznik rozkazów

CLR Rd   0 ≤ d ≤ 31   PC ← PC + 1

16-bitowy kod instrukcji

0010
01dd
dddd
dddd

(Zobacz na EOR)

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  
0 0 0 1
S: 0
Zerowany
V: 0
Zerowany
N: 0
Zerowany
Z: 1
Ustawiany

Przykładowy kod:

      clr r18     ; Zeruj r18
loop: inc r18     ; Zwiększ o 1 r18
      ...
      cpi r18,0x50 ; Porównaj r18 z 0x50
      brne loop   ; Jeśli różne, powtarzaj pętlę

Liczba słów: 1 (2 bajty)

Cykle: 1

Na początek:  podrozdziału   strony 

CLSClear Signed Flag – Zerowanie znacznika znakowego

Opis

Zeruje znacznik testu znakowego (S) w SREG (Rejestr Stanu).

Działanie

                 
S ← 0

Składnia

 

Argumenty

 

Licznik rozkazów

CLS   brak   PC ← PC + 1

16-bitowy kod instrukcji

1001
0100
1100
1000

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  
0
S: 0
Zerowany

Przykładowy kod:

add r2,r3 ; Dodaj r3 do r2
cls       ; Zeruj znacznik znakowy

Liczba słów: 1 (2 bajty)

Cykle: 1

Na początek:  podrozdziału   strony 

CLTClear T Flag – Zerowanie znacznika T

Opis

Zeruje znacznik T w SREG (Rejestr Stanu).

Działanie

                 
T ← 0

Składnia

 

Argumenty

 

Licznik rozkazów

CLT   brak   PC ← PC + 1

16-bitowy kod instrukcji

1001
0100
1110
1000

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  
0
T: 0
Zerowany

Przykładowy kod:

clt ; Zeruj znacznik T

Liczba słów: 1 (2 bajty)

Cykle: 1

Na początek:  podrozdziału   strony 

CLVClear Overflow Flag – Zerowanie znacznika nadmiaru

Opis

Zeruje znacznik nadmiaru (V) w SREG (Rejestr Stanu).

Działanie

                 
V ← 0

Składnia

 

Argumenty

 

Licznik rozkazów

CLV   brak   PC ← PC + 1

16-bitowy kod instrukcji

1001
0100
1011
1000

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  
0
V: 0
Zerowany

Przykładowy kod:

add r2,r3 ; Dodaj r3 do r2
clv       ; Zeruj znacznik nadmiaru U2

Liczba słów: 1 (2 bajty)

Cykle: 1

Na początek:  podrozdziału   strony 

CLZClear Zero Flag – Zerowanie znacznika zera

Opis

Zeruje znacznik zera (Z) w SREG (Rejestr Stanu).

Działanie

                 
Z ← 0

Składnia

 

Argumenty

 

Licznik rozkazów

CLZ   brak   PC ← PC + 1

16-bitowy kod instrukcji

1001
0100
1001
1000

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  
0
Z: 0
Zerowany

Przykładowy kod:

add r2,r3 ; Dodaj r3 do r2
clz       ; Zeruj znacznik zera

Liczba słów: 1 (2 bajty)

Cykle: 1

Na początek:  podrozdziału   strony 

COMOne’s Complement – Negacja U1

Opis

Ta instrukcja wykonuje negację bitów w rejestrze Rd, co odpowiada negacji w kodzie uzupełnień do 1.

Działanie

                 
Rd ← 0xFF - Rd

Składnia

 

Argumenty

 

Licznik rozkazów

COM Rd   0 ≤ d ≤ 31   PC ← PC + 1

16-bitowy kod instrukcji

1001
010d
dddd
0000

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  
X 0 X X 1
S: N obrazek V
Dla testów liczb ze znakiem w kodzie U2
V: 0
Zerowany
N: R7
Ustawiany, jeśli najstarszy bit wyniku jest ustawiony; w przeciwnym razie zerowany
Z: R7R6R5R4R3R2R1R0
Ustawiany, jeśli wynik wynosi 0x00; w przeciwnym razie zerowany
C: 1
Ustawiany

Wynik R (ang. Result) po operacji jest równy Rd.

Przykładowy kod:

      com r4    ; Zaneguj bitowo r4
      breq zero ; Skocz przy zerze
      ...
zero: nop       ; Miejsce docelowe skoku (nic nie rób) 

Liczba słów: 1 (2 bajty)

Cykle: 1

Na początek:  podrozdziału   strony 

CPCompare – Porównanie

Opis

Instrukcja wykonuje porównanie ze sobą dwóch rejestrów Rd z Rr. Żaden z nich nie zostaje zmieniony. Po tej instrukcji można zastosować wszystkie instrukcje skoków warunkowych.

Działanie

                 
Rd - Rr

Składnia

 

Argumenty

 

Licznik rozkazów

CP Rd,Rr   0 ≤ d ≤ 31, 0 ≤ r ≤ 31   PC ← PC + 1

16-bitowy kod instrukcji

0001
01rd
dddd
rrrr

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  
X X X X X X
H: Rd3•Rr3+Rr3•R3+R3•Rd3
Ustawiany, jeśli była pożyczka z bitu 3; w przeciwnym razie zerowany
S: N obrazek V
Dla testów liczb ze znakiem w kodzie U2
V: Rd7•Rr7R7+Rd7•Rr7•R7
Ustawiany, jeśli w wyniku operacji powstał nadmiar U2; w przeciwnym razie zerowany
N: R7
Ustawiany, jeśli najstarszy bit wyniku jest ustawiony; w przeciwnym razie zerowany
Z: R7R6R5R4R3R2R1R0
Ustawiany, jeśli wynik wynosi 0x00; w przeciwnym razie zerowany
C: Rd7•Rr7+Rr7•R7+R7•Rd7
Ustawiany, jeśli wartość bezwzględna Rr jest większa od wartości bezwzględnej Rd; w przeciwnym razie zerowany

Wynik R (ang. Result) po operacji jest równy Rd.

Przykładowy kod:

       cp r4,r19  ; Porównaj r4 z r19
       brne noteq ; skocz, jeśli r4 <> r19
       ...
noteq: nop        ; Miejsce docelowe skoku (nic nie rób) 

Liczba słów: 1 (2 bajty)

Cykle: 1

Na początek:  podrozdziału   strony 

CPCCompare with Carry – Porównanie z przeniesieniem

Opis

Instrukcja wykonuje porównanie ze sobą dwóch rejestrów Rd z Rr. Żaden z nich nie zostaje zmieniony. Po tej instrukcji można zastosować wszystkie instrukcje skoków warunkowych.

Działanie

                 
Rd - Rr - C

Składnia

 

Argumenty

 

Licznik rozkazów

CPC Rd,Rr   0 ≤ d ≤ 31, 0 ≤ r ≤ 31   PC ← PC + 1

16-bitowy kod instrukcji

0000
01rd
dddd
rrrr

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  
X X X X X X
H: Rd3•Rr3+Rr3•R3+R3•Rd3
Ustawiany, jeśli była pożyczka z bitu 3; w przeciwnym zerowany
S: N obrazek V
Dla testów liczb ze znakiem w kodzie U2
V: Rd7•Rr7R7+Rd7•Rr7•R7
Ustawiany, jeśli w wyniku operacji powstał nadmiar U2; w przeciwnym zerowany
N: R7
Ustawiany, jeśli najstarszy bit wyniku jest ustawiony; w przeciwnym razie zerowany
Z: R7R6R5R4R3R2R1R0
Ustawiany, jeśli wynik wynosi 0x00; w przeciwnym razie zerowany
C: Rd7•Rr7+Rr7•R7+R7•Rd7
Ustawiany, jeśli wartość bezwzględna Rr plus poprzednie przeniesienie jest większa od wartości bezwzględnej Rd; w przeciwnym zerowany

Wynik R (ang. Result) po operacji jest równy Rd.

Przykładowy kod:

                  ; Porównaj r3:r2 z r1:r0
       cp r2,r0   ; Porównaj młodsze bajty
       cpc r3,r1  ; porównaj starsze bajty
       brne noteq ; Skocz, jeśli różne
       ...
noteq: nop        ; Miejsce docelowe skoku (nic nie rób) 

Liczba słów: 1 (2 bajty)

Cykle: 1

Na początek:  podrozdziału   strony 

CPICompare with Immediate – Porównanie ze stałą

Opis

Instrukcja wykonuje porównanie rejestru Rd ze stałą K. Żaden z nich nie zostaje zmieniony. Po tej instrukcji można zastosować wszystkie instrukcje skoków warunkowych.

Działanie

                 
Rd - K

Składnia

 

Argumenty

 

Licznik rozkazów

CPI Rd,K   16 ≤ d ≤ 31, 0≤ K ≤ 255   PC ← PC + 1

16-bitowy kod instrukcji

0011
KKKK
dddd
KKKK

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  
X X X X X X
H: Rd3•K3+K3•R3+R3•Rd3
Ustawiany, jeśli była pożyczka z bitu 3; w przeciwnym razie zerowany
S: N obrazek V
Dla testów liczb ze znakiem w kodzie U2
V: Rd7•K7R7+Rd7•K7•R7
Ustawiany, jeśli w wyniku operacji powstał nadmiar U2; w przeciwnym razie zerowany
N: R7
Ustawiany, jeśli najstarszy bit wyniku jest ustawiony; w przeciwnym razie zerowany
Z: R7R6R5R4R3R2R1R0
Ustawiany, jeśli wynik wynosi 0x00; w przeciwnym razie zerowany
C: Rd7•K7+K7•R7+R7•Rd7
Ustawiany, jeśli wartość bezwzględna stałej K jest większa od wartości bezwzględnej Rd; w przeciwnym razie zerowany

Wynik R (ang. Result) po operacji jest równy Rd.

Przykładowy kod:

       cpi r19,3  ; Porównaj r19 z 3
       brne error ; Skocz, jeśli r19<>3
       ...
error: nop        ; Miejsce docelowe skoku (nic nie rób) 

Liczba słów: 1 (2 bajty)

Cykle: 1

Na początek:  podrozdziału   strony 

CPSECompare Skip if Equal – Porównanie z pominięciem przy równości

Opis

Ta instrukcja wykonuje porównanie ze sobą dwóch rejestrów Rd i Rr i pomija następną instrukcję, jeśli Rd = Rr.

Działanie

                 
Jeśli Rd = Rr, to PC ← PC + 2 (lub 3), inaczej PC ← PC + 1

Składnia

 

Argumenty

 

Licznik rozkazów

CPSE Rd,Rr   0 ≤ d ≤ 31, 0 ≤ r ≤ 31   PC ← PC + 1

16-bitowy kod instrukcji

0000
01rd
dddd
rrrr

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

inc r4     ; zwiększ o 1 r4
cpse r4,r0 ; Porównaj r4 z r0
neg r4     ; Wykonywane tylko wtedy, gdy r4<>r0
nop        ; Kontynuuj (nic nie rób) 

Liczba słów: 1 (2 bajty)

Cykle:

1, jeśli warunek jest fałszywy (brak pominięcia następnej instrukcji)
2, jeśli warunek jest prawdziwy (pominięcie wykonane) , a pomijana instrukcja ma długość 1 słowa
3, jeśli warunek jest prawdziwy (pominięcie wykonane) , a pomijana instrukcja ma długość 2 słów

Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2023 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.