background image

Wykład 2

Zaawansowane mechanizmy 

j

ę

zyka asemblera

background image

Dyrektywy 
Asemblacja warunkowa 
Makroinstrukcje
Zagadnienie relokacji
Postacie pliku wynikowego

background image

MoŜliwości asemblera 

p

o

st

ę

p

 

background image

Dyrektywy asemblera 

background image

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.

background image

Rozszerzenie języka 

asemblera - dyrektywy

W prostych asemblerach – kilka 
dyrektyw;

W zaawansowanych asemblerach –
dziesi

ą

tki dyrektyw.

background image

Funkcje dyrektyw

background image

Funkcje dyrektyw

background image

Funkcje dyrektyw

sterowanie

identyf.

loader

tryb

segmenty

background image

Funkcje dyrektyw

przypisanie

konsolidacja

background image

Funkcje dyrektyw

dane

makro

warunki

background image

Funkcje dyrektyw

ędy

wydruk

kody

background image

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:

background image

Makroinstrukcje

background image

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

background image

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.

background image

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.

background image

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

background image

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

background image

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

background image

Problem makro

Instrukcje definiuj

ą

ce makro

Zast

ę

powanie parametrów

Lokalno

ść

 symboli

Rozwini

ę

cie warunkowe

background image

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

.

{
{

background image

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

{
{

background image

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

background image

ZagnieŜdŜone makrodefinicje

Przetwarzanie makrodefinicji w trakcie rozwijania

ENDM

ENDM

ENDM

........

RDBUFF

........
........

WRBUFF

........

MACROS         MACRO

background image

„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!)

background image

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

background image

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

background image

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

background image

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

background image

Relokacja programów. Postać wynikowa

background image

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ść

background image

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

ł

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:

background image

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

background image

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

background image

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

background image

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

background image

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

background image

-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ść

background image

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

background image

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

background image

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

ść

background image

Plik wynikowy

background image

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

background image

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

background image

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...

background image

Relokowalność. Format pliku wynikowego

Format MS-DOS 

.EXE

adresy 

segment:offset

po nagłówku: kod 

programu