|
Wyjście Spis treści Wstecz Dalej
Autor artykułu |
©2026 mgr Jerzy Wałaszek
|

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:
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines
Komórka z danymi jest wskazywana przez rejestr wskaźnikowy X (16 bitów) w zestawie rejestrów. Dostęp do pamięci ograniczony jest do bieżącego segmentu danych o rozmiarze 64 KB. Aby uzyskać dostęp do innego segmentu danych w mikrokontrolerach posiadających przestrzeń danych o rozmiarze większym od 64 KB, należy zmienić zawartość rejestru RAMPX w obszarze we/wy.
Rejestr wskaźnikowy X może albo pozostać niezmieniony przez operację, albo może poddany postinkrementacji (zwiększeniu o 1 po operacji) lub predekrementacji (zmniejszeniu o 1 przed operacją). Te cechy nadają się szczególnie do dostępu do ciągów, tablic i używania rejestru X w charakterze wskaźnika stosu.. Zwróć uwagę, że w mikrokontrolerach posiadających nie więcej niż 256 bajtów przestrzeni danych modyfikacji ulega tylko młodszy bajt wskaźnika X. W takich urządzeniach starszy bajt wskaźnika nie jest używany przez tę instrukcję i może zostać wykorzystany do innych celów. Rejestr RAMPX w obszarze we/wy jest modyfikowany w mikrokontrolerach z przestrzenią danych większą niż 64KB lub pamięcią programu większą niż 64KB, a zwiększenie/zmniejszenie o 1 odnosi się do całego 24-bitowego adresu na takich urządzeniach.
Nie wszystkie warianty tej instrukcji dostępne są we wszystkich mikrokontrolerach. Sprawdź listę instrukcji konkretnego modelu.
Wynik tych kombinacji argumentów jest niezdefiniowany:
LD r26, X+ LD r27, X+ LD r26, -X LD r27, -X |
Działanie |
Komentarz |
||||
| (i) (ii) (iii) |
Rd ← (X) Rd ← (X) X ← X + 1 X ← X - 1 Rd ← (X) |
X: niezmieniany X: postinkrementacja X: predekrementacja |
|||
Składnia |
Argumenty |
Licznik rozkazów |
|||
| (i) (ii) (iii) |
LD Rd, X LD Rd, X+ LD Rd, -X |
0 ≤ d ≤ 31 0 ≤ d ≤ 31 0 ≤ d ≤ 31 |
PC ← PC + 1 PC ← PC + 1 PC ← PC + 1 |
||
(i) |
1001 |
000d |
dddd |
1100 |
(ii) |
1001 |
000d |
dddd |
1101 |
(iii) |
1001 |
000d |
dddd |
1110 |
| I | T | H | S | V | N | Z | C |
|---|---|---|---|---|---|---|---|
| – | – | – | – | – | – | – | – |
clr r27 ; Zeruj starszy bajt rejestru X ldi r26,0x60 ; Ustaw młodszy bajt X na 0x60 ld r0,X+ ; Załaduj do r0 dane spod adresu 0x60(X postinkrementowany) ld r1,X ; Załaduj do r1 dane spod adresu 0x61 ldi r26,0x63 ; Ustaw młodszy bajt X na 0x63 ld r2,X ; Załaduj do r2 dane spod adresu 0x63 ld r3,–X ; Załaduj do r3 dane spod adresu 0x62(X predekrementowany) |
Komórka z danymi jest wskazywana przez rejestr wskaźnikowy Y (16 bitów) w zestawie rejestrów. Dostęp do pamięci ograniczony jest do bieżącego segmentu danych o rozmiarze 64 KB. Aby uzyskać dostęp do innego segmentu danych w mikrokontrolerach posiadających przestrzeń danych o rozmiarze większym od 64 KB, należy zmienić zawartość rejestru RAMPY w obszarze we/wy.
Rejestr wskaźnikowy Y może albo pozostać niezmieniony przez operację, albo może poddany postinkrementacji (zwiększeniu o 1 po operacji) lub predekrementacji (zmniejszeniu o 1 przed operacją). Te cechy nadają się szczególnie do dostępu do ciągów, tablic i używania rejestru Y w charakterze wskaźnika stosu.. Zwróć uwagę, że w mikrokontrolerach posiadających nie więcej niż 256 bajtów przestrzeni danych modyfikacji ulega tylko młodszy bajt wskaźnika Y. W takich urządzeniach starszy bajt wskaźnika nie jest używany przez tę instrukcję i może zostać wykorzystany do innych celów. Rejestr RAMPY w obszarze we/wy jest modyfikowany w mikrokontrolerach z przestrzenią danych większą niż 64KB lub pamięcią programu większą niż 64KB, a zwiększenie/zmniejszenie o 1 odnosi się do całego 24-bitowego adresu na takich urządzeniach.
Nie wszystkie warianty tej instrukcji dostępne są we wszystkich mikrokontrolerach. Sprawdź listę instrukcji konkretnego modelu.
Wynik tych kombinacji argumentów jest niezdefiniowany:
LD r28, Y+ LD r29, Y+ LD r28, -Y LD r29, -Y |
Działanie |
Komentarz |
||||
| (i) (ii) (iii) (iiii) |
Rd ← (Y) Rd ← (Y) Y ← Y + 1 Y ← Y - 1 Rd ← (Y) Rd ← (Y+q) |
Y: niezmieniany Y: postinkrementacja Y: predekrementacja Y: niezmieniany, q: przesunięcie |
|||
Składnia |
Argumenty |
Licznik rozkazów |
|||
| (i) (ii) (iii) (iiii) |
LD Rd, Y LD Rd, Y+ LD Rd, -Y LDD Rd, Y+q |
0 ≤ d ≤ 31 0 ≤ d ≤ 31 0 ≤ d ≤ 31 0 ≤ d ≤ 31, 0 ≤ q ≤ 63 |
PC ← PC + 1 PC ← PC + 1 PC ← PC + 1 PC ← PC + 1 |
||
(i) |
1000 |
000d |
dddd |
1000 |
(ii) |
1001 |
000d |
dddd |
1001 |
(iii) |
1001 |
000d |
dddd |
1010 |
(iiii)
|
10q0 |
qq0d |
dddd |
1qqq |
| I | T | H | S | V | N | Z | C |
|---|---|---|---|---|---|---|---|
| – | – | – | – | – | – | – | – |
clr r29 ; Zeruj starszy bajt Y ldi r28,0x60 ; Ustaw młodszy bajt Y na 0x60 ld r0,Y+ ; Załaduj do r0 dane spod adresu 0x60 (Y postinkrementowany) ld r1,Y ; Załaduj do r1 dane spod adresu 0x61 ldi r28,0x63 ; Ustaw młodszy bajt Y na 0x63 ld r2,Y ; Załaduj do r2 dane spod adresu 0x63 ld r3,-Y ; Załaduj do r3 dane spod adresu 0x62 (Y predekrementowany) ldd r4,Y+2 ; Załaduj do r4 dane spod adresu 0x64 |
Komórka z danymi jest wskazywana przez rejestr wskaźnikowy Z (16 bitów) w zestawie rejestrów. Dostęp do pamięci ograniczony jest do bieżącego segmentu danych o rozmiarze 64 KB. Aby uzyskać dostęp do innego segmentu danych w mikrokontrolerach posiadających przestrzeń danych o rozmiarze większym od 64 KB, należy zmienić zawartość rejestru RAMPZ w obszarze we/wy.
Rejestr wskaźnikowy Z może albo pozostać niezmieniony przez operację, albo może poddany postinkrementacji (zwiększeniu o 1 po operacji) lub predekrementacji (zmniejszeniu o 1 przed operacją). Te cechy nadają się szczególnie do dostępu do ciągów, tablic i używania rejestru Z w charakterze wskaźnika stosu.. Zwróć uwagę, że w mikrokontrolerach posiadających nie więcej niż 256 bajtów przestrzeni danych modyfikacji ulega tylko młodszy bajt wskaźnika Z. W takich urządzeniach starszy bajt wskaźnika nie jest używany przez tę instrukcję i może zostać wykorzystany do innych celów. Rejestr RAMPZ w obszarze we/wy jest modyfikowany w mikrokontrolerach z przestrzenią danych większą niż 64KB lub pamięcią programu większą niż 64KB, a zwiększenie/zmniejszenie o 1 odnosi się do całego 24-bitowego adresu na takich urządzeniach.
Nie wszystkie warianty tej instrukcji dostępne są we wszystkich mikrokontrolerach. Sprawdź listę instrukcji konkretnego modelu.
Informację o użyciu rejestru Z do adresowania tablic ze stałymi w pamięci programu znajdziesz w opisie instrukcji LPM i ELPM.
Wynik tych kombinacji argumentów jest niezdefiniowany:
LD r30, Z+ LD r31, Z+ LD r30, -Z LD r31, -Z |
Działanie |
Komentarz |
||||
| (i) (ii) (iii) (iiii) |
Rd ← (Z) Rd ← (Z) Z ← Z + 1 Z ← Z - 1 Rd ← (Z) Rd ← (Z+q) |
Z: niezmieniany Z: postinkrementacja Z: predekrementacja Z: niezmieniany, q: przesunięcie |
|||
Składnia |
Argumenty |
Licznik rozkazów |
|||
| (i) (ii) (iii) (iiii) |
LD Rd, Z LD Rd, Z+ LD Rd, -Z LDD Rd, Z+q |
0 ≤ d ≤ 31 0 ≤ d ≤ 31 0 ≤ d ≤ 31 0 ≤ d ≤ 31, 0 ≤ q ≤ 63 |
PC ← PC + 1 PC ← PC + 1 PC ← PC + 1 PC ← PC + 1 |
||
(i) |
1000 |
000d |
dddd |
0000 |
(ii) |
1001 |
000d |
dddd |
0001 |
(iii) |
1001 |
000d |
dddd |
0010 |
(iiii)
|
10q0 |
qq0d |
dddd |
0qqq |
| I | T | H | S | V | N | Z | C |
|---|---|---|---|---|---|---|---|
| – | – | – | – | – | – | – | – |
clr r31 ; Zeruj starszy bajt Z ldi r30,0x60 ; Ustaw młodszy bajt Z na 0x60 ld r0,Z+ ; Załaduj do r0 dane spod adresu 0x60 (z postinkrementowany) ld r1,Z ; Załaduj do r1 dane spod adresu 0x61 ldi r30,0x63 ; Ustaw młodszy bajt Z na 0x63 ld r2,Z ; Załaduj do r2 dane spod adresu 0x63 ld r3,-Z ; Załaduj do r3 dane spod adresu 0x62 (Z predekrementowany) ldd r4,Z+2 ; Załaduj do r4 dane spod adresu 0x64 |
Działanie |
||||
| Rd ← K | ||||
Składnia |
Argumenty |
Licznik rozkazów |
||
| LDI Rd,K | 16 ≤ d ≤ 31, 0 ≤ K ≤ 255 | PC ← PC + 1 | ||
1110 |
KKKK |
dddd |
KKKK |
| I | T | H | S | V | N | Z | C |
|---|---|---|---|---|---|---|---|
| – | – | – | – | – | – | – | – |
clr r31 ; Zeruj starszy bajt Z
ldi r30,0xF0 ; Ustaw młodszy bajt na 0xF0
lpm ; Załaduj stałą z pamięci programu
; wskazaną przez Z
|
Musi być dostarczony 16-bitowy adres. Dostęp do pamięci jest ograniczony do bieżącego segmentu danych o rozmiarze 64KB. Instrukcja LDS wykorzystuje rejestr RAMPD w obszarze we/wy, zatem dostęp do innych partii pamięci wymaga zmiany zawartości tego rejestru.
Ta instrukcja nie jest dostępna dla wszystkich mikrokontrolerów. Sprawdź listę instrukcji konkretnego modelu.
Działanie |
||||
| Rd ← (k) | ||||
Składnia |
Argumenty |
Licznik rozkazów |
||
| LDS Rd,k | 0 ≤ d ≤ 31, 0 ≤ k ≤ 65535 | PC ← PC + 2 | ||
1001 |
000d |
dddd |
0000 |
kkkk |
kkkk |
kkkk |
kkkk |
| I | T | H | S | V | N | Z | C |
|---|---|---|---|---|---|---|---|
| – | – | – | – | – | – | – | – |
lds r2,0xFF00 ; Ładuj r2 zawartością dane spod adresu 0xFF00 add r2,r1 ; dodaj r1 do r2 sts 0xFF00,r2 ; Zapisz z powrotem wynik |
Mikrokontrolery z możliwością samoprogramowania mogą wykorzystywać instrukcję LPM do odczytu wartości bitów bezpiecznikowych (ang. fuse bits) oraz bitów blokujących (ang. lock bits). Dokładny opis znajdziesz w instrukcji dla twojego mikrokontrolera.
Nie wszystkie warianty instrukcji LPM są dostępne dla
wszystkich mikrokontrolerów. Sprawdź listę instrukcji
swojego egzemplarza. Instrukcja LPM nie jest w ogóle
zaimplementowana w mikrokontrolerze AT90S1200.
Wynik poniższych kombinacji jest niezdefiniowany:
LPM r30, Z+ LPM r31, Z+ |
Działanie |
Komentarz |
||||
| (i) (ii) (iii) |
R0 ← (Z) R0 ← (Z) R0 ← (Z) Z ← Z + 1 |
Z: niezmieniany, R0 jest domyślnym
rejestrem docelowym Z: niezmieniany Z: zwiększany o 1 po pobraniu danej |
|||
Składnia |
Argumenty |
Licznik rozkazów |
|||
| (i) (ii) (iii) |
LPM LPM Rd, Z LPM Rd, Z+ |
żaden, domyślnie R0 0 ≤ d ≤ 31 0 ≤ d ≤ 31 |
PC ← PC + 1 PC ← PC + 1 PC ← PC + 1 |
||
(i)
|
1001 |
0101 |
1100 |
1000 |
(ii)
|
1001 |
000d |
dddd |
0100 |
(iii)
|
1001 |
000d |
dddd |
0101 |
| I | T | H | S | V | N | Z | C |
|---|---|---|---|---|---|---|---|
| – | – | – | – | – | – | – | – |
ldi ZH, high(Table_1<<1) ; Inicjuj wskaźnik Z ldi ZL, low(Table_1<<1) lpm r16, Z ; Załaduj stałą z pamięci programu ; wskazywaną przez rejestr Z (r31:r30) ... Table_1: .dw 0x5876 ; 0x76 jest adresowane, gdy ZLSB = 0 ; 0x58 jest adresowane, gdy ZLSB = 1 ... |
Działanie |
||||
![]() |
||||
Składnia |
Argumenty |
Licznik rozkazów |
||
| LSL Rd | 0 ≤ d ≤ 31 | PC ← PC + 1 | ||
0000 |
11dd |
dddd |
dddd |
Zobacz na instrukcję ADD Rd,Rd.
| I | T | H | S | V | N | Z | C |
|---|---|---|---|---|---|---|---|
| – | – | X | X | X | X | X | X |
| H: | Rd3 |
| S: | N
Dla testów liczb ze znakiem w kodzie U2 |
| V: | N
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.
add r0,r4 ; Dodaj r4 do r0 lsl r0 ; Pomnóż r0 przez 2 |
Działanie |
||||
![]() |
||||
Składnia |
Argumenty |
Licznik rozkazów |
||
| LSR Rd | 0 ≤ d ≤ 31 | PC ← PC + 1 | ||
1001 |
010d |
dddd |
0110 |
| I | T | H | S | V | N | Z | C |
|---|---|---|---|---|---|---|---|
| – | – | – | X | X | 0 | X | X |
| S: | N
Dla testów liczb ze znakiem w kodzie U2 |
| V: | N
Dla N i C po wykonaniu przesunięcia |
| N: | 0 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.
add r0,r4 ; Dodaj r4 do r0 lsr r0 ; Podziel r0 przez 2 |
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2026 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.