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