Mikrokontroler ATmega32 Tryby adresowania Rejestry funkcyjne 1
Rozrónia si dwa główne tryby: adresowanie bezporednie i porednie (jeli jeden z argumentów jest stał, ma miejsce take adresowanie natychmiastowe) Przestrzenie adresowe pamici programu i danych s rozdzielone W przestrzeni pamici danych s umieszczone rejestry robocze i funkcyjne (I/O) 2
- przestrzenie adresowe Z punktu widzenia instrukcji transferu danych w architekturze AVR mona rozróni trzy przestrzenie adresowe: Przestrze pamici programu (spm, lpm) Przestrze pamici danych (ld, st, ) Przestrze wejcia-wyjcia (in, out) 3
- adresowanie pamici danych Adresowanie bezporednie Adres argumentu jest umieszczony bezporednio w kodzie instrukcji jest wartoci stał Wykorzystuj to instrukcje transferu danych: lds odczyt danej z pamici sts zapis danej do pamici Przykład: lds R0,0x006A ;ładuj rejestr R0 zawartoci ;komórki pamici SRAM o adr. 0x006A 4
- adresowanie pamici danych Adresowanie porednie Adres argumentu jest znajduje si w jednym z trzech 16-bitowych rejestrów indeksowych X, Y lub Z Wykorzystuj to instrukcje transferu danych: ld odczyt danej z pamici st zapis danej do pamici Przed uyciem tego trybu adresowania adres musi by zapisany do odpowiedniego ejestru indeksowego (pary rejestrów roboczych) Ten tryb adresowania wspiera uycie wskaników w jzykach wysokiego poziomu 5
- adresowanie pamici danych Adresowanie porednie Przykład: ldi XH, 0 ldi XL, 0x6A ld R0, X st X, R1 ;ładuj MSB adresu do rej. X ;ładuj LSB adresu do rej. X ;ładuj rejestr R0 zawartoci ;komórki pamici SRAM o adr. ;Zapisanym w X ;zapisz rejestr R1 w komórc pamici ;o tym samym adresie 6
- adresowanie pamici danych Adresowanie porednie z postinkrementacj Polega na zwikszeniu o jeden wartoci zapisanej w jednym z trzech rejestrów indeksowych X, Y lub Z po wykonaniu instrukcji transferu danych W asemblerze jest reprezentowane znakiem + po nazwie rejestru indeksowego Przyspiesza kopiowanie bloków pamici Przykład: ld R2, Y+ ;ładuj rejestr R2 zawartoci komórki pamici ;wskazywanej przez Y i przesu wskanik ;o jeden 7
- adresowanie pamici danych Adresowanie porednie z predekrementacj Polega na zmniejszeniu o jeden wartoci zapisanej w jednym z trzech rejestrów indeksowych X, Y lub Z przed wykonaniem instrukcji transferu danych W asemblerze jest reprezentowane znakiem - przed nazw rejestru indeksowego Przyspiesza kopiowanie bloków pamici Przykład: ld R0, -Z ; przesu wskanik Z o -1 i ładuj rejestr R0 ; zawartoci komórki pamici wskazywanej ; przez Z 8
- adresowanie pamici danych Adresowanie porednie z przemieszczeniem Adres jest wyznaczany przez dodanie do zawartoci rejestru indeksowego Y lub Z stałej z zakresu 0 63, zawarto samego rejestru nie ulega zmianie Wykorzystuj to instrukcje transferu danych: ldd odczyt danej z pamici std zapis danej do pamici Adres zapisany w rejestrze indeksowym jest traktowany jako adres bazowy, np. pocztek tablicy Przykład: std Y+5, R3 ; zapisz zawarto rejestru R3 ; do pitej komórki pamici powyej ; bazy wskazywanej przez rejestr Y 9
- adresowanie rejestrów roboczych Adres rejestru wyznacza jego nazwa odpowiada to adresowaniu implikowanemu w ogólnej klasyfikacji Przykład: clr R0 ;zeruj rejestr R0 W instrukcjach transferu dostp do rejestrów roboczych mona uzyska tak jak do komórek pamici (s wmapowane w przestrze pamici danych) 10
- adresowanie przestrzeni I/O Adresowanie rejestrów funkcyjnych urzdze wejcia-wyjcia jest moliwe na dwa sposoby: - jako adresowanie komórek pamici (rejestry s wmapowane w przestrze pamici danych) - przez bezporednie adresowanie w przestrzeni wejcia-wyjcia w instrukcjach in i out Drugi sposób adresowania pozwala na szybszy dostp do rejestru Adres rejestru funkcyjnego w przestrzeni pamici danych jest przesunity o 32 pozycje wzgldem jego adresu I/O, wynika to z mapowania rejestrów roboczych w tym zakresie adresów 11
- adresowanie przestrzeni I/O Przykład: in R0, SREG statusu lds R0, SREG+0x20 instrukcji ;ładuj rejestr R0 zawartoci rej. ;odpowiada poprzedniej 12
- adresowanie pamici programu Adresowanie stałych Jest uywane do odczytu stałych wartoci np. napisów, z pamici FLASH oraz przeprogramowywania tej pamici Wykorzystywany jest tutaj ryb adresowania poredniego (opcjonalnie z postinkrementacj) z uyciem rejestru Z Jest stosowane w instrukcjach: lpm odczyt z pamici programu spm zapis do pamici programu (element procesu programowania pamici) Podczas odczytu pami programu jest adresowana bajtowo adres stałej otrzymuje si przez pomnoenie adresu komórki pamici przez 2 i ew. dodanie 1 13
- adresowanie pamici programu Adresowanie stałych Przykład: ldi ZH, high(stala*2+1) ;ładuj MSB wskanika ;adresem stałej ldi ZL, low(stala*2) ;ładuj LSB wskanika ;adresem stałej lpm R0, Z ;ładuj rejestr R0 stał z pamici ;programu Stala:.dw 0x12AB ;deklaracja stałej 14
- adresowanie pamici programu Adresowanie skoków Dostpne s trzy tryby adresowania podczas skoków i wywoła podprogramów: 1. bezporedni 2. poredni 3. wzgldny 15
- adresowanie pamici programu Adresowanie bezporednie skoków i wywoła Adres docelowy jest podawany jako stała 16-bitowa w kodzie instrukcji jmp lub call Przykłady: jmp etykieta1 call pierwiastek ;wykonaj skok do miejsca ;oznaczonego etykiet ;wywołaj procedur pierwiastek Ten tryb adresowania pozwala na wykonanie skoku w obszarze 64kB pamici programu 16
- adresowanie pamici programu Adresowanie porednie skoków i wywoła Adres docelowy znajduje si w rejestrze indeksowym Z. Tryb jest wykorzystywany w instrukcjach ijmp oraz icall Przykłady: ldi ZH, high(potega) ldi ZL, low(potega) icall ;załaduj MSB adresu procedury ;załaduj LSB adresu procedury ;wywołaj procedur Ten tryb adresowania pozwala na tworzenie wskaników do funkcji i procedur w jzykach wysokiego poziomu 17
- adresowanie pamici programu Adresowanie wzgldne skoków i wywoła Adres docelowy jest wyznaczany przez dodanie stałej z zakresu -2048 2047 do aktualnej wartoci licznika programu w kodzie instrukcji rjmp lub rcall Przykłady: pierwiastek: rcall pierwiastek ;pocztek procedury ;wywołaj procedur pierwiastek Ograniczenie zakresu skoku do 2k słów powoduje, e nie zawsze mona uy tego trybu adresowania 18
Podstawowe rejestry funkcyjne Rejestr statusu SREG Stan bitów tego rejestru jest wynikiem ostatniej operacji wykonywanej przez ALU Wartoci poszczególnych bitów s warunkami wykonania skoków warunkowych Wywołanie poprogramu i przyjcie przerwania nie zapisuje na stosie tego rejestru (programista musi to wykona samodzielnie w procedurze) 19
Podstawowe rejestry funkcyjne Rejestr statusu SREG - nazwy bitów: 20
Podstawowe rejestry funkcyjne Znaczenie poszczególnych bitów rejestru SREG: Bit 7 I: globalne zezwolenie na przerwania Bit 6 T: podrczna pami w operacjach na bitach Bit 5 H: przeniesienie połówkowe Bit 4 S: bit znaku Bit 3 V: znacznik przekroczenia zakresu liczb U2 Bit 2 N: znacznik wartoci ujemnej w kodzie U2 Bit 1 Z: znacznik wartoci równej 0 Bit 0 C: znacznik przekroczenia zakresu liczb NBC 21
Podstawowe rejestry funkcyjne Wskanik stosu SPH:SPL Jest stosowany do adresowania pamici w obszarze stosu Jest wykorzystywany podczas: - odkładania danych na stos za pomoc instrukcji push i zdejmowania danych ze stosu za pomoc instrukcji pop - podczas wywoływania i powrotów z procedur Odkładanie danych lub wywołanie programu powoduje dekrementacj wskanika stosu (stos ronie w dół) 22