Wstęp do assemblera MA51 - Politechnika Gdańska · Wstęp do assemblera MA51 Ryszard J....

Post on 14-Jun-2020

9 views 0 download

Transcript of Wstęp do assemblera MA51 - Politechnika Gdańska · Wstęp do assemblera MA51 Ryszard J....

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