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

B

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

BCLRBit Clear in SREG – Zerowanie bitu w SREG

Opis

Zeruje pojedynczy znacznik w rejestrze stanu SREG.

Działanie

                 
SREG(s) ← 0

Składnia

 

Argumenty

 

Licznik rozkazów

BCLR s   0 ≤ s ≤7   PC ← PC + 1

16-bitowy kod instrukcji

1001
0100
1sss
1000

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  
X X X X X X X X
I: 0, jeśli s = 7; w przeciwnym wypadku bez zmian
T: 0, jeśli s = 6; w przeciwnym wypadku bez zmian
H: 0, jeśli s = 5; w przeciwnym wypadku bez zmian
S: 0, jeśli s = 4; w przeciwnym wypadku bez zmian
V: 0, jeśli s = 3; w przeciwnym wypadku bez zmian
N: 0, jeśli s = 2; w przeciwnym wypadku bez zmian
Z: 0, jeśli s = 1; w przeciwnym wypadku bez zmian
C: 0, jeśli s = 0; w przeciwnym wypadku bez zmian

Przykładowy kod:

bclr 0 ; Zeruj znacznik przeniesienia
bclr 7 ; Wyłącz przerwania

Liczba słów: 1 (2 bajty)

Cykle: 1

Na początek:  podrozdziału   strony 

BLDBit Load from the T Flag in SREG to a Bit in Register – Ładowanie bitu ze znacznika T w SREG do bitu w rejestrze

Opis

Kopiuje znacznik T w SREG (rejestr stanu) do bitu b w rejestrze Rd.

Działanie

                 
Rd(b) ← T

Składnia

 

Argumenty

 

Licznik rozkazów

BLD Rd,b   0 ≤ d ≤ 31, 0 ≤ b ≤7   PC ← PC + 1

16-bitowy kod instrukcji

1111
100d
dddd
0bbb

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

         ; Kopiuj bit
bst r1,2 ; Umieść bit 2 z r1 w znaczniku T
bld r0,4 ; Załaduj znacznik T do bitu 4 w r0

Liczba słów: 1 (2 bajty)

Cykle: 1

Na początek:  podrozdziału   strony 

BRBCBranch if Bit in SREG is Cleared – Skok warunkowy przy wyzerowanym bicie w SREG

Opis

Warunkowy skok względny. Testuje pojedynczy bit w rejestrze stanu SREG i skacze względem licznika rozkazów PC, jeśli testowany bit jest wyzerowany. Instrukcja ta powoduje skok względem licznika rozkazów PC w obu kierunkach (PC - 63 ≤ adres docelowy ≤ PC + 64). Parametr k jest przesunięciem od adresu w PC i kodowany jest w U2.

Działanie

                 
Jeśli SREG(s) = 0, to PC ← PC + k + 1, inaczej PC ← PC + 1

Składnia

 

Argumenty

 

Licznik rozkazów

BRBC s,k   0 ≤ s ≤ 7, -64 ≤ k ≤ +63   PC ← PC + k + 1, jeśli warunek prawdziwy
PC ← PC + 1, jeśli warunek fałszywy

16-bitowy kod instrukcji

1111
01kk
kkkk
ksss

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

        cpi r20,5    ; Porównaj r20 z wartością 5
        brbc 1,noteq ; Skocz, jeśli znacznik zera wyzerowany
        ...
noteq:  nop          ; Adres docelowy skoku (nic nie rób) 

Liczba słów: 1 (2 bajty)

Cykle: 1, jeśli warunek fałszywy; 2, jeśli warunek prawdziwy

Na początek:  podrozdziału   strony 

BRBSBranch if Bit in SREG is Set – Skok warunkowy przy ustawionym bicie w SREG

Opis

Warunkowy skok względny. Testuje pojedynczy bit w rejestrze stanu SREG i skacze względem licznika rozkazów PC, jeśli testowany bit jest ustawiony. Instrukcja ta powoduje skok względem licznika rozkazów PC w obu kierunkach (PC - 63 ≤ adres docelowy ≤ PC + 64). Parametr k jest przesunięciem od adresu w PC i kodowany jest w U2.

Działanie

                 
Jeśli SREG(s) = 1, to PC ← PC + k + 1, inaczej PC ← PC + 1

Składnia

 

Argumenty

 

Licznik rozkazów

BRBS s,k   0 ≤ s ≤ 7, -64 ≤ k ≤ +63   PC ← PC + k + 1, jeśli warunek prawdziwy
PC ← PC + 1, jeśli warunek fałszywy

16-bitowy kod instrukcji

1111
00kk
kkkk
ksss

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

        bst r0,3      ; Załaduj bit T bitem 3 z r0
        brbs 6,bitset ; Skocz, jeśli bit T był ustawiony
        ...
bitset: nop           ; Miejsce docelowe skoku (nic nie rób) 

Liczba słów: 1 (2 bajty)

Cykle: 1, jeśli warunek fałszywy; 2, jeśli warunek prawdziwy

Na początek:  podrozdziału   strony 

BRCCBranch if Carry Cleared – Skok warunkowy przy braku przeniesienia

Opis

Warunkowy skok względny. Testuje znacznik przeniesienia C w rejestrze stanu SREG i skacze względem licznika rozkazów PC, jeśli znacznik C jest wyzerowany (brak przeniesienia). Instrukcja ta powoduje skok względem licznika rozkazów PC w obu kierunkach (PC - 63 ≤ adres docelowy ≤ PC + 64). Parametr k jest przesunięciem od adresu w PC i kodowany jest w U2. (Ekwiwalent instrukcji BRBC 0,k).

Działanie

                 
Jeśli C = 0, to PC ← PC + k + 1, inaczej PC ← PC + 1

Składnia

 

Argumenty

 

Licznik rozkazów

BRCC k   -64 ≤ k ≤ +63   PC ← PC + k + 1, jeśli warunek prawdziwy
PC ← PC + 1, jeśli warunek fałszywy

16-bitowy kod instrukcji

1111
01kk
kkkk
k000

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

         add r22,r23  ; Dodaj r23 do r22
         brcc nocarry ; Skocz przy braku przeniesienia
         ...
nocarry: nop          ; Miejsce docelowe skoku (nic nie rób) 

Liczba słów: 1 (2 bajty)

Cykle: 1, jeśli warunek fałszywy; 2, jeśli warunek prawdziwy

Na początek:  podrozdziału   strony 

BRCSBranch if Carry Set – Skok warunkowy przy przeniesieniu

Opis

Warunkowy skok względny. Testuje znacznik przeniesienia C w rejestrze stanu SREG i skacze względem licznika rozkazów PC, jeśli znacznik C jest ustawiony (obecność przeniesienia). Instrukcja ta powoduje skok względem licznika rozkazów PC w obu kierunkach (PC - 63 ≤ adres docelowy ≤ PC + 64). Parametr k jest przesunięciem od adresu w PC i kodowany jest w U2. (Ekwiwalent instrukcji BRBS 0,k).
 

Działanie

                 
Jeśli C = 1, to PC ← PC + k + 1, inaczej PC ← PC + 1

Składnia

 

Argumenty

 

Licznik rozkazów

BRCS k   -64 ≤ k ≤ +63   PC ← PC + k + 1, jeśli warunek prawdziwy
PC ← PC + 1, jeśli warunek fałszywy

16-bitowy kod instrukcji

1111
00kk
kkkk
k000

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

       cpi r26,0x56 ; Porównaj r26 ze stałą 0x56
       brcs carry  ; Skocz przy przeniesieniu
       ...
carry: nop         ; Miejsce docelowe skoku (nic nie rób) 

Liczba słów: 1 (2 bajty)

Cykle: 1, jeśli warunek fałszywy; 2, jeśli warunek prawdziwy

Na początek:  podrozdziału   strony 

BREAKBreak – Przerwa

Opis

Instrukcja BREAK używana jest przez zintegrowany system uruchomieniowy (ang. On-Chip Debugger) i zwykle nie korzysta się z niej w aplikacji końcowej. Gdy zostanie wykonana instrukcja BREAK, mikroprocesor mikrokontrolera przechodzi w tryb zatrzymania (ang. Stopped Mode). Pozwala to zintegrowanemu debuggerowi na dostęp do wewnętrznych zasobów.

Jeśli jest ustawiony jakikolwiek bit blokujący lub nie został zaprogramowany bit bezpiecznikowy JTAGEN ani OCDEN, to mikroprocesor będzie traktował instrukcję BREAK jak instrukcję NOP i nie wejdzie w tryb zatrzymania.

Instrukcja ta nie jest dostępna na wszystkich mikrokontrolerach AVR. Sprawdź w danych technicznych konkretnego mikrokontrolera.

Działanie

                 
Przerwa dla zintegrowanego systemu uruchomieniowego

Składnia

 

Argumenty

 

Licznik rozkazów

BREAK   brak   PC ← PC + 1

16-bitowy kod instrukcji

1001
0101
1001
1000

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Liczba słów: 1 (2 bajty)

Cykle: 1

Na początek:  podrozdziału   strony 

BREQBranch if Equal – Skok warunkowy, gdy równe

Opis

Warunkowy skok względny. Testuje znacznik zera Z w SREG i skacze względem licznika rozkazów PC, jeśli Z jest ustawiony na 1. Jeśli ta instrukcja zostanie wykonana bezpośrednio po jednej z instrukcji CP, CPI, SUB lub SUBI, to skok będzie wykonany wtedy i tylko wtedy gdy liczba binarna bez znaku lub ze znakiem w rejestrze Rd była równa liczbie binarnej ze lub bez znaku w rejestrze Rr. Instrukcja skacze względem PC w obu kierunkach (PC - 63 ≤ adres docelowy ≤ PC + 64). Parametr k jest przesunięciem od PC i jest liczbą ze znakiem w kodzie U2. (Ekwiwalent instrukcji BRBS 1,k).

Działanie

                 
Jeśli Z = 1, to PC ← PC + k + 1, inaczej PC ← PC + 1

Składnia

 

Argumenty

 

Licznik rozkazów

BREQ k   -64 ≤ k ≤ +63   PC ← PC + k + 1, jeśli warunek prawdziwy
PC ← PC + 1, jeśli warunek fałszywy

16-bitowy kod instrukcji

1111
00kk
kkkk
k001

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

       cp r1,r0   ; Porównaj rejestry r1 i r0
       breq equal ; Skocz, jeśli rejestry są równe
       ...
equal: nop        ; Miejsce docelowe skoku (nic nie rób) 

Liczba słów: 1 (2 bajty)

Cykle: 1, jeśli warunek fałszywy; 2, jeśli warunek prawdziwy

Na początek:  podrozdziału   strony 

BRGEBranch if Greater or Equal (Signed) – Skok warunkowy, gdy większe lub równe (liczby ze znakiem)

Opis

Warunkowy skok względny. Testuje znacznik znaku S w SREG i skacze względem licznika rozkazów PC, jeśli S jest wyzerowany. Jeśli ta instrukcja zostanie wykonana bezpośrednio po jednej z instrukcji CP, CPI, SUB lub SUBI, to skok będzie wykonany wtedy i tylko wtedy gdy liczba binarna ze znakiem w rejestrze Rd była większa lub równa liczbie binarnej ze znakiem w rejestrze Rr. Instrukcja skacze względem PC w obu kierunkach (PC - 63 ≤ adres docelowy ≤ PC + 64). Parametr k jest przesunięciem od PC i jest liczbą ze znakiem w kodzie U2. (Ekwiwalent instrukcji BRBC 4,k).

Działanie

                 
Jeśli S = 0, to PC ← PC + k + 1, inaczej PC ← PC + 1

Składnia

 

Argumenty

 

Licznik rozkazów

BRGE k   -64 ≤ k ≤ +63   PC ← PC + k + 1, jeśli warunek prawdziwy
PC ← PC + 1, jeśli warunek fałszywy

16-bitowy kod instrukcji

1111
01kk
kkkk
k100

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

         cp r11,r12   ; Porównaj rejestry r11 i r12
         brge greateq ; Skocz, jeśli r11 ≥ r12 (ze znakiem) 
         ...
greateq: nop          ; Miejsce docelowe skoku (nic nie rób) 

Liczba słów: 1 (2 bajty)

Cykle: 1, jeśli warunek fałszywy; 2, jeśli warunek prawdziwy

Na początek:  podrozdziału   strony 

BRHCBranch if Half Carry Flag is Cleared – Skok warunkowy przy wyzerowanym znaczniku przeniesienia połówkowego

Opis

Warunkowy skok względny. Testuje znacznik przeniesienia połówkowego H w SREG i skacze względem licznika rozkazów PC, jeśli H jest wyzerowany. Instrukcja skacze względem PC w obu kierunkach (PC - 63 ≤ adres docelowy ≤ PC + 64). Parametr k jest przesunięciem od PC i jest liczbą ze znakiem w kodzie U2. (Ekwiwalent instrukcji BRBC 5,k).

Działanie

                 
Jeśli H = 0, to PC ← PC + k + 1, inaczej PC ← PC + 1

Składnia

 

Argumenty

 

Licznik rozkazów

BRHC k   -64 ≤ k ≤ +63   PC ← PC + k + 1, jeśli warunek prawdziwy
PC ← PC + 1, jeśli warunek fałszywy

16-bitowy kod instrukcji

1111
01kk
kkkk
k101

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

        brhc hclear ; Skocz, jeśli przeniesienie połówkowe wyzerowane
        ...
hclear: nop         ; Miejsce docelowe skoku (nic nie rób) 

Liczba słów: 1 (2 bajty)

Cykle: 1, jeśli warunek fałszywy; 2, jeśli warunek prawdziwy

Na początek:  podrozdziału   strony 

BRHSBranch if Half Carry Flag is Set – Skok warunkowy przy ustawionym znaczniku przeniesienia połówkowego

Opis

Warunkowy skok względny. Testuje znacznik przeniesienia połówkowego H w SREG i skacze względem licznika rozkazów PC, jeśli H jest ustawiony na 1.Instrukcja skacze względem PC w obu kierunkach (PC - 63 ≤ adres docelowy ≤ PC + 64). Parametr k jest przesunięciem od PC i jest liczbą ze znakiem w kodzie U2. (Ekwiwalent instrukcji BRBC 5,k).

Działanie

                 
Jeśli H = 1, to PC ← PC + k + 1, inaczej PC ← PC + 1

Składnia

 

Argumenty

 

Licznik rozkazów

BRHS k   -64 ≤ k ≤ +63   PC ← PC + k + 1, jeśli warunek prawdziwy
PC ← PC + 1, jeśli warunek fałszywy

16-bitowy kod instrukcji

1111
00kk
kkkk
k101

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

      brhs hset ; Skocz, jeśli przeniesienie połówkowe ustawione
      ...
hset: nop       ; Miejsce docelowe skoku (nic nie rób) 

Liczba słów: 1 (2 bajty)

Cykle: 1, jeśli warunek fałszywy; 2, jeśli warunek prawdziwy

Na początek:  podrozdziału   strony 

BRIDBranch if Global Interrupt is Disabled – Skok warunkowy przy wyłączonych przerwaniach

Opis

Warunkowy skok względny. Testuje znacznik globalnego uaktywniania przerwań I w SREG i skacze względem licznika rozkazów PC, jeśli I jest wyzerowane. Instrukcja skacze względem PC w obu kierunkach (PC - 63 ≤ adres docelowy ≤ PC + 64). Parametr k jest przesunięciem od PC i jest liczbą ze znakiem w kodzie U2. (Ekwiwalent instrukcji BRBC 7,k).

Działanie

                 
Jeśli I = 0, to PC ← PC + k + 1, inaczej PC ← PC + 1

Składnia

 

Argumenty

 

Licznik rozkazów

BRID k   -64 ≤ k ≤ +63   PC ← PC + k + 1, jeśli warunek prawdziwy
PC ← PC + 1, jeśli warunek fałszywy

16-bitowy kod instrukcji

1111
01kk
kkkk
k111

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

        brid intdis ; Skocz, jeśli przerwania są wyłączone
        ...
intdis: nop         ; Miejsce docelowe skoku (nic nie rób) 

Liczba słów: 1 (2 bajty)

Cykle: 1, jeśli warunek fałszywy; 2, jeśli warunek prawdziwy

Na początek:  podrozdziału   strony 

BRIEBranch if Global Interrupt is Enabled – Skok warunkowy przy włączonych przerwaniach

Opis

Warunkowy skok względny. Testuje znacznik globalnego uaktywniania przerwań I w SREG i skacze względem licznika rozkazów PC, jeśli I jest ustawione na 1. Instrukcja skacze względem PC w obu kierunkach (PC - 63 ≤ adres docelowy ≤ PC + 64). Parametr k jest przesunięciem od PC i jest liczbą ze znakiem w kodzie U2. (Ekwiwalent instrukcji BRBS 7,k).

Działanie

                 
Jeśli I = 1, to PC ← PC + k + 1, inaczej PC ← PC + 1

Składnia

 

Argumenty

 

Licznik rozkazów

BRIE k   -64 ≤ k ≤ +63   PC ← PC + k + 1, jeśli warunek prawdziwy
PC ← PC + 1, jeśli warunek fałszywy

16-bitowy kod instrukcji

1111
00kk
kkkk
k111

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

      brie inten ; Skocz, jeśli przerwania są włączone
      ...
inten: nop       ; Miejsce docelowe skoku (nic nie rób) 

Liczba słów: 1 (2 bajty)

Cykle: 1, jeśli warunek fałszywy; 2, jeśli warunek prawdziwy

Na początek:  podrozdziału   strony 

BRLOBranch if Lower (Unsigned) – Skok warunkowy, gdy poniżej (bez znaku)

Opis

Warunkowy skok względny. Testuje znacznik przeniesienia C w SREG i skacze względem licznika rozkazów PC, jeśli C jest ustawione na 1. Jeśli ta instrukcja zostanie wykonana bezpośrednio po jednej z instrukcji CP, CPI, SUB lub SUBI, to skok będzie wykonany wtedy i tylko wtedy gdy liczba binarna bez znaku w rejestrze Rd była mniejsza od liczby binarnej bez znaku w rejestrze Rr. Instrukcja skacze względem PC w obu kierunkach (PC - 63 ≤ adres docelowy ≤ PC + 64). Parametr k jest przesunięciem od PC i jest liczbą ze znakiem w kodzie U2. (Ekwiwalent instrukcji BRBS 0,k).

Działanie

                 
Jeśli C = 1, to PC ← PC + k + 1, inaczej PC ← PC + 1

Składnia

 

Argumenty

 

Licznik rozkazów

BRLO k   -64 ≤ k ≤ +63   PC ← PC + k + 1, jeśli warunek prawdziwy
PC ← PC + 1, jeśli warunek fałszywy

16-bitowy kod instrukcji

1111
00kk
kkkk
k000

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

      eor r19,r19 ; Zeruj r19
loop: inc r19     ; Zwiększ r19
      ...
      cpi r19,0x10 ; Porównaj r19 z 0x10
      brlo loop   ; Skocz, jeśli r19 < 0x10 (bez znaku) 
      nop         ; Wyjdź z pętli (nic nie rób) 

Liczba słów: 1 (2 bajty)

Cykle: 1, jeśli warunek fałszywy; 2, jeśli warunek prawdziwy

Na początek:  podrozdziału   strony 

BRLTBranch if Less Than (Signed) – Skok warunkowy, gdy mniejsze niż (ze znakiem)

Opis

Warunkowy skok względny. Testuje znacznik znaku S w SREG i skacze względem licznika rozkazów PC, jeśli S jest ustawione na 1. Jeśli ta instrukcja zostanie wykonana bezpośrednio po jednej z instrukcji CP, CPI, SUB lub SUBI, to skok będzie wykonany wtedy i tylko wtedy gdy liczba binarna ze znakiem w rejestrze Rd była mniejsza od liczby binarnej ze znakiem w rejestrze Rr. Instrukcja skacze względem PC w obu kierunkach (PC - 63 ≤ adres docelowy ≤ PC + 64). Parametr k jest przesunięciem od PC i jest liczbą ze znakiem w kodzie U2. (Ekwiwalent instrukcji BRBS 4,k).

Działanie

                 
Jeśli S = 1, to PC ← PC + k + 1, inaczej PC ← PC + 1

Składnia

 

Argumenty

 

Licznik rozkazów

BRLT k   -64 ≤ k ≤ +63   PC ← PC + k + 1, jeśli warunek prawdziwy
PC ← PC + 1, jeśli warunek fałszywy

16-bitowy kod instrukcji

1111
00kk
kkkk
k100

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

      cp   r16,r1 ; Porównaj r16 z r1
      brlt less   ; Skocz, jeśli r16 < r1 (ze znakiem) 
      ...
less: nop         ; Miejsce docelowe skoku (nic nie rób) 

Liczba słów: 1 (2 bajty)

Cykle: 1, jeśli warunek fałszywy; 2, jeśli warunek prawdziwy

Na początek:  podrozdziału   strony 

BRMIBranch if Minus – Skok warunkowy przy minusie

Opis

Warunkowy skok względny. Testuje znacznik liczby ujemnej N w SREG i skacze względem licznika rozkazów PC, jeśli N jest ustawione na 1. Instrukcja skacze względem PC w obu kierunkach (PC - 63 ≤ adres docelowy ≤ PC + 64). Parametr k jest przesunięciem od PC i jest liczbą ze znakiem w kodzie U2. (Ekwiwalent instrukcji BRBS 2,k).

Działanie

                 
Jeśli N = 1, to PC ← PC + k + 1, inaczej PC ← PC + 1

Składnia

 

Argumenty

 

Licznik rozkazów

BRMI k   -64 ≤ k ≤ +63   PC ← PC + k + 1, jeśli warunek prawdziwy
PC ← PC + 1, jeśli warunek fałszywy

16-bitowy kod instrukcji

1111
00kk
kkkk
k010

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

          subi r18,4    ; Odejmij 4 od r18
          brmi negative ; Skocz, jeśli wynik ujemny
          ...
negative: nop           ; Miejsce docelowe skoku (nic nie rób) 

Liczba słów: 1 (2 bajty)

Cykle: 1, jeśli warunek fałszywy; 2, jeśli warunek prawdziwy

Na początek:  podrozdziału   strony 

BRNEBranch if Not Equal – Skok warunkowy, jeśli różne

Opis

Warunkowy skok względny. Testuje znacznik zera Z w SREG i skacze względem licznika rozkazów PC, jeśli Z jest wyzerowane. Jeśli ta instrukcja zostanie wykonana bezpośrednio po jednej z instrukcji CP, CPI, SUB lub SUBI, to skok będzie wykonany wtedy i tylko wtedy gdy liczba binarna ze znakiem lub bez znaku w rejestrze Rd była różna od liczby binarnej ze znakiem lub bez znaku w rejestrze Rr. Instrukcja skacze względem PC w obu kierunkach (PC - 63 ≤ adres docelowy ≤ PC + 64). Parametr k jest przesunięciem od PC i jest liczbą ze znakiem w kodzie U2. (Ekwiwalent instrukcji BRBC 1,k).

Działanie

                 
Jeśli Z = 0, to PC ← PC + k + 1, inaczej PC ← PC + 1

Składnia

 

Argumenty

 

Licznik rozkazów

BRNE k   -64 ≤ k ≤ +63   PC ← PC + k + 1, jeśli warunek prawdziwy
PC ← PC + 1, jeśli warunek fałszywy

16-bitowy kod instrukcji

1111
01kk
kkkk
k001

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

      eor r27,r27 ; Zeruj r27
loop: inc r27     ; Zwiększaj r27 o 1
      ...
      cpi r27,5   ; Porównaj r27 z 5
      brne loop   ; Skocz, jeśli r27 <> 5
      nop         ; Wyjście z pętli (nic nie rób) 

Liczba słów: 1 (2 bajty)

Cykle: 1, jeśli warunek fałszywy; 2, jeśli warunek prawdziwy

Na początek:  podrozdziału   strony 

BRPLBranch if Plus – Skok warunkowy przy plusie

Opis

Warunkowy skok względny. Testuje znacznik liczby ujemnej N w SREG i skacze względem licznika rozkazów PC, jeśli N jest wyzerowane. Instrukcja skacze względem PC w obu kierunkach (PC - 63 ≤ adres docelowy ≤ PC + 64). Parametr k jest przesunięciem od PC i jest liczbą ze znakiem w kodzie U2. (Ekwiwalent instrukcji BRBC 2,k).

Działanie

                 
Jeśli N = 0, to PC ← PC + k + 1, inaczej PC ← PC + 1

Składnia

 

Argumenty

 

Licznik rozkazów

BRPL k   -64 ≤ k ≤ +63   PC ← PC + k + 1, jeśli warunek prawdziwy
PC ← PC + 1, jeśli warunek fałszywy

16-bitowy kod instrukcji

1111
01kk
kkkk
k010

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

          subi r26,0x50  ; Odejmij 0x50 od r26
          brpl positive ; skocz, jeśli r26 jest dodatni
          ...
positive: nop           ; Miejsce docelowe skoku (nic nie rób) 

Liczba słów: 1 (2 bajty)

Cykle: 1, jeśli warunek fałszywy; 2, jeśli warunek prawdziwy

Na początek:  podrozdziału   strony 

BRSHBranch if Same or Higher (Unsigned) – Skok względny, gdy większe lub równe (bez znaku)

Opis

Warunkowy skok względny. Testuje znacznik przeniesienia C w SREG i skacze względem licznika rozkazów PC, jeśli C jest wyzerowane. Jeśli ta instrukcja zostanie wykonana bezpośrednio po jednej z instrukcji CP, CPI, SUB lub SUBI, to skok będzie wykonany wtedy i tylko wtedy gdy liczba binarna bez znaku w rejestrze Rd była większa lub równa liczbie binarnej bez znaku w rejestrze Rr. Instrukcja skacze względem PC w obu kierunkach (PC - 63 ≤ adres docelowy ≤ PC + 64). Parametr k jest przesunięciem od PC i jest liczbą ze znakiem w kodzie U2. (Ekwiwalent instrukcji BRBC 0,k).

Działanie

                 
Jeśli C = 0, to PC ← PC + k + 1, inaczej PC ← PC + 1

Składnia

 

Argumenty

 

Licznik rozkazów

BRSH k   -64 ≤ k ≤ +63   PC ← PC + k + 1, jeśli warunek prawdziwy
PC ← PC + 1, jeśli warunek fałszywy

16-bitowy kod instrukcji

1111
01kk
kkkk
k000

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

        subi r19,4  ; Odejmij 4 od r19
        brsh highsm ; Skocz, jeśli r19 >= 4 (bez znaku) 
        ...
highsm: nop         ; Miejsce docelowe skoku (nic nie rób) 

Liczba słów: 1 (2 bajty)

Cykle: 1, jeśli warunek fałszywy; 2, jeśli warunek prawdziwy

Na początek:  podrozdziału   strony 

BRTCBranch if the T Flag is Cleared – Skok warunkowy, jeśli T jest wyzerowane

Opis

Warunkowy skok względny. Testuje znacznik T w SREG i skacze względem licznika rozkazów PC, jeśli T jest wyzerowane. Instrukcja skacze względem PC w obu kierunkach (PC - 63 ≤ adres docelowy ≤ PC + 64). Parametr k jest przesunięciem od PC i jest liczbą ze znakiem w kodzie U2. (Ekwiwalent instrukcji BRBC 6,k).

Działanie

                 
Jeśli T = 0, to PC ← PC + k + 1, inaczej PC ← PC + 1

Składnia

 

Argumenty

 

Licznik rozkazów

BRTC k   -64 ≤ k ≤ +63   PC ← PC + k + 1, jeśli warunek prawdziwy
PC ← PC + 1, jeśli warunek fałszywy

16-bitowy kod instrukcji

1111
01kk
kkkk
k110

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

        bst r3,5    ; Zapisz bit 5 z r3 w znaczniku T
        brtc tclear ; Skocz, jeśli bit ten był wyzerowany
        ...
tclear: nop         ; Miejsce docelowe skoku (nic nie rób) 

Liczba słów: 1 (2 bajty)

Cykle: 1, jeśli warunek fałszywy; 2, jeśli warunek prawdziwy

Na początek:  podrozdziału   strony 

BRTSBranch if the T Flag is Set – Skok warunkowy, jeśli T ustawione

Opis

Warunkowy skok względny. Testuje znacznik T w SREG i skacze względem licznika rozkazów PC, jeśli T jest ustawione. Instrukcja skacze względem PC w obu kierunkach (PC - 63 ≤ adres docelowy ≤ PC + 64). Parametr k jest przesunięciem od PC i jest liczbą ze znakiem w kodzie U2. (Ekwiwalent instrukcji BRBS 6,k).

Działanie

                 
Jeśli T = 1, to PC ← PC + k + 1, inaczej PC ← PC + 1

Składnia

 

Argumenty

 

Licznik rozkazów

BRTS k   -64 ≤ k ≤ +63   PC ← PC + k + 1, jeśli warunek prawdziwy
PC ← PC + 1, jeśli warunek fałszywy

16-bitowy kod instrukcji

1111
00kk
kkkk
k110

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

      bst r3,5    ; Zapisz bit 5 z r3 w znaczniku T
      brts tclear ; Skocz, jeśli bit ten był ustawiony
      ...
tset: nop         ; Miejsce docelowe skoku (nic nie rób) 

Liczba słów: 1 (2 bajty)

Cykle: 1, jeśli warunek fałszywy; 2, jeśli warunek prawdziwy

Na początek:  podrozdziału   strony 

BRVCBranch if Overflow Cleared – Skok warunkowy przy braku nadmiaru

Opis

Warunkowy skok względny. Testuje znacznik  nadmiaru V w SREG i skacze względem licznika rozkazów PC, jeśli V jest wyzerowane. Instrukcja skacze względem PC w obu kierunkach (PC - 63 ≤ adres docelowy ≤ PC + 64). Parametr k jest przesunięciem od PC i jest liczbą ze znakiem w kodzie U2. (Ekwiwalent instrukcji BRBC 3,k).

Działanie

                 
Jeśli V = 0, to PC ← PC + k + 1, inaczej PC ← PC + 1

Składnia

 

Argumenty

 

Licznik rozkazów

BRVC k   -64 ≤ k ≤ +63   PC ← PC + k + 1, jeśli warunek prawdziwy
PC ← PC + 1, jeśli warunek fałszywy

16-bitowy kod instrukcji

1111
01kk
kkkk
k011

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

        add r3,r4   ; Dodaj r4 do r3
        brvc noover ; Skocz przy braku nadmiaru
        ...
noover: nop         ; Miejsce docelowe skoku (nic nie rób) 

Liczba słów: 1 (2 bajty)

Cykle: 1, jeśli warunek fałszywy; 2, jeśli warunek prawdziwy

Na początek:  podrozdziału   strony 

BRVSBranch if Overflow Set – Skok warunkowy przy nadmiarze

Opis

Warunkowy skok względny. Testuje znacznik  nadmiaru V w SREG i skacze względem licznika rozkazów PC, jeśli V jest ustawione. Instrukcja skacze względem PC w obu kierunkach (PC - 63 ≤ adres docelowy ≤ PC + 64). Parametr k jest przesunięciem od PC i jest liczbą ze znakiem w kodzie U2. (Ekwiwalent instrukcji BRBS 3,k).

Działanie

                 
Jeśli V = 1, to PC ← PC + k + 1, inaczej PC ← PC + 1

Składnia

 

Argumenty

 

Licznik rozkazów

BRVC k   -64 ≤ k ≤ +63   PC ← PC + k + 1, jeśli warunek prawdziwy
PC ← PC + 1, jeśli warunek fałszywy

16-bitowy kod instrukcji

1111
00kk
kkkk
k011

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  

Przykładowy kod:

        add r3,r4   ; Dodaj r4 do r3
        brvs overfl ; Skocz przy nadmiarze
        ...
overfl: nop         ; Miejsce docelowe skoku (nic nie rób) 

Liczba słów: 1 (2 bajty)

Cykle: 1, jeśli warunek fałszywy; 2, jeśli warunek prawdziwy

Na początek:  podrozdziału   strony 

BSETBit Set in SREG – Ustawianie bitu w SREG

Opis

Ustawia pojedynczy znacznik w SREG.

Działanie

                 
SREG(s) ← 1

Składnia

 

Argumenty

 

Licznik rozkazów

BSET s   0 ≤ s ≤7   PC ← PC + k + 1, jeśli warunek prawdziwy
PC ← PC + 1, jeśli warunek fałszywy

16-bitowy kod instrukcji

1001
0100
0sss
1000

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  
X X X X X X X X
I: 1, jeśli s = 7; w przeciwnym wypadku bez zmian
T: 1, jeśli s = 6; w przeciwnym wypadku bez zmian
H: 1, jeśli s = 5; w przeciwnym wypadku bez zmian
S: 1, jeśli s = 4; w przeciwnym wypadku bez zmian
V: 1, jeśli s = 3; w przeciwnym wypadku bez zmian
N: 1, jeśli s = 2; w przeciwnym wypadku bez zmian
Z: 1, jeśli s = 1; w przeciwnym wypadku bez zmian
C: 1, jeśli s = 0; w przeciwnym wypadku bez zmian

Przykładowy kod:

bset 6 ; Ustaw znacznik T
bset 7 ; Włącz przerwania

Liczba słów: 1 (2 bajty)

Cykle: 1, jeśli warunek fałszywy; 2, jeśli warunek prawdziwy

Na początek:  podrozdziału   strony 

BSTBit Store from Bit in Register to T Flag in SREG – Zapisanie bitu z rejestru w znaczniku T

Opis

Umieszcza bit b z rejestru Rd w znaczniku T rejestru stanu SREG.

Działanie

                 
T ← Rd(b)

Składnia

 

Argumenty

 

Licznik rozkazów

BST Rd,b   0 ≤ d ≤ 31, 0 ≤ b ≤7   PC ← PC + k + 1, jeśli warunek prawdziwy
PC ← PC + 1, jeśli warunek fałszywy

16-bitowy kod instrukcji

1111
101d
dddd
0bbb

Zmiany znaczników w rejestrze stanu (SREG)

   I     T     H     S     V     N     Z     C  
X
T: 0, jeśli bit b w Rd jest wyzerowany; w przeciwnym wypadku ustawiany na 1.

Przykładowy kod:

         ; Kopiuj bit
bst r1,2 ; Zapisz bit 2 z r1 w znaczniku T
bld r0,4 ; Załaduj znacznik T do bitu 4 w r0

Liczba słów: 1 (2 bajty)

Cykle: 1, jeśli warunek fałszywy; 2, jeśli warunek prawdziwy

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.