Wykład 2
Zaawansowane mechanizmy
j
ę
zyka asemblera
Dyrektywy
Asemblacja warunkowa
Makroinstrukcje
Zagadnienie relokacji
Postacie pliku wynikowego
Możliwości asemblera
p
o
st
ę
p
Dyrektywy asemblera
Rozszerzenie języka
asemblera - dyrektywy
Rozkazy dla asemblera.
Wykonywane przez asembler, nie
tłumaczone na ML.
Mog
ą
wpływa
ć
na wynikowy
kod, tablic
ę
symboli, plik listingu,
wewn
ę
trzne parametry
asemblera.
Rozszerzenie języka
asemblera - dyrektywy
W prostych asemblerach – kilka
dyrektyw;
W zaawansowanych asemblerach –
dziesi
ą
tki dyrektyw.
Funkcje dyrektyw
Funkcje dyrektyw
Funkcje dyrektyw
sterowanie
identyf.
loader
tryb
segmenty
Funkcje dyrektyw
przypisanie
konsolidacja
Funkcje dyrektyw
dane
makro
warunki
Funkcje dyrektyw
błędy
wydruk
kody
Asemblacja warunkowa
•
Polecenia steruj
ą
ce asemblacj
ą
(wykonywane w czasie
asemblacji)
– IF-ELSE-ENDIF (IFE, IFDEF, IFNDEF...)
– Jeden program – wiele wariantów
→
→
→
→
generacja innego kodu w
zale
ż
no
ś
ci od „otoczenia”
• np. pliku
ź
ródłowym zdefiniowano parametr=typ procesora
Przykład:
Makroinstrukcje
Makroinstrukcje
Makroinstrukcja – symbol, któremu przypisano fragment tekstu
programu (w definicji makroinstrukcji)
Gdziekolwiek w pliku źródłowym znajdzie się symbol zdefiniowanego wcześniej
makra, asembler wpisze w jego miejsce w pliku źródłowym tekst przypisany
do makra (makro = zmienna asemblera, która może być używana jako “skrót”
przypisanego jej tekstu)
Gdziekolwiek w pliku źródłowym znajdzie się symbol zdefiniowanego
wcześniej makra, asembler wpisze w jego miejsce w pliku źródłowym
tekst przypisany do makra (makro = zmienna asemblera, która może
być używana jako “skrót” przypisanego jej tekstu)
definicja makro
„wywołanie” makro
„wywołanie” makro
..........
..........
program
Makroinstrukcje
Gdziekolwiek w pliku źródłowym znajdzie się symbol
zdefinio
Korzyści stosowania makroinstrukcji:
•Redukuje liczbę błędów powodowanych przez programistę.
•Umożliwia zdefiniowanie często używanych w programie sekwencji
instrukcji.
•Wielokrotne użycie tego makra w tekście programu źródłowego
każdorazowo zapewni ten sam rezultat
•Skraca się czas przygotowania programu źródłowego a program
zyskuje na przejrzystości.
•Symbole (etykiety) użyte w makro są lokalne w obrębie makro i nie
są mylone przez asembler z identycznymi symbolami używanymi
poza nim.
ADD_AB_R0R1 MACRO
CLC
; zeruj bit przeniesienia
ADD A,R0
; dodaj młodsze bajty
ADDC B,R1
; dod. starsze bajty z uwzgl
ę
dnieniem przen.
ENDM
; koniec makro
Przykład definicji makra.
WRREC
RDREC
Np. 2-
krotne
wywołanie
Procedura a wywołanie makro
EXPAND
…
Main
RDBUFF
190a
190m
WRBUFF
210a
210h
WRBUFF
220a
220h
Wywołanie procedury;
użycie stosu
Makro
Main
RDBUFF
WRBUFF
Ten sam
tekst
wielokrotnie
RDREC
WRREC
WRREC
Main
W pierwszym przejściu makroasembler tworzy dodatkową tablicę
makr:
- symbol przypisany do makra (nazwa),
- tekst makra,
- bieżący licznik użycia w programie
W tym samym przejściu -
po znalezieniu symbolu makra,
makroasembler zastępuje ten symbol tekstem odczytanym z
tablicy.
Wpisany tekst jest analizowany w celu znalezienia etykiet.
- modyfikacja
symboli etykiet
w tekście makra, aby
zachowały lokalny charakter (zwykle unikalny przedrostek)
Dalsza praca makroasemblera – analiza programu – jak w I-szym
przejściu asemblera
Makroasembler
Program źródłowy
Makro procesor
Asembler
Kod wynikowy
Makrodefinicje
Przetwarzanie makro
Definicja
„wklej”
Przetwarzanie programu
Program rozwinięty
•Rozpoznaj definicje
•Zachowaj definicje
•Rozpoznaj wywołania makro
•Rozwi
ń
wywołania makro
Problem makro
•
Instrukcje definiuj
ą
ce makro
•
Zast
ę
powanie parametrów
•
Lokalno
ść
symboli
•
Rozwini
ę
cie warunkowe
Kopiowanie kodu - przykład
Program źródłowy
STRG
MACRO
MOV AX, BX
MOV BX, AX
NOP
ENDM
.
STRG
.
STRG
.
.
Program rozwinięty
.
.
MOV AX, BX
MOV BX, AX
NOP
.
MOV AX, BX
MOV BX, AX
NOP
.
{
{
Zastąpienie parametrów - przykład
Program źródłowy
STRG
MACRO
DST, SRC
MOV AX,
SRC
MOV
DST
, AX
NOP
ENDM
.
STRG
DATA1, DATA2
.
STRG
DATA4, DATA5
Program rozwinięty
.
.
MOV AX,
DATA1
MOV
DATA2
, AX
NOP
MOV AX,
DATA4
MOV
DATA5
, AX
NOP
{
{
•
Substytucja argumentów makro
– wg. listy
STRG DATA1, DATA2
– wg. przypisania
STRG SRC=DATA1, DST=DATA2
Zastąpienie parametrów, lokalność symboli
•
Podstawowy asembler –
brak symboli lokalnych
;
•
Makroasembler –
je
ż
eli
kopiuje tekst
ź
ródłowy bez zmian
symbole w tek
ś
cie makrodefinicji
nie s
ą
lokalne
. –
→
→
→
→
Wtedy
odr
ę
bne polecenie (
LOCAL
) dla okre
ś
lenia symboli lokalnych
•
Symbole lokalne
- makroprocesor nadaje unikalne nazwy w
czasie wstawiania tekstu makrodefinicji do programu
– Np.
STRG MACRO
X1
EQU
10H
STRG_1_X1
EQU
10H
Zagnieżdżone makrodefinicje
Przetwarzanie makrodefinicji w trakcie rozwijania
ENDM
ENDM
ENDM
........
RDBUFF
........
........
WRBUFF
........
MACROS MACRO
„Makro” - wywołania powtarzane
Skrócenie tekstu programu:
- dyrektywa
FOR
FOR
parametr, <argument [,argument]...>
tekst makro
ENDM
- dyrektywa
REPEAT
REPEAT wyra
ż
enie
tekst makro
ENDM
- dyrektywa
WHILE
WHILE wyra
ż
enie
tekst makro
ENDM
Powtórz makro „warto
ść
wyra
ż
enia”
razy
Parametr w tek
ś
cie – zast
ą
piony
kolejnym argumentem z listy
Powtarzaj tekst makro kiedy wyra
ż
enie
= TRUE (modyfikacja w makro!)
Makroprocesory
•
Jednoprzej
ś
ciowe
– Ka
ż
de makro musi by
ć
zdefiniowane przed u
ż
yciem jego
wywołania
– Mo
ż
e podczas rozwijania makro przetwarza
ć
definicje
– dopuszczalne definicje zagnie
ż
d
ż
one
•
Dwuprzej
ś
ciowe
– Przej
ś
cie 1: rozpoznaj makrodefinicje
– Przej
ś
cie 2: rozpoznaj makrowywołania
Makroprocesor jednoprzejściowy
•
Wymaganie
– Ka
ż
de makro musi by
ć
uprzednio zdefiniowane
•
Działania makroprocesora przy analizie tekstu
ź
ródłowego
– makrodefinicja: DEFINE
– wywołanie makro: EXPAND
DEFTAB
NAMTAB
ARGTAB
•
DEFTAB
: tablica definicji, tekst makro,
•
NAMTAB
: tablica nazw, indeks do DEFTAB,
•
ARGTAB
: argumenty.
DEFINE
EXPAND
PROCESSLINE
MACRO
CALL
Definicja zagnie
ż
d
ż
ona
macro
…
GETLINE
PROCESSLINE
GETLINE
Następny wiersz
PROCESSLINE
jest
makro
ARGTAB
NAMTAB
nazwa makro do
NAMTAB
makrodefinicja
do DEFTAB
Algorytm jednoprzejściowego makroprocesora
DEFINE
Kopiuj
definicję
makro z
pliku
źródłowego
EXPAND
Kopiuj
tekst
rozwinięcia,
substytucja
RDBUFF
DEFTAB
RDBUFF
WRBUFF
WRBUFF
READ
Search
(Pseudo-Op Table)
Search NAMTAB
(Macro Name Table)
Search
(Machine Op Table)
Process
machine
instruction
R
R
Type?
MACRO
Define
Process
pseudo-ops
R
R
MACRO
Expand
R
Pass 2
Pass 1
Makroasembler 2 przejściowy
Relokacja programów. Postać wynikowa
PR O G R AM
PR O G R AM
0 x0F C D 0
?
?
0 x0 F F F 123
0x0
0x02 4
W C ZA S IE W YK O N YW A N IA
P R O G R A M MO
ś
E B Y
Ć
Z A Ł A D O W A N Y W D O W O L N E
MIE JS C E
PR O G R A M
Ilustracja zagadnienia relokacji programu.
Relokowalność
=
cecha
umożliwiająca
przemieszczanie programu w pamięci
Relokowalność
•
zwi
ę
ksza efektywno
ść
przygotowania programu
• programy mog
ą
by
ć
przygotowywane w postaci oddzielnych
modu
ł
ów (np. przez ró
ż
nych programistów, w tym samym
czasie);
•
daje mo
ż
liwo
ść
u
ż
ycia zasobów
ź
ród
ł
owych
• do programu mo
ż
na w
łą
czy
ć
modu
ł
y, które zosta
ł
y
uprzednio przygotowane
•
umo
ż
liwia wieloprogramow
ą
prac
ę
systemu komputerowego
• program mo
ż
e by
ć
za
ł
adowany w dost
ę
pne miejsce w
pami
ę
ci.
Relokowalność
Relokowalno
ść
posiada szereg korzystnych cech:
0B10: 22
0110: 22
RET
0B0F:
F9
010F:
F9
0B0E:
E0
010E:
E0
0B0D:
D5
010D:
D5
DJNZ
ACC,DELAY
0B0C:
FE
010C:
FE
0B0B:
D8
010B:
D8
LOOP:DJNZ R0,LOOP
0B0A:
FF
010A:
FF
0B09:
78
0109:
78
DELAY:MOV R0,#0FFH
0B08:
F7
0108:
F7
0B07:
80
0107:
80
SJMP
START
0B06:
09
0106:
09
0B05:
0B
0105:
01
0B04:
12
0104:
12
LCALL
DELAY
0B03:
0A
0103:
0A
0B02:
74
0102:
74
MOV
A,#10
0B01:
97
0101:
97
0B00:
B2
0100:
B2
START:
CPL LED
0A02:
00
0002:
00
0A01:
0B
0001:
01
0A00: 02
0000:
02
LJMP
START
Za
ł
adowany od 0A00H
Za
ł
adowany od 0000H
Wiersz źród
ł
owy
Kody instrukcji
wymagaj
ą
modyfikacji
za wyj
ą
tkiem instrukcji:
• z adresowaniem natychmiastowym
• wzgl
ę
dnym (wzgl
ę
dem PC, rej. bazowego)
• rejestrowym
• bezargumentowych
W instrukcjach
wymagaj
ą
modyfikacji
wszystkie warto
ś
ci obliczone
przez asembler na podstawie adresów:
- lokalizacje etykiet
- warto
ś
ci wyra
ż
e
ń
Realizacja relokowalności
Dwie mo
ż
liwo
ś
ci realizacji relokowalno
ś
ci:
1.
dodawanie
do adresów odpowiedniej warto
ś
ci bazowej przez
procesor w trakcie wykonywania programu (
rejestr bazowy
)
Realizacja relokowalności
– Procesor musi posiada
ć
rejestr bazowy
– Je
ż
eli procesor posiada rejestr limitu segmentu –
mo
ż
liwo
ść
ochrony programu
– Prosta realizacja relokacji; program
przetłumaczony z adresami wzgl
ę
dem pocz
ą
tku
programu
Dwie mo
ż
liwo
ś
ci realizacji relokowalno
ś
ci (cd):
2. modyfikacja adresów
w trakcie
ł
adowania b
ą
d
ź
konsolidacji
programu
Kooperacja asemblera i loadera (linkera)
→
→
→
→
plik wynikowy
Realizacja relokowalności
- Wykonywana przez odr
ę
bny program np. w czasie
rzeczywistym w trakcie ładowania
- Wymaga odpowiedniej informacji w pliku wynikowym
– Maszyny z segmentacj
ą
– modyfikacja warto
ś
ci
rejestrów segmentowych; w segmencie adresacja
wzgl
ę
dna
– Uwaga! Modyfikacja nie mo
ż
e dotyczy
ć
adresów
lokalizacji poza danym procesem
• Wektory przerwa
ń
• Zasoby systemowe
Relokowalność. Wyrażenia
•
Wyra
ż
enia mo
ż
na sklasyfikowa
ć
jako
bezwzgl
ę
dne
or
wzgl
ę
dne
– MAXLEN
EQU
BUFEND-BUFFER
– BUFEND i BUFFER s
ą
wielko
ś
ciami wzgl
ę
dnymi, reprezentuj
ą
cymi
adresy w programie
– jednak
ż
e wyra
ż
enia BUFEND-BUFFER reprezentuje wyra
ż
enie
bezwzgl
ę
dne
•
Gdy wielko
ś
ci
wzgl
ę
dne
s
ą
sparowane z przeciwnymi znakami
, zale
ż
no
ść
od warto
ś
ci adresu pocz
ą
tkowego programu jest zniesiona; wynik na
warto
ść
bezwzgl
ę
dn
ą
.
Symbol
Type
Value
RETADR
R
30
BUFFER
R
36
BUFEND
R
1036
MAXLEN
A
1000
•W ogólno
ś
ci dla okre
ś
lenia typu
wyra
ż
enia: przeanalizowa
ć
typy symboli w
programie
•Mno
ż
enie i dzielenie wielko
ś
ci
wzgl
ę
dnych jest niedopuszczalne
-asemblery absolutne
asembler absolutny przypisuje bajtom kodu
maszynowego adresy absolutne (bezwzględne)
- asemblery relokowalne
w asemblerze relokowalnym adresy określone dla
poszczególnych bajtów są zmienne. Adresy
bezwzględne zostaną określone w późniejszym etapie
przetwarzania programu przez loader lub linker
(konsolidator).
Relokowalność
Mechanizm umożliwiający relokowalność - plik wynikowy
Produktem asemblera
→
→
→
→
plik wynikowy
- umo
ż
liwia wielokrotne
załadowanie raz przetłumaczonego programu (loader); wyj
ą
tek
asemblery typu „przetłumacz-i-załaduj”.
Plik wynikowy zwykle
≠≠≠≠
kod wykonywalny (in. maszynowy), lecz
posta
ć
po
ś
rednia
- np. + instrukcje dla loadera jak załadowa
ć
program
Format kodu wynikowego zale
ż
y od tego, jak dalece ma by
ć
on
przetwarzany przed ostatecznym załadowaniem programu do
pami
ę
ci.
-
przemieszczanie programu
- konsolidacja z innymi modułami
Relokowalność. Realizacja.
Zwykle ostatni etap relokacji realizuje loader
• Wszystkie pozycje, których adresy umieszczone s
ą
po
nagłówku pliku wynikowego podlegaj
ą
przetworzeniu
– Do warto
ś
ci pozycji dodawane jest przesuni
ę
cie
wynikaj
ą
ce z relokacji
Asembler
Asembler
Linker
(konsolidator)
Konwerter
pliku
wynikowego
Konwenter listingu
PROM
programator
Emulator
sprz
ę
towy
Zintegrowany
debuger
Pakiet
asemblera
Plik listingu z
warto
ś
ciami
absolutnymi
Plik w
formacie
HEX
Plik tablicy
symboli
Plik
wynikowy
Plik
biblioteczny
Plik ładowalny
Debugger
Elementy mechanizmu umo
ż
liwiaj
ą
cego relokowalno
ść
i modułowo
ść
Plik wynikowy
0000
02
0001
01
0002
00
0100
B2
0101
97
0102
74
0103
0A
0104
12
0105
01
0106
09
0107
80
0108
F7
0109
78
010A
FF
010B
D8
010C
FE
010D
D5
010E
E0
010F
F9
0110
22
Przykład prostego formatu pliku wynikowego.
• rozmieszczenie i start zawsze od tego samego
adresu np. w przykładzie 0000H/0100H
• Inne przykłady: np. MS-DOS .com
Organizacja typowego pliku wynikowego
•Informacja nagłówkowa
: informacja o pliku:rozmiar kodu, nazwa
pliku
ź
ródłowego, data utworzenia
•Kod wynikowy
: instrukcje binarne i dane utworzone przez kompilator
lub asembler
•Informacja relokacyjna
: lista pozycji w kodzie wynikowym, które
musz
ą
podlega
ć
relokacji
•Informacja dla debuggingu
: informacje nieu
ż
yteczne dla loadera lecz
potrzebne dla debuggera (np. symbole lokalne, nry wierszy itp..)
Niektóre formaty pliku wynikowego zawieraj
ą
dodatkowe informacje.
Wystarczaj
ą
cy dla załadowania format obejmuje binarny kod wynikowy.
Plik wynikowy
Intel Hex Code
:030000 00020100FA
:10010000B297740A12010980F778FFD8FED5E0F99A
:0101100022CC
:00000001FF
Opis pierwszej linii pliku .HEX (Intel Hex Code)
: 03 0000 00 02 01 00 FA
| | | | | | |_ suma kontrolna
| | | | | |
| | | |__|__|___ bajty kodu maszynowego (3)
| | |
| | |____________ typ
| |
| |_____________ adres rozmieszczenia pierwszego bajtu
|
|______________ liczba bajtów kodu maszynowego
Przykładowy format heksadecymalny Intela pliku wynikowego.
cdn...
Relokowalność. Format pliku wynikowego
Format MS-DOS
.EXE
adresy
segment:offset
po nagłówku: kod
programu