PPS W2

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

os

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

Przykłady dyrektyw

sterowanie

identyf.

background image

Przykłady dyrektyw

loader

tryb

background image

Przykłady dyrektyw

warunki

tryb asemblacji

background image

segmenty

Przykłady dyrektyw

background image

segmenty cd

Przykłady dyrektyw

background image

przypisanie

konsolidacja

Przykłady dyrektyw

background image

Przykłady dyrektyw

dane

dane

background image

Przykłady dyrektyw

makro

background image

Przykłady dyrektyw

błędy

wydruk

background image

Przykłady dyrektyw

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

background image

Asemblacja warunkowa

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)

background image

Makroinstrukcje

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

Makroinstrukcje

background image



WRREC


RDREC

Np. 2-
krotne

wywołanie

Wywołanie makro a procedura

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


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

Problemy 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

Zagnieżdżone makrodefinicje

Przetwarzanie makrodefinicji w trakcie rozwijania

ENDM

ENDM

ENDM

........

RDBUFF

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

WRBUFF

........

MACROS MACRO

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

background image

Lokalność symboli

Podstawowy asembler – brak symboli lokalnych

Makroasembler

– jeżeli kopiowałby tekst źródłowy

bez zmian symbole w tekście makrodefinicji

nie

byłyby lokalne

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

„Makro” - wywołania powtarzane

Dyrektywy

FOR, REPEAT, WHILE


Efekt użycia: skrócenie tekstu programu:

FOR

parametr, <argument [,argument]...>

tekst makro

ENDM

REPEAT

wyrażenie

tekst makro

ENDM

Powtórz makro „wartość
wyrażenia” razy

Parametr w tekście – zastąpiony
kolejnym argumentem z listy

background image

„Makro” - wywołania powtarzane

Dyrektywy

FOR, REPEAT, WHILE


Efekt użycia: skrócenie tekstu programu:

WHILE

wyrażenie

tekst makro

ENDM

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

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

W pierwszym

przejściu makroasembler tworzy

tablicę makr:

-

symbol

przypisany do makra (nazwa),

-

tekst makra

,

-

bieżący licznik użycia

w programie

-

argumenty


W tym samym

przejściu - po znalezieniu symbolu

makra, makroasembler

-

zastępuje ten symbol tekstem

odczytanym z tablicy,

- podstawia argumenty

Makroasembler

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

Algorytm jednoprzejściowego makroprocesora

DEFINE

Kopiuj
definicję

makro z
pliku
źródłowego

EXPAND

Kopiuj
tekst

rozwinięcia,
substytucja

PROCESSLINE

jest

makrowywołanie

RDBUFF

DEFTAB

RDBUFF

makrodefinicja
do DEFTAB

WRBUFF

WRBUFF

makrodefinicja z
DEFTAB

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

PROGRAM

PROGRAM

0x0FCD0

?

?

0x0FFF123

0x0

0x024

W CZASIE WYKONYWANIA
PROGRAM MOŻE BYĆ
ZAŁADOWANY W DOWOLNE
MIEJSCE

PROGRAM

Ilustracja zagadnienia relokacji programu.

Relokowalność = cecha umożliwiająca
przemieszczanie programu w pamięci

Relokowalność

background image

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

background image

Wiersz źró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

background image

Relokowalność. Problem wyrażeń

Wyrażenia można sklasyfikować jako

b

ezwzglę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

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

Kody instrukcji

wymagają modyfikacji

za wyjątkiem

instrukcji:

z adresowaniem natychmiastowym
względnym (względem PC, rej. bazowego)
rejestrowym
bezargumentowych

W instrukcjach

modyfikacji

wymagają

wszystkie

wartości obliczone przez asembler na podstawie
adresów:

- lokalizacje etykiet

-

wartości wyrażeń

Realizacja relokowalności

background image

D

wie możliwości realizacji relokacji:

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 domyślnej

lokalizacji początku programu

background image

D

wie możliwości realizacji relokacji (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

-asemblery absolutne


asembler absolutny przypisuje bajtom kodu
maszynowego adresy absolutne (bezwzględne)

- asemblery relokowalne


- tłumaczenie z założeniem domyślnej lokalizacji
- wynikowe adresy poszczególnych bajtów traktowane
jako nieostateczne.
- ostateczne 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

loadable
linkable
executable

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, n-ry 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

Formaty plików wynikowych cd.

Przykład budowy a.out UNIX’a

background image

Formaty plików wynikowych cd.

background image

Formaty plików wynikowych (a.out)

background image

Ładowanie programu do
pamięci

background image

Relokowalność. Format pliku wynikowego

Format MS-DOS

.EXE

adresy

segment:offset

po nagłówku: kod

programu

background image

Relokowalność. Rola loadera

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

Przykład: ładowanie pliku .exe

przeczytaj nagłówek (sprawdź typ pliku)
sprawdź ilość dostępnej pamięci (minalloc/ maxalloc)
utwórz PSP (obszar z parametrami z linii rozkazowej)
załaduj program zaraz za PSP (nblocks/lastsize)
dla każdej relocpos dodaj adres bazowy do nr-u

segment we wskaźniku

dla każdego tak otrzymanego adresu: dodaj adres

bazowy do wskazanej zawart. Pamięci

ustaw SP na sp (po relokacji)
skocz od adresu = ip+relokacja (start programu)


Wyszukiwarka

Podobne podstrony:
PPS 2013 W2
PPS 2015 W2
PPS 2013 W2
Psycholgia wychowawcza W2
SP dzienni w2
w2 klasy(1)
Plan pracy na 2011 pps
W2 Chemiczne skladniki komorki
Zimne piwo pps
OK W2 System informacyjny i informatyczny
W2 6
Algebra w2

więcej podobnych podstron