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 |
©2025 mgr Jerzy Wałaszek
|
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines
Działanie |
||||
Rd ← Rr | ||||
Składnia |
Argumenty |
Licznik rozkazów |
||
MOV Rd,Rr | x0 ≤ d ≤ 31, 0 ≤ r ≤ 31 | PC ← PC + 1 |
0010 |
11rd |
dddd |
rrrr |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | – | – | – | – | – | – | – |
mov r16,r0 ; Kopiuj r0 do r16 call check ; Wywołaj podprogram ... check: cpi r16,0x11 ; Porównaj r16 z 0x11 ... ret ; Wróć z podprogramu |
Instrukcja nie jest dostępna we wszystkich mikrokontrolerach. Sprawdź listę instrukcji swojego modelu.
Działanie |
||||
Rd+1:Rd ← Rr+1:Rr | ||||
Składnia |
Argumenty |
Licznik rozkazów |
||
MOVW Rd+1:Rd,Rr+1Rr | d {0,2,...,30}, r {0,2,...,30} | PC ← PC + 1 |
0000 |
0001 |
dddd |
rrrr |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | – | – | – | – | – | – | – |
movw r17:16,r1:r0 ; Kopiuj r1:r0 do r17:r16 call check ; Wywołaj podprogram ... check: cpi r16,0x11 ; Porównaj r16 z 0x11 ... cpi r17,0x32 ; Porównaj r17 z 0x32 ... ret ; Wróć z podprogramu |
Mnożna Rd i mnożnik Rr są dwoma rejestrami zawierającymi liczby bez znaku. 16-bitowy iloczyn bez znaku jest umieszczany w R1 (górny bajt, MSB) i R0 (dolny bajt, LSB). Zwróć uwagę, że jeśli mnożna lub mnożnik zostaną wybrane z R0 lub R1, to wynik mnożenia nadpisze zawartość tych rejestrów.
Instrukcja nie jest dostępna na wszystkich mikrokontrolerach. Sprawdź w danych technicznych swojego urządzenia.
Działanie |
||||
R1:R0 ← Rd × Rr (bez znaku ← bez znaku × bez znaku) | ||||
Składnia |
Argumenty |
Licznik rozkazów |
||
MUL Rd,Rr | 0 ≤ d ≤ 31, 0 ≤ r ≤ 31 | PC ← PC + 1 |
1001 |
11rd |
dddd |
rrrr |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | – | – | – | – | – | X | X |
Z: |
R15•R14•R13•R12•R11•R10•R9•R8•R7•R6•R5•R4•R3•R2•R1•R0 Ustawiany, jeśli wynik wynosi 0x0000; w przeciwnym razie zerowany |
C: |
R15 Ustawiany, jeśli bit 15 iloczynu przed przesunięciem jest ustawiony; w przeciwnym razie zerowany |
Wynik R (ang. Result) po operacji jest równy R1:R0.
mul r5,r4 ; Pomnóż bezznakowo r5 i r4 movw r4,r0 ; Skopiuj wynik z powrotem do r5:r4 |
Mnożna Rd i mnożnik Rr są dwoma rejestrami zawierającymi liczby ze znakiem. 16-bitowy iloczyn ze znakiem jest umieszczany w R1 (górny bajt, MSB) i R0 (dolny bajt, LSB).
Instrukcja nie jest dostępna na wszystkich mikrokontrolerach. Sprawdź w danych technicznych swojego urządzenia.
Działanie |
||||
R1:R0 ← Rd × Rr (ze znakiem ← ze znakiem × ze znakiem) | ||||
Składnia |
Argumenty |
Licznik rozkazów |
||
MULS Rd,Rr | 16 ≤ d ≤ 31, 16 ≤ r ≤ 31 | PC ← PC + 1 |
0000 |
0010 |
dddd |
rrrr |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | – | – | – | – | – | X | X |
Z: |
R15•R14•R13•R12•R11•R10•R9•R8•R7•R6•R5•R4•R3•R2•R1•R0 Ustawiany, jeśli wynik wynosi 0x0000; w przeciwnym razie zerowany |
C: |
R15 Ustawiany, jeśli bit 15 iloczynu przed przesunięciem jest ustawiony; w przeciwnym razie zerowany |
Wynik R (ang. Result) po operacji jest równy R1:R0.
muls r21,r20 ; Pomnóż bezznakowo r21 i r20 movw r20,r0 ; Skopiuj wynik z powrotem do r21:r20 |
Mnożna Rd i mnożnik Rr są dwoma rejestrami. Mnożna Rd jest 8-bitową liczbą ze znakiem w kodzie U2, a mnożnik Rr jest 8-bitową liczbą bez znaku. 16-bitowy iloczyn ze znakiem jest umieszczany w R1 (górny bajt, MSB) i R0 (dolny bajt, LSB).
Instrukcja nie jest dostępna na wszystkich mikrokontrolerach. Sprawdź w danych technicznych swojego urządzenia.
Działanie |
||||
R1:R0 ← Rd × Rr (ze znakiem ← ze znakiem × bez znaku) | ||||
Składnia |
Argumenty |
Licznik rozkazów |
||
MULSU Rd,Rr | 16 ≤ d ≤ 23, 16 ≤ r ≤ 23 | PC ← PC + 1 |
0000 |
0011 |
0ddd |
0rrr |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | – | – | – | – | – | X | X |
Z: |
R15•R14•R13•R12•R11•R10•R9•R8•R7•R6•R5•R4•R3•R2•R1•R0 Ustawiany, jeśli wynik wynosi 0x0000; w przeciwnym razie zerowany |
C: |
R15 Ustawiany, jeśli bit 15 iloczynu przed przesunięciem jest ustawiony; w przeciwnym razie zerowany |
Wynik R (ang. Result) po operacji jest równy R1:R0.
;****************************************************************************** ;* OPIS ;*Znakowe mnożenie dwóch 16-bitowych liczb z 32-bitowym wynikiem ;* UŻYCIE ;*r19:r18:r17:r16 = r23:r22 * r21:r20 ;****************************************************************************** muls16x16_32: clr r2 muls r23, r21 ; (ze znakiem)ah * (ze znakiem)bh movw r19:r18, r1:r0 mul r22, r20; al * bl movw r17:r16, r1:r0 mulsu r23, r20 ; (ze znakiem)ah * bl sbc r19, r2 add r17, r0 adc r18, r1 adc r19, r2 mulsu r21, r22 ; (ze znakiem)bh * al sbc r19, r2 add r17, r0 adc r18, r1 adc r19, r2 ret |
Działanie |
||||
Rd ← 0x00 - Rd | ||||
Składnia |
Argumenty |
Licznik rozkazów |
||
NEG Rd | 0 ≤ d ≤ 31 | PC ← PC + 1 |
1001 |
010d |
0ddd |
0001 |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | – | X | X | X | X | X | X |
H: |
R3+Rd3 Ustawiany, jeśli była pożyczka z bitu 3; zerowany w przypadku przeciwnym. |
S: |
N
V Dla testów liczb ze znakiem |
V: |
R7•R6•R5•R4•R3•R2•R1•R0 Ustawiany, jeśli powstanie nadmiar U2 z implikowanego odejmowania od zera; zerowany w przypadku przeciwnym.. Nadmiar U2 wystąpi tylko wtedy, gdy zawartość rejestru po operacji będzie równa 0x80. |
N: |
R7 Ustawiany, jeśli najstarszy bit wyniku jest ustawiony; zerowany w przypadku przeciwnym. |
Z: |
R7•R6•R5•R4•R3•R2•R1•R0 Ustawiany, jeśli wynikiem jest 0x00; zerowany w przypadku przeciwnym. |
C: |
R7 + R6 + R5 + R4 + R3 + R2 + R1 + R0 Ustawiany, jeśli wystąpi pożyczka z implikowanego odejmowania od zera; zerowany w przypadku przeciwnym. Znacznik C będzie ustawiony we wszystkich przypadkach z wyjątkiem zawartości rejestru po operacji równej 0x00. |
Wynik R (ang. Result) po operacji jest równy Rd.
sub r11,r0 ; Odejmij r0 od r11 brpl positive ; Skocz, jeśli wynik dodatni neg r11 ; Zaneguj arytmetycznie r11 positive: nop ; Miejsce docelowe skoku (nic nie rób) |
Działanie |
||||
brak | ||||
Składnia |
Argumenty |
Licznik rozkazów |
||
NOP | brak | PC ← PC + 1 |
0000 |
0000 |
0000 |
0000 |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | – | – | – | – | – | – | – |
clr r16 ; Zeruj r16 ser r17 ; Ustaw r17 out 0x18,r16 ; Zapisz zera do portu B nop ; Czekaj 1 cykl (nic nie rób) out 0x18,r17 ; Zapisz jedynki do portu B |
Działanie |
||||
Rd ← Rd v Rr | ||||
Składnia |
Argumenty |
Licznik rozkazów |
||
OR Rd,Rr | 0 ≤ d ≤ 31, 0 ≤ r ≤ 31 | PC ← PC + 1 |
0010 |
10rd |
dddd |
rrrr |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | – | – | X | 0 | X | X | – |
S: |
N
V Dla testów liczb ze znakiem |
V: |
0 Zerowany |
N: |
R7 Ustawiany, jeśli najstarszy bit wyniku jest ustawiony; zerowany w przypadku przeciwnym. |
Z: |
R7•R6•R5•R4•R3•R2•R1•R0 Ustawiany, jeśli wynikiem jest 0x00; zerowany w przypadku przeciwnym. |
Wynik R (ang. Result) po operacji jest równy Rd.
or r15,r16 ; Wykonaj bitową alternatywę pomiędzy rejestrami bst r15,6 ; Zachowaj bit 6 z r15 w znaczniku T brts ok ; Skocz, jeśli znacznik T jest ustawiony ... ok: nop ; Miejsce docelowe skoku (nic nie rób) |
Działanie |
||||
Rd ← Rd v K | ||||
Składnia |
Argumenty |
Licznik rozkazów |
||
OR Rd,K | 16 ≤ d ≤ 31, 0 ≤ K ≤ 255 | PC ← PC + 1 |
0110 |
KKKK |
dddd |
KKKK |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | – | – | X | 0 | X | X | – |
S: |
N
V Dla testów liczb ze znakiem |
V: |
0 Zerowany |
N: |
R7 Ustawiany, jeśli najstarszy bit wyniku jest ustawiony; zerowany w przypadku przeciwnym. |
Z: |
R7•R6•R5•R4•R3•R2•R1•R0 Ustawiany, jeśli wynikiem jest 0x00; zerowany w przypadku przeciwnym. |
Wynik R (ang. Result) po operacji jest równy Rd.
ori r16,0xF0 ; Ustaw górne 4 bity w r16 ori r17,1 ; Ustaw bit 0 w r17 |
Działanie |
||||
I/O(A) ← Rr | ||||
Składnia |
Argumenty |
Licznik rozkazów |
||
OUT A,Rr | 0 ≤ r ≤ 31, 0 ≤ A ≤ 63 | PC ← PC + 1 |
1011 |
1AAr |
rrrr |
AAAA |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | – | – | – | – | – | – | – |
clr r16 ; Zeruj r16 ser r17 ; Ustaw r17 out 0x18,r16 ; Zapisz zera do portu B nop ; Czekaj 1 cykl (nic nie rób) out 0x18,r17 ; Zapisz jedynki do portu B |
Instrukcja nie jest dostępna na wszystkich mikrokontrolerach. Sprawdź w danych technicznych swojego urządzenia.
Działanie |
||||||
Rd ← STACK | ||||||
Składnia |
Argumenty |
Licznik rozkazów |
Wskaźnik stosu |
|||
POP Rd | 0 ≤ d ≤ 31 | PC ← PC + 1 | SP ← SP + 1 |
1001 |
000d |
dddd |
1111 |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | – | – | – | – | – | – | – |
call routine ; Wywołaj podprogram ... routine: push r14 ; Zapamiętaj r14 na stosie push r13 ; Zapamiętaj r13 na stosie ... pop r13 ; Przywróć r13 pop r14 ; Przywróć r14 ret ; Wróć z podprogramu |
Instrukcja nie jest dostępna na wszystkich mikrokontrolerach. Sprawdź w danych technicznych swojego urządzenia.
Działanie |
||||||
STACK ← Rr | ||||||
Składnia |
Argumenty |
Licznik rozkazów |
Wskaźnik stosu |
|||
PUSH Rr | 0 ≤ r ≤ 31 | PC ← PC + 1 | SP ← SP - 1 |
1001 |
001r |
rrrr |
1111 |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | – | – | – | – | – | – | – |
call routine ; Wywołaj podprogram ... routine: push r14 ; Zapamiętaj r14 na stosie push r13 ; Zapamiętaj r13 na stosie ... pop r13 ; Przywróć r13 pop r14 ; Przywróć r14 ret ; Wróć z podprogramu |
Działanie |
|||||||
(i) (ii) |
PC ← PC + k + 1 Mikrokontrolery z
16-bitowym PC, maksymalnie 128KB pamięci programu PC ← PC + k + 1 Mikrokontrolery z 22-bitowym PC, maksymalnie 8MB pamięci programu |
||||||
Składnia |
Argumenty |
Licznik rozkazów |
Wskaźnik stosu |
||||
(i) (ii) |
RCALL k RCALL k |
-2K ≤ k < 2K -2K ≤ k < 2K |
PC ← PC + k + 1 PC ← PC + k + 1 |
STACK ← PC + 1 SP ← SP - 2 (2 bajty, 16 bitów) STACK ← PC + 1 SP ← SP - 3 (3 bajty, 22 bity) |
1101 |
kkkk |
kkkk |
kkkk |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | – | – | – | – | – | – | – |
rcall routine ; Wywołaj podprogram ... routine: push r14 ; Zachowaj r14 na stosie ... pop r14 ; Przywróć r14 ret ; Powróć z podprogramu |
Cykle: |
3 Mikrokontrolery z 16-bitowymi PC
|
Działanie |
|||||||
(i) (ii) |
PC(15:0) ← STACK Mikrokontrolery z
16-bitowymi PC, 128KB pamięci programu maksimum PC(21:0) ← STACK Mikrokontrolery z 22-bitowymi PC, 8MB pamięci programu maksimum |
||||||
Składnia |
Argumenty |
Licznik rozkazów |
Wskaźnik stosu |
||||
(i) (ii) |
RET RET |
brak brak |
Zobacz na działanie Zobacz na działanie |
SP ← SP + 2 (2 bajty, 16 bitów) SP ← SP + 3 (3 bajty, 22 bity) |
1001 |
0101 |
0000 |
1000 |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | – | – | – | – | – | – | – |
call routine ; Wywołaj podprogram ... routine: push r14 ; Zachowaj r14 na stosie ... pop r14 ; Przywróć r14 ret ; Powróć z podprogramu |
Cykle: |
4 Mikrokontrolery z 16-bitowymi PC
|
Zwróć uwagę, iż rejestr stanu nie zostaje automatycznie zachowany przy wejściu do procedury obsługi przerwania, a również nie jest on odtwarzany przy powrocie z tej procedury. Musi to być wykonywane przez program aplikacji. Wskaźnik stosu używa schematu preinkrementacji (wcześniejszego zwiększenia o 1) podczas RETI.
Działanie |
|||||||
(i) (ii) |
PC(15:0) ← STACK Mikrokontrolery z
16-bitowymi PC, 128KB pamięci programu maksimum PC(21:0) ← STACK Mikrokontrolery z 22-bitowymi PC, 8MB pamięci programu maksimum |
||||||
Składnia |
Argumenty |
Licznik rozkazów |
Wskaźnik stosu |
||||
(i) (ii) |
RETI RETI |
brak brak |
Zobacz na działanie Zobacz na działanie |
SP ← SP + 2 (2 bajty, 16 bitów) SP ← SP + 3 (3 bajty, 22 bity) |
1001 |
0101 |
0001 |
1000 |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
1 | – | – | – | – | – | – | – |
I: |
1 Ustawiany |
... extint: push r0 ; Zachowaj r0 na stosie ... pop r0 ; Odtwórz r0 reti ; Wróć i uaktywnij przerwania |
Cykle: |
4 Mikrokontrolery z 16-bitowymi PC
|
Działanie |
||||||
PC ← PC + k + 1 | ||||||
Składnia |
Argumenty |
Licznik rozkazów |
Wskaźnik stosu |
|||
RJMP k | -2K ≤ k < 2K | PC ← PC + k + 1 | nie zmieniany |
1100 |
kkkk |
kkkk |
kkkk |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | – | – | – | – | – | – | – |
cpi r16,0x42 ; Porównaj r16 z 0x42 brne error ; Skocz, jeśli r16 <> 0x42 rjmp ok ; Skok bezwarunkowy error: add r16,r17 ; Dodaj r17 do r16 inc r16 ; Zwiększ o 1 r16 ok: nop ; Miejsce docelowe dla for rjmp (nic nie rób) |
Działanie |
||||
Składnia |
Argumenty |
Licznik rozkazów |
||
ROL Rd | 0 ≤ d ≤ 31 | PC ← PC + k + 1 |
0001 |
11dd |
dddd |
dddd |
(Zobacz na ADC Rd,Rd)
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | – | X | X | X | X | X | X |
H: | Rd3 |
S: | N
V Dla testów liczb ze znakiem w kodzie U2 |
V: | N
C (Dla N i C po wykonaniu przesunięcia) |
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 Ustawiany, jeśli przed przesunięciem najstarszy bit Rd był ustawiony; w przeciwnym razie zerowany |
Wynik R (ang. Result) po operacji jest równy Rd.
lsl r18 ; Pomnóż r19:r18 przez dwa rol r19 ; r19:r18 jest liczbą całkowitą ze znakiem lub bez znaku brcs oneenc ; Skocz, jeśli ustawione przeniesienie ... oneenc: nop ; Miejsce docelowe skoku (nic nie rób) |
Działanie |
||||
Składnia |
Argumenty |
Licznik rozkazów |
||
ROR Rd | 0 ≤ d ≤ 31 | PC ← PC + k + 1 |
1001 |
010d |
dddd |
0111 |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
– | – | – | X | X | X | X | X |
S: | N
V Dla testów liczb ze znakiem w kodzie U2 |
V: | N
C (Dla N i C po wykonaniu przesunięcia) |
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: | Rd0 Ustawiany, jeśli przed przesunięciem najmłodszy bit Rd był ustawiony; w przeciwnym razie zerowany |
Wynik R (ang. Result) po operacji jest równy Rd.
lsr r19 ; Podziel r19:r18 przez dwa ror r18 ; r19:r18 jest dwubajtową liczbą całkowitą bez znaku brcc zeroenc1 ; Skocz, jeśli przeniesienie wyzerowane asr r17 ; Podziel r17:r16 przez dwa ror r16 ; r17:r16 jest dwubajtową liczbą całkowitą ze znakiem brcc zeroenc2 ; Skocz, jeśli przeniesienie wyzerowane ... zeroenc1: nop ; Miejsce docelowe skoku (nic nie rób) ... zeroenc2: nop ; Miejsce docelowe skoku (nic nie rób) ... |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2025 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:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.