Wykład 2
Zaawansowane mechanizmy
języka asemblera
Dyrektywy
Asemblacja warunkowa
Makroinstrukcje
Zagadnienie relokacji
Postacie pliku wynikowego
Mo\liwości asemblera
post
ę
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 zródłowym zdefiniowano parametr=typ procesora
Przykład:
Makroinstrukcje
Makroinstrukcje
Makroinstrukcja symbol, któremu przypisano fragment tekstu
programu (w definicji makroinstrukcji)
Gdziekolwiek w pliku zródłowym znajdzie się symbol zdefiniowanego
Gdziekolwiek w pliku zródłowym znajdzie się symbol zdefiniowanego wcześniej
wcześniej makra, asembler wpisze w jego miejsce w pliku zródłowym
makra, asembler wpisze w jego miejsce w pliku zródłowym tekst przypisany
do makra (makro = zmienna asemblera, która mo\e być u\ywana jako skrót
tekst przypisany do makra (makro = zmienna asemblera, która mo\e
przypisanego jej tekstu)
być u\ywana jako skrót przypisanego jej tekstu)
program
definicja makro
..........
wywołanie makro
..........
wywołanie makro
Makroinstrukcje
Gdziekolwiek w pliku zródłowym znajdzie się symbol
zdefinioKorzyś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 zródłowego
ka\dorazowo zapewni ten sam rezultat
" Skraca się czas przygotowania programu zró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.
Procedura a wywołanie makro
WRBUFF
RDBUFF
Main
RDREC
WRREC
Makro
Main
WRREC
Np. 2-
krotne
RDREC
EXPAND
wywołanie
&
WRREC
190a RDBUFF
190m
210a
WRBUFF
Ten sam 210h
Wywołanie procedury;
220a
tekst
WRBUFF
u\ycie stosu
220h
wielokrotnie
Main
Makroasembler
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
Przetwarzanie programu
Program zródłowy
Przetwarzanie makro
Definicja
Makro procesor
wklej
Program rozwinięty
Makrodefinicje
Asembler
" Rozpoznaj definicje
" Zachowaj definicje
" Rozpoznaj wywołania makro
" Rozwiń wywołania makro
Kod wynikowy
Problem makro
" Instrukcje definiujące makro
" Zastępowanie parametrów
" Lokalność symboli
" Rozwinięcie warunkowe
Kopiowanie kodu - przykład
Program zródłowy
Program rozwinięty
STRG MACRO
.
MOV AX, BX
.
MOV BX, AX
NOP
MOV AX, BX
ENDM
MOV BX, AX
{
.
NOP
STRG
. MOV AX, BX
.
MOV BX, AX
STRG
{
.
NOP .
.
Zastąpienie parametrów - przykład
Program zródłowy
Program rozwinięty
STRG MACRO DST, SRC
.
MOV AX, SRC
.
MOV DST, AX
MOV AX, DATA1
NOP
MOV DATA2, AX
{
ENDM
NOP
.
MOV AX, DATA4
STRG DATA1, DATA2
MOV DATA5, AX
{
.
NOP
STRG DATA4, DATA5
Zastąpienie parametrów, lokalność symboli
" Substytucja argumentów makro
wg. listy
STRG DATA1, DATA2
wg. przypisania
STRG SRC=DATA1, DST=DATA2
" Podstawowy asembler brak symboli lokalnych;
" Makroasembler je\eli kopiuje tekst zró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
MACROS MACRO
ENDM
........
ENDM
RDBUFF
........
........
ENDM
WRBUFF
........
Makro - wywołania powtarzane
Skrócenie tekstu programu:
- dyrektywa FOR
FOR parametr,
Parametr w tekście zastąpiony tekst makro
kolejnym argumentem z listy
ENDM
- dyrektywa REPEAT
REPEAT wyra\enie
Powtórz makro wartość wyra\enia
tekst makro
razy
ENDM
- dyrektywa WHILE
WHILE wyra\enie
tekst makro
Powtarzaj tekst makro kiedy wyra\enie
= TRUE (modyfikacja w makro!)
ENDM
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 zródłowego
makrodefinicja: DEFINE
wywołanie makro: EXPAND
" DEFTAB : tablica definicji, tekst makro,
" NAMTAB : tablica nazw, indeks do DEFTAB,
NAMTAB
" ARGTAB : argumenty.
MACRO
DEFINE
DEFTAB
PROCESSLINE
CALL
ARGTAB
EXPAND
Definicja zagnie\d\ona
Algorytm jednoprzejściowego makroprocesora
GETLINE
macro
Następny wiersz
&
PROCESSLINE
GETLINE
jest
PROCESSLINE
makro
EXPAND
NAMTAB
DEFTAB
Kopiuj
DEFINE
tekst
Kopiuj
RDBUFF
rozwinięcia,
definicję
substytucja
RDBUFF
makro z
ARGTAB
pliku
WRBUFF
zródłowego
WRBUFF
makrodefinicja
nazwa makro do do DEFTAB
NAMTAB
Pass 1
READ
Makroasembler 2 przejściowy
Search
Pass 2
Type?
R
(Pseudo-Op Table)
Search NAMTAB
MACRO Process
(Macro Name Table)
Define pseudo-ops
Search
R R
(Machine Op Table)
MACRO
Process
Expand
machine
instruction
R
R
Relokacja programów. Postać wynikowa
Relokowalność
0x0FCD0
?
W CZASIE W YKONYW ANIA
0x0
PROGRAM MOśE BYĆ
ZAAADOW ANY W DOW OLNE
MIEJSCE
PROGRAM
0x024
PROGRAM
0x0FFF123
?
Relokowalność = cecha umo\liwiająca
przemieszczanie programu w pamięci
PROGRAM
Ilustracja zagadnienia relokacji programu.
Relokowalność
Relokowalność posiada szereg korzystnych cech:
" 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 zró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.
Wiersz zródłowy Załadowany od 0000H Załadowany od 0A00H
LJMP START 0000: 02 0A00: 02
0001: 01 0A01: 0B
0002: 00 0A02: 00
START: CPL LED 0100: B2 0B00: B2
0101: 97 0B01: 97
MOV A,#10 0102: 74 0B02: 74
0103: 0A 0B03: 0A
LCALL DELAY 0104: 12 0B04: 12
0105: 01 0B05: 0B
0106: 09 0B06: 09
SJMP START 0107: 80 0B07: 80
0108: F7 0B08: F7
DELAY:MOV R0,#0FFH 0109: 78 0B09: 78
010A: FF 0B0A: FF
LOOP:DJNZ R0,LOOP 010B: D8 0B0B: D8
010C: FE 0B0C: FE
DJNZ ACC,DELAY 010D: D5 0B0D: D5
010E: E0 0B0E: E0
010F: F9 0B0F: F9
RET 0110: 22 0B10: 22
Realizacja relokowalności
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)
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
Realizacja relokowalności
Dwie mo\liwości realizacji relokowalności (cd):
2. modyfikacja adresów w trakcie ładowania bądz konsolidacji
programu
Kooperacja asemblera i loadera (linkera)
plik wynikowy
- 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 " W ogólności dla określenia typu
wyra\enia: przeanalizować typy symboli w
RETADR R 30
programie
BUFFER R 36
" Mno\enie i dzielenie wielkości
BUFEND R 1036
względnych jest niedopuszczalne
MAXLEN A 1000
Relokowalność
-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ózniejszym etapie
przetwarzania programu przez loader lub linker
(konsolidator).
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
Plik Plik
wynikowy biblioteczny
Linker
Pakiet (konsolidator)
asemblera
Plik ładowalny
Konwenter listingu
Konwerter
pliku
wynikowego
Plik listingu z
wartościami
absolutnymi Plik w
Plik tablicy
formacie
symboli
HEX
Emulator Zintegrowany
Debugger
PROM
sprzętowy debuger
programator
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
" rozmieszczenie i start zawsze od tego samego
010C FE
010D D5
adresu np. w przykładzie 0000H/0100H
010E E0
010F F9 " Inne przykłady: np. MS-DOS .com
0110 22
Przykład prostego formatu pliku wynikowego.
Plik wynikowy
Organizacja typowego pliku wynikowego
" Informacja nagłówkowa: informacja o pliku:rozmiar kodu, nazwa
pliku zró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.
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
Wyszukiwarka
Podobne podstrony:
PPS 13 W7
PPS 13 W1
PPS 13 W8
PPS 15 W2
PPS 13 W4
WBiIŚ W2 13
ZJ w2 13
psychopatologia w2 12 13
2 13 Applications W2 Outro
UAS 13 zao
er4p2 5 13
Budownictwo Ogolne II zaoczne wyklad 13 ppoz
ch04 (13)
więcej podobnych podstron