Upload
others
View
7
Download
0
Embed Size (px)
Citation preview
Wstępdo assemblera MA51Ryszard J. Barczyński, 2018Politechnika Gdańska, Wydział FTiMS, Katedra Fizyki Ciała StałegoMateriały dydaktyczne do użytku wewnętrznego
Assembler
● Assembler to język programowania charakteryzujący się tym, że● ... jedna instrukcja assemblera jest tłumaczona na jeden rozkaz procesora● ... możliwy jest bezpośredni dostęp do wszystkich zasobów systemu● ... praktycznie każda architektura procesora posiada własny assembler● Assemblery zwykle pracują we współpracy z linkerami, bibliotekarzami itp.● Assemblery zwykle często posiadają wbudowane generatory makrodefinicji
Assembler (proces tworzenia programu)
Assembler(wiersze)
● Program w assemblerze składa się z wierszy.● Wiersz może pełnić rolę● ... instrukcji● ... dyrektyw (wpływają na utworzony kod)● ... dyrektyw sterujących (wpływają na przykład na formaty listingu)● Każdy wiersz może być zakończony komentarzem● Komentarz rozpoczyna się znakiem “;”● Pusty wiersz jest ignorowany (może zawierać komentarz).
Assembler(słowa kluczowe)
● Słowa kluczowe to symbole używane przez assembler do specjalnych celów● Słowa zwykle nie mogą być przedefiniowywane i używane w innym celu● Typowo w skład słów kluczowych wchodzą● ... mnemoniki instrukcji (MOX, XOR, itp)● ... symbole dyrektyw (ORG, DB, DS, itp)● ... (niekiedy) symbole elementów architektury procesora (A, B, IDATA, itd)● ... inne symbole (ELSE, GT, LT itp)
Assembler(symbole)
● Symbol jest w zasadzie nazwą wielkości numerycznej● Symbole mogą zawierać litery, cyfry i znaki “$”, “ _” i “?”● Symbole nie mogą zaczynać się od cyfry● Wielkość liter zwykle jest ignorowana (uwaga !)● Długość symbolu jest dowolna, ale● ... assemblery zwykle analizują pewną liczbą początkowych znaków● Symbol “$” ma znaczenie specjalne i oznacza adres aktualnej instrukcji● Symbole są określone w całym tekście programu (wieloprzebiegowość)
Assembler (etykiety)
● Etykieta jest symbolem oznaczającym określone miejsce w programie● Etykieta może się odnosić do:● ... kodu programu● ... pamięci danych (wewnętrznej i zewnętrznej)● ... stałej w kodzie programu
składniamoja_etykieta:
Assembler (operandy)
● Operandy to argumenty instrukcji i dyrektyw.● Operandy mogą być podzielona na● ... operandy numeryczne, znakowe i łańcuchy znaków● ... wskaźnik adresu ($)● ... rejestry (również takie jak C czy DPTR)
Assembler (operandy numeryczne, znakowe, łańcuchy)
● Operandy numeryczne● ... rozpoczynają się od cyfry.● ... mogą zawierać ostatnią literę oznaczającą bazę (B, H, O, D)● Operandy znakowe zawierają jeden lub dwa znaki ASCII umieszczone w ' ' ● Łańcuch znakowy to napis ograniczony ' '● ... może być umieszczony tylko w dyrektywie DB
Assembler (wyrażenia numeryczne)
● W miejscu operandów numerycznych mogą wystąpić wyrażenia.● Wyrażenia są obliczane przez assembler w trakcie assemblacji.● Wyrażenie jest kombinacja operandów i operatorów.● Wyrażenie może dać w wyniku symbol relokowalny.● Uwaga na zakresy wielkości liczbowych !!!● W wielu assemblerach nie należy traktować zbyt poważnie kolejności działań
Assembler (operatory arytmetyczne)
● + (dodawanie exp + exp)● - (odejmowanie exp - exp)● * (mnożenie exp * exp)● / (dzielenie exp / exp)● MOD (reszta exp MOD exp)
Assembler (operatory porównania)
● GTE lub >= (np. exp >= exp)● GT lub > (np. exp GT exp)● LTE lub <= (np. exp LTE exp)● LT lub < (np. exp LT exp)● EQ lub = (np. exp EQ exp)● NE (np. exp NE exp)
Assembler (operatory przesunięcia)
● SHR (exp SHR exp)● SHL (exp SHL exp)
Assembler (operatory logiczne)
● AND (exp AND exp)● OR (exp OR exp)● XOR (exp XOR exp)
Assembler (operatory unarne)
● +● -● NOT (bitowe)● LOW (młodszy bajt)● HIGH (starszy bajt)
Assembler (priorytety operatorów)
Assembler (nazwy obszarów pamięci)
● CODE – obszar pamięci programu● XDATA – zewnętrzna pamięć danych● DATA – wewnętrzna pamięć danych (0..7Fh)● IDATA – wewnętrzna pamięć danych adresowana pośrednio (0..0FFh)● BDATA – wewnętrzna pamięć adresowalna bitowo (20h..2Fh)● BIT – bity w pamięci adresowalnej bitowo (0..7Fh)
Assembler (segmenty)
● Zarządzanie pamięcią w assemblerze odbywa się za pomocą segmentów.● Segmenty mogą● ... być umieszczone w stałym miejscu pamięci (segmenty absolutne)● ... być relokowalne (o ich dokładnym adresie decyduje linker)● Segmenty mogą być definiowane we wszystkich rodzajach pamięci● O metodzie dostępu pamięci segmentu decyduje oczywiście jej rodzaj● Różne assemblery mogą się różnić w sposobie deklaracji segmentów
Assembler (segmenty absolutne)
● Przy braku adresu jest użyty kolejny adres w segmencie określonego typu● ... lub adres początkowy pamięci, jeżeli jest to pierwsze użycie● Dyrektywa ORG służy do określania adresu w aktualnym segmencie
Składnia:BSEG [AT addr]CSEG [AT addr]DSEG [AT addr]IDSEG [AT addr]XSEG [AT addr]
Składnia:ORG exp
Assembler (segmenty relokowalne)
● seg_type: BIT, CODE, DATA, IDATA, XDATA● reolc_type: BITADDRESSABLE, INBLOCK, INPAGE,● ... OVERLAYABLE, PAGE, UNIT
Składnia:seg_name SEGMENT seg_type [reloc_type]
Assembler (definiowanie symboli)
Składnia:symbol BIT expsymbol CODE expsymbol DATA expsymbol IDATA expsymbol XDATA exporazNUMBER symbol exp... (nie zalecane; stała 16 bitów)
Assembler (rezerwowanie pamięci)
Składnia:[lab] DBIT exp[lab] DS exp
● Możliwa jest rezerwacja pewniej liczby● ... bitów w obszarze adresowanym bitowo● ... bajtów w wewnętrznej pamięci danych
Assembler (inicjalizowanie pamięci w segmencie kodu)
Składnia:[lab] DB exp [, exp ...][lab] DW exp [, exp ...]
● Dyrektywa DB dotyczy bajtów, znaków i łańcuchów● Dyrektywa DW dotyczy słów 16 bitowych
Assembler (zmienne assemblera)
Składnia:symb SET expsymb SET reg
● Zmienna assemblera może przejmować wartość numeryczną ... lub nazwę rejestru
Assembler (stałe assemblera)
Składnia:symb EQU expsymb EQU reg
● Stała assemblera może przejmować wartość numeryczną ... lub nazwę rejestru
Assembler (instrukcje CALL i JMP)
● Lista rozkazów procesora X51 zawiera różne rozkazy skoków● ... (LJMP, AJMP)● JMP jest dyrektywą assemblera, który wybierze skok optymalny.● Podobnie CALL zostanie zamieniony na jeden z● ... ACALL, LCALL
Assembler (pliki)
● Możliwa jest wielopoziomowość włączania plików● Należy uważać na cykliczność włączeń
Składnia:[$]INCLUDE (Nazwa_pliku)Skrót:[$]IC
Assembler (assemblacja warunkowa)
Składnia:IF exp...ENDIF
IF exp...ELSE...ENDIF
IF exp...ELSEIF exp...ELSE...ENDIF
(bloków z ELSEIF może być wiele)
Assembler (dyrektywy dla linkera)
Składnia:PUBLIC symbol [, symbol ...]EXTERN seg_typ symbol [, symbol ...]
● seg_typ to CODE, DATA, IDATA, BIT, XDATA, NUMBER● Potrzeba stosowania tych dyrektyw występuje gdy używamysymboli zdefiniowanych w innym module.
Assembler (przykłady)
$INCLUDE(PROTOCOL.ASM); --------------------------------------------------------------------; Scoreboard type parameters; --------------------------------------------------------------------; ***Do10th SET 0 ; 10 th of second is installedDo30s SET 1 ; 30 sec aux clock is installedIsAthl SET 0 ; AthleticsRadio SET 1 ; Radio modem is installed; --------------------------------------------------------------------; Game limits; --------------------------------------------------------------------MaxRes EQU 199 ; Max number of displayed pointsMaxSet EQU 9 ; Max number of set numberMaxHlf EQU 9 ; Max number of half
Assembler (przykłady)
If (TAB904=1);; Keyboard definition for foil keyboard;KRow0 EQU P1.4KRow1 EQU P1.5KCol EQU P3;Else ; Hall keyboard;KPointA EQU 005h KPointB EQU 012h; Key bank selectorsKBank0 EQU P3.6KBank1 EQU P3.7EndIf
Assembler (przykłady)
LstKey: DS 1 ; The last key pressedTheKey: DS 1ARCnt: DS 1 ; Autorepeat counter;ClkTic: DS 1 ; Ticks for fancy displaysClkMin: DS 1 ; Main clock - minutesClkSec: DS 1 ; Main clock - secondsClk100: DS 1 ; Main clock - 100 th of secondClkD10: DS 1 ; Displayed 10th of second
Assembler (przykłady)
;============================================================= CSEG;BEGIN: JMP START; ORG BEGIN+0Bh ; Timer 0 int. vector JMP TINTER;CRStr: DB ' TAB 905 v.1.3.4 ', 00Dh, 00Ah, 000h
Assembler (koniec...)
● Dyrektywa END kończy tekst źródłowy modułu
(Pominęliśmy dzisiaj wiele rzadziej stosowanych dyrektyw)
Składnia:END