Język symboliczny
Transkrypt
Język symboliczny
Mikrokontroler ATmega32 Język symboliczny 1 Język symboliczny Język symboliczny (asembler) jest językiem niskiego poziomu - pozwala pisać programy złożone z instrukcji procesora. Kody instrukcji są reprezentowane nazwami symbolicznymi - mnemonikami 2 Język symboliczny - cechy Mnemoniczne nazwy operacji Operowanie symbolicznymi nazwami adresów danych i etykiet Możliwość stosowania makrooperacji Możliwość łatwiejszego modyfikowania programu 3 Język symboliczny - translator Zostanie omówiony translator języka symbolicznego AVR Assembler 2 dostępny w środowisku AVR Studio. W szczególności będą omówione następujące zagadnienia: Składnia linii programu Wyrażenia Dyrektywy Deklaracja zmiennych i stałych Makrooperacje Translacja warunkowa 4 Język symboliczny – cechy translatora Translator języka symbolicznego jest wyposażony w preprocesor tekstu, sterowany z pomocą dyrektyw preprocesora Translator nie rozpoznaje małych i wielkich znaków oprócz dyrektyw preprocesora Długość wiersza programu powinna się mieścić w 120 znakach (w przeciwnym przypadku tekst można przenosić do następnego wiersza z użyciem znaku kontynuacji „\\”) 5 Język symboliczny - składnia Możliwa składnia wiersza pliku źródłowego: [etykieta:] .dyrektywa [argument] [;komentarz] [etykieta:] instrukcja [argument] [;komentarz] [#dyrektywa_preprocesora] [argument] [//komentarz] [;komentarz] 6 Język symboliczny - wyrażenia Wyrażenia, na których operują instrukcje i dyrektywy, mogą być budowane z: Elementów prostych – stałych liczbowych Operatorów Funkcji Wartość wyrażenia jest obliczana w trakcie procesu asemblacji (jest stałą). 7 Język symboliczny - wyrażenia Elementy proste – liczby o rozdzielczości max. 64 bity: Wartości całkowite: dziesiętne (np. 255), szesnastkowe (0xFF, $FF), ósemkowe (075), binarne (0b00001001), znakowe (‘a’) Wartości zmiennoprzecinkowe (np. 3.14159) Etykiety, którym przyporządkowano pewien adres Etykiety zdefiniowane przez dyrektywy SET i EQU Skrót PC, któremu jest przyporządkowany adres instrukcji, której PC jest argumentem 8 Język symboliczny - wyrażenia Operatory – rozdzielają elementy proste i funkcje w wyrażeniu Rozróżnia się operatory arytmetyczne, logiczne i porównania Kolejność działań jest określona priorytetem operatora (można ją modyfikować przez użycie nawiasów), rozróżnia się 11 poziomów priorytetu 9 Język symboliczny - wyrażenia Zestawienie operatorów Symbol Opis Priorytet ! Negacja logiczna 11 ~ Negacja bitowa 11 - Negacja arytmetyczna 11 * Mnożenie arytmetyczne 10 / Dzielenie arytmetyczne 10 % Reszta z dzielenia 10 + Dodawanie arytmetyczne 9 - Odejmowanie arytmetyczne 9 << Przesunięcie logiczne w lewo 8 >> Przesunięcie logiczne w prawo 8 10 Język symboliczny - wyrażenia Zestawienie operatorów, cd. Symbol Opis Priorytet <, <=, >, >= Porównania (relacje większości, mniejszości) 7 ==, != Porównania (testy równości, braku równości) 6 & Mnożenie bitowe 5 ^ Suma bitowa modulo 2 4 | Suma bitowa 3 && Mnożenie logiczne 2 || Sumowanie logiczne 1 11 Język symboliczny - wyrażenia Funkcje pozwalają na przeprowadzenie operacji jednoargumenowych. Argument funkcji podaje się w nawiasach okrągłych. Zestawienie funkcji: low(), high(), byte2(), byte3(), byte4(), lword(), hword(), page(),abs(), exp2(), log2(), int(), frac(), q7(), q15(). 12 Język symboliczny - wyrażenia Przykłady wyrażeń w instrukcjach asemblera: Poczatek: ldi R16, low(500) ldi R17, high(Poczatek*2) ldi R18, (1<<2) | (1<<5) ldi R19, (log2(5)<3)*0x15 ;ładuj R16 młodszym bajtem wartości 500 ;ładuj R17 starszym bajtem dwukrotnie ;zwiększonego adresu ;ładuj R18 wartością 0b00100100 ;ładuj R19 wartością 0x15, jeśli log2(5)<3 13 Język symboliczny - dyrektywy asemblera Dyrektywy sterujące procesem asemblacji: .DEVICE typ_układu – informuje translator o typie mikrokontrolera .INCLUDE ”nazwa_pliku” – dołącza pliki biblioteczne .LIST – załącza generowanie listingu .NOLIST – wyłącza generowanie listingu .LISTMAC – załącza rozwijanie makr w listingu .EXIT – powoduje zakończenie asemblacji pliku źródłowego 14 Język symboliczny - dyrektywy asemblera Definicje: .EQU etykieta=wyrażenie – definiuje etykietę i przypisuje jej wartość liczbową bez możliwości jej modyfikacji .SET etykieta=wyrażenie – definiuje etykietę i przypisuje jej wartość liczbową z możliwości jej wielokrotnej modyfikacji za pomocą tej samej dyrektywy .DEF nazwa [= rejestr ] – przypisuje rejestrom roboczym nazwy symboliczne Przykłady: .EQU stala = 9 .SET zmienna = 10 … .SET zmienna = 11 .DEF akumulator = R16 15 Język symboliczny - dyrektywy asemblera Segmenty programu – określają rodzaj pamięci, na której aktualnie operujemy: .CSEG – pamięć programu .DSEG – pamięć danych .ESEG – pamięć EEPROM Możliwe jest przemieszczanie się w obszarze aktualnie wybranej pamięci za pomocą dyrektywy: .ORG wyrażenie 16 Język symboliczny - dyrektywy asemblera Zmienne w pamięci danych: .BYTE wyrażenie – rezerwuje pamięć danych na zmienną (w segmentcie .DSEG) w liczbie bajtów określonej wyrażeniem. Aby móc się odwołać do zmiennej dyrektywę należy poprzedzić etykietą. 17 Język symboliczny - dyrektywy asemblera Stałe w pamięci programu i EEPROM: .DB wyrażenie[, wyrażenie…] – rezerwuje pamięć programu lub EEPROM na stałą lub ciąg stałych podanych jako lista argumentów, w liczbie bajtów równej liczbie wyrażeń w liście. Aby móc się odwołać do stałej dyrektywę należy poprzedzić etykietą. Istnieją podobne dyrektywy dla słów o większym rozmiarze: .DW – słowo 16-bitowe, DD – 32, DQ – 64. Stałe wielobajtowe zapisane są w pamięci w formacie Little-Endian 18 Język symboliczny - dyrektywy asemblera Przykład użycia powyższych dyrektyw: .DSEG .ORG 0x0060 Zmienna1: .BYTE 2 Zmienna2: .BYTE 1 .ESEG Stale_E: .DB 134, 35, -30, 0xFF, 034 .CSEG .ORG 0x0000 rjmp Zerowanie .ORG 50 Zerowanie: … 19 Język symboliczny - dyrektywy asemblera Makra to struktury predefiniujące bloki programowe o zmiennych parametrach. Wywołanie makra powoduje, że translator zastępuje nazwę makra jego rozwinięciem z uwzględnieniem zadanych parametrów. Parametry są przekazywane przez konstrukcję: @numer_paramertu. Do makra można przekazać maksymalnie 10 parametrów. Makra mogą być zagnieżdżone. Składnia definicji makra: .MACRO nazwa_makra struktura makra .ENDMACRO 20 Język symboliczny - dyrektywy asemblera Przykład: .MACRO dodaj_16b add @0, @2 adc @1, @3 .ENDMACRO … dodaj_16 R0, R1, R16, R17 21 Język symboliczny - dyrektywy asemblera Translacja warunkowa jest wykorzystywana do wyłączania części kodu z procesu translacji, np. w plikach bibliotecznych lub programach wielowariantowych. Składnia: .IF wyrażenie – kontynuuje translację dalszych linii jeśli wyrażenie jest różne od 0 .ELIF wyrażenie – załącza translację aż do następnej dyr. .ELIF lub .ELSE .ELSE – załącza translację, jeśli żaden z powyższych warunków nie był spełniony .ENDIF – kończy translację warunkową 22 Język symboliczny - preprocesor Preprocesor funkcjonuje podobnie, jak preprocesor w języku C. Dyrektywy preprocesora zaczynają się od znaku # Dyrektywy preprocesora należy pisać od początku wiersza Przykłady dyrektyw preprocesora: #INCLUDE #DEFINE #IF … 23 Język symboliczny - pliki nagłówkowe Pliki nagłówkowe definiują wartości charakterystyczne dla danego mikrokontrolera: Adresów rejestrów funkcyjnych Numerów bitów w rejestrach funkcyjnych Adresów końca obszarów pamięci Wektorów przerwań Pliki nagłówkowe mają rozszerzenie ”.inc” i dołącza się je do kodu programu za pomocą dyrektywy .INCLUDE. 24