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 |
©2024 mgr Jerzy Wałaszek
|
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
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.
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
V Dla testów liczb ze znakiem w kodzie U2 |
V: | N
C 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 ©2024 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.