Serwis Edukacyjny
Nauczycieli
w I-LO w Tarnowie

Do strony głównej I LO w Tarnowie

Materiały dla uczniów liceum

  Wyjście       Spis treści       Poprzedni       Następny  

©2019 mgr Jerzy Wałaszek
I LO w Tarnowie

pic

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

 

 

Mikrokontrolery

Instrukcje mikrokontrolerów AVR

MOV ... ROR

Rozdziały artykułu:
Wstęp
Teoria
Warsztat
Elementy
Projekty
Mikrokontrolery
    ATtiny4/5/9/10
    ATtiny11/12
    ATtiny13
    ATtiny15
    INSTRUKCJE AVR
        Informacje wstępne
        A
        B
        C
        D E F I J
        L
        M N O P R
        S T W
Zawartość:
MOV – Kopiowanie rejestru
MOVW – Kopiowanie pary rejestrów
MUL – Mnożenie bezznakowe
MULS – Mnożenie znakowe
MULSU – Mnożenie liczby ze znakiem przez liczbę bez znaku
NEG – Negacja arytmetyczna U2
NOP – Brak operacji
OR – Alternatywa logiczna
ORI – Alternatywa logiczna ze stałą
OUT – Zapis rejestru do komórki we/wy
POP – Pobranie rejestru ze stosu
PUSH – Zapis rejestru na stos
RCALL – Względne wywołanie podprogramu
RET – Powrót z podprogramu
RETI – Powrót z przerwania
RJMP – Skok względny
ROL – Obrót w lewo poprzez przeniesienie
ROR – Obrót w prawo poprzez przeniesienie

Educational and Non-Profit Use ofCopyrighted 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

MOV – Copy Register – Kopiowanie rejestru

Opis

Ta instrukcja wykonuje kopię zawartości jednego rejestru w innym rejestrze. Rejestr źródłowy Rr jest pozostawiany bez zmian, natomiast do rejestru docelowego Rd ładowana jest kopia zawartości rejestru Rr.

Działanie

                 
Rd ← Rr  

Składnia

 

Argumenty

 

Licznik rozkazów

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

16-bitowy kod instrukcji

0010
11rd
dddd
rrrr

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
       ...
check: cpi r16,$11 ; Porównaj r16 z $11
       ...
       ret         ; Wróć z podprogramu

Liczba słów: 1 (2 bajty)

Cykle: 1

 

MOVW – Copy Register Word – Kopiowanie pary rejestrów

Opis

Ta instrukcja tworzy kopię zawartości jednej pary rejestrów w innej parze rejestrów. Para rejestrów źródłowych Rr+1:Rr pozostawiana jest bez zmian, natomiast para rejestrów docelowych Rd+1:Rd ładowana jest kopią zawartości Rr + 1:Rr.

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

16-bitowy kod instrukcji

0000
0001
dddd
rrrr

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

       movw r17:16,r1:r0 ; Kopiuj r1:r0 do r17:r16
       call check        ; Wywołaj podprogram
       ...
check: cpi r16,$11       ; Porównaj r16 z $11
       ...
       cpi r17,$32       ; Porównaj r17 z $32
       ...
       ret               ; Wróć z podprogramu

Liczba słów: 1 (2 bajty)

Cykle: 1

 

MUL – Multiply Unsigned – Mnożenie bezznakowe

Opis

Instrukcja wykonuje mnożenie liczb bez znaku 8-bitów × 8-bitów → 16-bitów.

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

16-bitowy kod instrukcji

1001
11rd
dddd
rrrr

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  
X X
Z: R15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0
Ustawiany, jeśli wynik wynosi $0000; 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.

Przykładowy kod:

mul r5,r4  ; Pomnóż bezznakowo r5 i r4
movw r4,r0 ; Skopiuj wynik z powrotem do r5:r4

Liczba słów: 1 (2 bajty)

Cykle: 2

 

MULS – Multiply Signed – Mnożenie znakowe

Opis

Instrukcja wykonuje mnożenie liczb ze znakiem 8-bitów × 8-bitów → 16-bitów.

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

16-bitowy kod instrukcji

0000
0010
dddd
rrrr

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  
X X
Z: R15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0
Ustawiany, jeśli wynik wynosi $0000; 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.

Przykładowy kod:

muls r21,r20 ; Pomnóż bezznakowo r21 i r20
movw r20,r0  ; Skopiuj wynik z powrotem do r21:r20

Liczba słów: 1 (2 bajty)

Cykle: 2

 

MULSU – Multiply Signed with Unsigned – Mnożenie liczby ze znakiem przez liczbę bez znaku

Opis

Instrukcja wykonuje mnożenie liczby ze znakiem przez liczbę bez znaku 8-bitów × 8-bitów → 16-bitów.

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

16-bitowy kod instrukcji

0000
0011
0ddd
0rrr

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  
X X
Z: R15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0
Ustawiany, jeśli wynik wynosi $0000; 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.

Przykładowy kod:

;******************************************************************************
;* 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

Liczba słów: 1 (2 bajty)

Cykle: 2

 

NEG – Two’s Complement – Negacja arytmetyczna U2

Opis

Zastępuje zawartość rejestru Rd jej negacją arytmetyczną U2; wartość $80 jest pozostawiana bez zmian.

Działanie

                 
Rd ← $00 - Rd

Składnia

 

Argumenty

 

Licznik rozkazów

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

16-bitowy kod instrukcji

1001
010d
0ddd
0001

Zmiany znaczników w rejestrze stanu (SREG)

   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•R6R5R4R3R2R1R0
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 $80.
N: R7
Ustawiany, jeśli najstarszy bit wyniku jest ustawiony; zerowany w przypadku przeciwnym.
Z: R7R6R5R4R3R2R1R0
Ustawiany, jeśli wynikiem jest $00; 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 $00.

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

Przykładowy kod:

          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)

Liczba słów: 1 (2 bajty)

Cykle: 1

 

NOP – No Operation – Brak operacji

Opis

Instrukcja wykonuje jeden pusty cykl bez żadnej operacji.

 

Działanie

                 
brak

Składnia

 

Argumenty

 

Licznik rozkazów

NOP   brak   PC ← PC + 1

16-bitowy kod instrukcji

0000
0000
0000
0000

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

clr r16     ; Zeruj r16
ser r17     ; Ustaw r17
out $18,r16 ; Zapisz zera do portu B
nop         ; Czekaj 1 cykl (nic nie rób)
out $18,r17 ; Zapisz jedynki do portu B

Liczba słów: 1 (2 bajty)

Cykle: 1

 

OR – Logical OR – Alternatywa logiczna

Opis

Wykonuje operację alternatywy logicznej (LUB) pomiędzy zawartością rejestru Rd a zawartością rejestru Rr i umieszcza wynik w rejestrze docelowym Rd.

Działanie

                 
Rd ← Rd v Rr

Składnia

 

Argumenty

 

Licznik rozkazów

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

16-bitowy kod instrukcji

0010
10rd
dddd
rrrr

Zmiany znaczników w rejestrze stanu (SREG)

   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: R7R6R5R4R3R2R1R0
Ustawiany, jeśli wynikiem jest $00; zerowany w przypadku przeciwnym.

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

Przykładowy kod:

    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)

Liczba słów: 1 (2 bajty)

Cykle: 1

 

ORI – Logical OR with Immediate – Alternatywa logiczna ze stałą

Opis

Wykonuje operację alternatywy logicznej (LUB) pomiędzy zawartością rejestru Rd a zawartością stałej K i umieszcza wynik w rejestrze docelowym Rd.

Działanie

                 
Rd ← Rd v K

Składnia

 

Argumenty

 

Licznik rozkazów

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

16-bitowy kod instrukcji

0110
KKKK
dddd
KKKK

Zmiany znaczników w rejestrze stanu (SREG)

   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: R7R6R5R4R3R2R1R0
Ustawiany, jeśli wynikiem jest $00; zerowany w przypadku przeciwnym.

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

Przykładowy kod:

ori r16,$F0 ; Ustaw górne 4 bity w r16
ori r17,1   ; Ustaw bit 0 w r17

Liczba słów: 1 (2 bajty)

Cykle: 1

 

OUT – Store Register to I/O Location – Zapis rejestru do komórki we/wy

Opis

Umieszcza dane z rejestru Rr w zestawie rejestrów w obszarze we/wy (Porty, Timery, Rejestry Konfiguracyjne, itp.).

Działanie

                 
I/O(A) ← Rr

Składnia

 

Argumenty

 

Licznik rozkazów

OUT A,Rr   0 ≤ r ≤ 31, 0 ≤ A ≤ 63   PC ← PC + 1

16-bitowy kod instrukcji

1011
1AAr
rrrr
AAAA

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

clr r16     ; Zeruj r16
ser r17     ; Ustaw r17
out $18,r16 ; Zapisz zera do portu B
nop         ; Czekaj 1 cykl (nic nie rób)
out $18,r17 ; Zapisz jedynki do portu B

Liczba słów: 1 (2 bajty)

Cykle: 1

 

POP – Pop Register from Stack – Pobranie rejestru ze stosu

Opis

Instrukcja ładuje rejestr Rd bajtem ze stosu. Wskaźnik stosu jest zwiększany o 1 przed operacją POP.

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

16-bitowy kod instrukcji

1001
000d
dddd
1111

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

         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

Liczba słów: 1 (2 bajty)

Cykle: 2

 

PUSH – Push Register on Stack – Zapis rejestru na stos

Opis

Instrukcja umieszcza zawartość rejestru Rr na stosie. Wskaźnik stosu jest zmniejszany o 1 po operacji PUSH.

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

16-bitowy kod instrukcji

1001
001r
rrrr
1111

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

         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

Liczba słów: 1 (2 bajty)

Cykle: 2

 

RCALL – Relative Call to Subroutine – Względne wywołanie podprogramu

Opis

Względne wywołanie podprogramu umieszczonego pod adresem pomiędzy PC - 2K + 1 a PC + 2K (słów). Adres powrotny (instrukcji następnej za RCALL) jest umieszczany na stosie. (Zobacz również opis CALL). W języku asemblera zamiast adresów względnych stosowane są etykiety. Dla mikrokontrolerów AVR z pamięcią programu nie przekraczającą 4K słów (8KB) instrukcja ta może zaadresować cały obszar pamięci z każdego jej punktu. Wskaźnik stosu stosuje schemat postdekrementacji (późniejszego zmniejszania o 1) podczas RCALL.
 

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)

16-bitowy kod instrukcji

1101
kkkk
kkkk
kkkk

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

         rcall routine ; Wywołaj podprogram
         ...
routine: push r14      ; Zachowaj r14 na stosie
         ...
         pop r14       ; Przywróć r14
         ret           ; Powróć z podprogramu

Liczba słów: 1 (2 bajty)

Cykle: 

3 Mikrokontrolery z 16-bitowymi PC
4 Mikrokontrolery z 22-bitowymi PC

 

RET – Return from Subroutine – Powrót z podprogramu

Opis

Powraca z podprogramu. Adres powrotu jest pobierany ze stosu. Wskaźnik stosu używa schematu preinkrementacji (wcześniejszego zwiększenia o 1) podczas RET.
 

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)

16-bitowy kod instrukcji

1001
0101
0000
1000

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

         call routine ; Wywołaj podprogram
         ...
routine: push r14     ; Zachowaj r14 na stosie
         ...
         pop r14      ; Przywróć r14
         ret          ; Powróć z podprogramu

Liczba słów: 1 (2 bajty)

Cykle: 

4 Mikrokontrolery z 16-bitowymi PC
5 Mikrokontrolery z 22-bitowymi PC

 

RETI – Return from Interrupt – Powrót z przerwania

Opis

Powraca z przerwania. Adres powrotny zostaje pobrany ze stosu, a znacznik przerwań globalnych jest ustawiany.

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)

16-bitowy kod instrukcji

1001
0101
0001
1000

Zmiany znaczników w rejestrze stanu (SREG)

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

Przykładowy kod:

        ...
extint: push r0 ; Zachowaj r0 na stosie
        ...
        pop r0  ; Odtwórz r0
        reti    ; Wróć i uaktywnij przerwania

Liczba słów: 1 (2 bajty)

Cykle: 

4 Mikrokontrolery z 16-bitowymi PC
5 Mikrokontrolery z 22-bitowymi PC

 

RJMP – Relative Jump – Skok względny

Opis

Skok względny pod adres pomiędzy PC - 2K +1 a PC + 2K (słów). W języku asemblera zamiast adresów względnych stosowane są etykiety. Dla mikrokontrolerów AVR z pamięcią programu nie przekraczającą 4K słów (8KB) instrukcja ta może zaadresować cały obszar pamięci z każdego jej punktu.

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

16-bitowy kod instrukcji

1100
kkkk
kkkk
kkkk

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

       cpi r16,$42 ; Porównaj r16 z $42
       brne error  ; Skocz, jeśli r16 <> $42
       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)

Liczba słów: 1 (2 bajty)

Cykle: 2

 

ROL – Rotate Left trough Carry – Obrót w lewo poprzez przeniesienie

Opis

Przesuwa wszystkie bity w Rd o jedną pozycję w lewo. Znacznik C jest przesuwany do bitu 0 w Rd. Bit 7 jest przesuwany do znacznika przeniesienia C. Ta operacja połączona z LSL umożliwia mnożenie przez 2 wielobajtowych wartości ze znakiem i bez znaku.

Działanie

                 

Składnia

 

Argumenty

 

Licznik rozkazów

ROL Rd   0 ≤ d ≤ 31   PC ← PC + k + 1

16-bitowy kod instrukcji

0001
11dd
dddd
dddd

(Zobacz na ADC Rd,Rd)

Zmiany znaczników w rejestrze stanu (SREG)

   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: R7R6R5R4R3R2R1R0
Ustawiany, jeśli wynik wynosi $00; 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.

Przykładowy kod:

        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)

Liczba słów: 1 (2 bajty)

Cykle: 1

 

ROR – Rotate Right through Carry – Obrót w prawo poprzez przeniesienie

Opis

Przesuwa wszystkie bity w Rd o jedną pozycję w prawo. Znacznik C jest przesuwany do bitu 7 w Rd. Bit 0 jest przesuwany do znacznika C. Ta operacja w połączeniu z ASR pozwala dzielić wielobajtowe liczby ze znakiem przez 2. W połączeniu z LSR pozwala dzielić przez 2 wielobajtowe liczby bez znaku. Znacznik przeniesienia może zostać wykorzystany do zaokrąglania wyniku.

Działanie

                 

Składnia

 

Argumenty

 

Licznik rozkazów

ROR Rd   0 ≤ d ≤ 31   PC ← PC + k + 1

16-bitowy kod instrukcji

1001
010d
dddd
0111

Zmiany znaczników w rejestrze stanu (SREG)

   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: R7R6R5R4R3R2R1R0
Ustawiany, jeśli wynik wynosi $00; 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.

Przykładowy kod:

          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)
          ...

Liczba słów: 1 (2 bajty)

Cykle: 1

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2019 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.