Serwis Edukacyjny w I-LO w Tarnowie ![]() Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej
Autor artykułu: mgr Jerzy
Wałaszek |
©2023 mgr Jerzy Wałaszek
|
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines
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) |
1001 |
010k |
kkkk |
111k |
kkkk |
kkkk |
kkkk |
kkkk |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | – | – | – | – | – | – | – |
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 |
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 |
1001 |
1000 |
AAAA |
Abbb |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | – | – | – | – | – | – | – |
cbi 0x12,7 ; Zeruj bit 7 w Porcie D
|
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 |
0111 |
KKKK
|
ddd |
KKKK
|
Jest to rozkaz ANDI z zanegowaną wartością argumentu K
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | – | – | X | 0 | X | X | – |
S: | N
![]() |
V: | 0 Zerowany |
N: | R7 Ustawiany, jeśli najstarszy bit wyniku jest ustawiony; w przeciwnym razie zerowany |
Z: |
R7•R6•R5•R4•R3•R2•R1•R0 Ustawiany, jeśli wynik wynosi 0x00; w przeciwnym razie zerowany |
Wynik R (ang. Result) po operacji jest równy Rd.
cbr r16,0xF0 ; Wyzeruj górne 4 bity rejestru r16 cbr r18,1 ; Zeruj bit 0 w r18 |
Zeruje znacznik przeniesienia (C) w SREG (Rejestr Stanu).
Działanie |
||||
C ← 0 | ||||
Składnia |
Argumenty |
Licznik rozkazów |
||
CLC | brak | PC ← PC + 1 |
1001 |
0100 |
1000 |
1000 |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | – | – | – | – | – | – | 0 |
C: | 0 Zerowany |
add r0,r0 ; Dodaj r0 do siebie clc ; Wyzeruj znacznik przeniesienia |
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 |
1001 |
0100 |
1101 |
1000 |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | – | 0 | – | – | – | – | – |
H: | 0 Zerowany |
clh ; Zeruj znacznik przeniesienia połówkowego
|
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 |
1001 |
0100 |
1111 |
1000 |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
0 | – | – | – | – | – | – | – |
I: | 0 Zerowany |
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) |
Zeruje znacznik ujemnego wyniku (N) w SREG (Rejestr Stanu).
Działanie |
||||
N ← 0 | ||||
Składnia |
Argumenty |
Licznik rozkazów |
||
CLN | brak | PC ← PC + 1 |
1001 |
0100 |
1010 |
1000 |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | – | – | – | – | 0 | – | – |
N: | 0 Zerowany |
add r2,r3 ; Dodaj r3 do r2 cln ; Wyzeruj znacznik ujemnego wyniku |
Zeruje rejestr. Instrukcja ta wykonuje operację sumy symetrycznej rejestru z nim samym. Powoduje to wyzerowanie wszystkich bitów w rejestrze.
Działanie |
||||
Rd ← Rd
![]() |
||||
Składnia |
Argumenty |
Licznik rozkazów |
||
CLR Rd | 0 ≤ d ≤ 31 | PC ← PC + 1 |
0010 |
01dd |
dddd |
dddd |
(Zobacz na EOR)
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | – | – | 0 | 0 | 0 | 1 | – |
S: | 0 Zerowany |
V: | 0 Zerowany |
N: | 0 Zerowany |
Z: | 1 Ustawiany |
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ę |
Zeruje znacznik testu znakowego (S) w SREG (Rejestr Stanu).
Działanie |
||||
S ← 0 | ||||
Składnia |
Argumenty |
Licznik rozkazów |
||
CLS | brak | PC ← PC + 1 |
1001 |
0100 |
1100 |
1000 |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | – | – | 0 | – | – | – | – |
S: | 0 Zerowany |
add r2,r3 ; Dodaj r3 do r2 cls ; Zeruj znacznik znakowy |
Zeruje znacznik T w SREG (Rejestr Stanu).
Działanie |
||||
T ← 0 | ||||
Składnia |
Argumenty |
Licznik rozkazów |
||
CLT | brak | PC ← PC + 1 |
1001 |
0100 |
1110 |
1000 |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | 0 | – | – | – | – | – | – |
T: | 0 Zerowany |
clt ; Zeruj znacznik T
|
Zeruje znacznik nadmiaru (V) w SREG (Rejestr Stanu).
Działanie |
||||
V ← 0 | ||||
Składnia |
Argumenty |
Licznik rozkazów |
||
CLV | brak | PC ← PC + 1 |
1001 |
0100 |
1011 |
1000 |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | – | – | – | 0 | – | – | – |
V: | 0 Zerowany |
add r2,r3 ; Dodaj r3 do r2 clv ; Zeruj znacznik nadmiaru U2 |
Zeruje znacznik zera (Z) w SREG (Rejestr Stanu).
Działanie |
||||
Z ← 0 | ||||
Składnia |
Argumenty |
Licznik rozkazów |
||
CLZ | brak | PC ← PC + 1 |
1001 |
0100 |
1001 |
1000 |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | – | – | – | – | – | 0 | – |
Z: | 0 Zerowany |
add r2,r3 ; Dodaj r3 do r2 clz ; Zeruj znacznik zera |
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 |
1001 |
010d |
dddd |
0000 |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | – | – | X | 0 | X | X | 1 |
S: | N
![]() 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: |
R7•R6•R5•R4•R3•R2•R1•R0 Ustawiany, jeśli wynik wynosi 0x00; w przeciwnym razie zerowany |
C: | 1 Ustawiany |
Wynik R (ang. Result) po operacji jest równy Rd.
com r4 ; Zaneguj bitowo r4 breq zero ; Skocz przy zerze ... zero: nop ; Miejsce docelowe skoku (nic nie rób) |
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 |
0001 |
01rd |
dddd |
rrrr |
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
![]() Dla testów liczb ze znakiem w kodzie U2 |
V: | Rd7•Rr7•R7+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: |
R7•R6•R5•R4•R3•R2•R1•R0 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.
cp r4,r19 ; Porównaj r4 z r19 brne noteq ; skocz, jeśli r4 <> r19 ... noteq: nop ; Miejsce docelowe skoku (nic nie rób) |
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 |
0000 |
01rd |
dddd |
rrrr |
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
![]() Dla testów liczb ze znakiem w kodzie U2 |
V: | Rd7•Rr7•R7+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: |
R7•R6•R5•R4•R3•R2•R1•R0 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.
; 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) |
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 |
0011 |
KKKK |
dddd |
KKKK |
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
![]() Dla testów liczb ze znakiem w kodzie U2 |
V: | Rd7•K7•R7+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: |
R7•R6•R5•R4•R3•R2•R1•R0 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.
cpi r19,3 ; Porównaj r19 z 3 brne error ; Skocz, jeśli r19<>3 ... error: nop ; Miejsce docelowe skoku (nic nie rób) |
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 |
0000 |
01rd |
dddd |
rrrr |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | – | – | – | – | – | – | – |
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) |
Cykle: |
1, jeśli warunek jest fałszywy
(brak
pominięcia następnej instrukcji)
|
![]() |
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.