background image

Wykład 6

Wsparcie makroasemblera dla budowy 

blokowej

background image

Bloki programu

Mechanizmy organizuj

ą

ce bloki

Działanie asemblera/loadera/linkera

Organizowanie bloków w procesorach z segmentacj

ą

background image

Metoda organizowania pami

ę

ci odpowiadaj

ą

ca sposobowi 

korzystania z pami

ę

ci przez programist

ę

program jest zestawem bloków (segmentów). Blok jest 
jednostk

ą

 logiczn

ą

:

program główny
procedura/y
funkcja/e
obiekt/y
zmienne lokalne
zmienne globalne
blok wspólny
stos
tablice

Segmenty programu

łatwiej zapewni

ć

 współdzielenie kodu i 

ochron

ę

 danych

background image

1

3

2

4

1

4

2

3

przestrze

ń

 „u

Ŝ

ytkownika”

fizyczna przestrze

ń

 pami

ę

ci

Segmenty/bloki programu

background image

Segmenty/bloki programu

background image

Współdzielenie segmentów/bloków programu

Bity dost

ę

pu przypisane 

do segmentów – ochrona 
i współdzielenie na 
poziomie segmentów

background image

blok 0

blok 1

blok 2

blok 0

blok 1

blok 2

program 

ź

ródłowy

blok 0

blok 1

blok 2

bloki programu

Bloki programu

Odnosz

ą

 si

ę

 do fragmentów programu, które mog

ą

 by

ć

 

docelowo uporz

ą

dkowane inaczej w kodzie wynikowym 

ni

Ŝ

 wyst

ę

puj

ą

 w programie 

ź

ródłowym

• Pola danych umieszczone w pobli

Ŝ

u korzystaj

ą

cych 

z nich instrukcji

• stanowi

ą

ce procedury fragmenty umieszczone w 

tek

ś

cie programu głównego

main

function

data

blok 0

blok 1

blok 2

program 

ź

ródłowy

asemblacja

background image

Bloki programu - asembler

Asembler grupuje cz

ęś

ci kodu/danych, które s

ą

 rozproszone w 

programie 

ź

ródłowym, a posiadaj

ą

 ten sam charakter

– Korzy

ś

ci: 

• Grupowanie zapewnia oszcz

ę

dno

ść

 miejsca i krótszy kod

Dzi

ę

ki tej funkcjonalno

ś

ci – zwi

ą

zane ze sob

ą

 dane i kod mog

ą

 

by

ć

 umieszczone blisko siebie, dla lepszej czytelno

ś

ci i 

panowania nad programem

background image

Bloki programu

Blok 1

Blok 2

Blok 1

Blok 3

background image

Bloki programu

Dyrektywa USE:

USE [blockname]

omini

ę

cie pola danych

Kolejno

ść

 w pliku wynikowym: 

1, 3, 2, 4

background image

Tu zaczyna si

ę

blok domy

ś

lny

Bloki programu (przykład)

U

Ŝ

yj bloku CBLKS

4096 bajtów

U

Ŝ

yj bloku CDATA

background image

Bloki programu (przykład cd)

U

Ŝ

yj domy

ś

lnego bloku

U

Ŝ

yj bloku CDATA

background image

UŜyj domyślnego bloku

Blok domy

ś

lny (bez nazwy) zawiera instrukcje wykonywalne

Blok CDATA zawiera pojedyncze dane (jedno-kilka słów)

Blok CBLKS zawiera dane blokowe (tablice)

U

Ŝ

yj bloku CDATA

Bloki programu (przykład cd)

background image

asembler logicznie rearan

Ŝ

uje bloki grupuj

ą

c składowe

rezultat – odpowiada wynikowi przepisania programu do 
postaci, w której wyst

ę

puj

ą

 zwarte segmenty

Bloki programu – zadanie asemblera

..........

CDATA

CBLKS

asemblacja

background image

Asembler u

Ŝ

ywa wielu liczników programu

– dyrektywa 

USE

Dyrektywy wyró

Ŝ

niaj

ą

 sekcje, które zostan

ą

 załadowane w ró

Ŝ

ne 

obszary pami

ę

ci

I przej

ś

cie asemblera

– Ka

Ŝ

dy blok programu – odr

ę

bny LC

– Ka

Ŝ

da etykieta w bloku –

adres wzgl

ę

dny

w stosunku do 

pocz

ą

tku bloku

– Na zako

ń

czenie I przej

ś

cia, ko

ń

cowa dla bloku warto

ść

LC = 

długo

ść

bloku

– Asembler mo

Ŝ

e przypisa

ć

ka

Ŝ

demu blokowi adresy 

pocz

ą

tkowe w pliku wynikowym

II przej

ś

cie asemblera

– Adres ka

Ŝ

dego symbolu mo

Ŝ

e by

ć

wyliczony poprzez 

sumowanie adresu pocz

ą

tkowego bloku z 

adresem wzgl

ę

dnym

symbolu

Bloki programu – zadanie asemblera

nie stosowane, gdy segmenty pami

ę

ci

background image

Grupowanie bloków przez asembler

adr wzgl

nr bloku

background image

Grupowanie bloków przez asembler

adr wzgl

nr bloku

background image

asembler „wewn

ę

trznie” rearan

Ŝ

uje kod i dane w zwarte 

bloki

kod generowany do pliku wynikowego nie musi by

ć

 

fizycznie przeorganizowany – wystarczy, 

Ŝ

e asembler 

wpisze wła

ś

ciwy adres pocz

ą

tkowy dla ka

Ŝ

dej sekcji

Przykład zawarto

ś

ci pliku wynikowego

Bloki programu – asembler/loader

background image

Bloki programu – zadanie loadera

background image

Dodatkowe korzy

ś

ci:

nie ma potrzeby 
generowania kodu dla 
tych 2 bloków –
wystarczy zarezerwowa

ć

 

miejsce w pami

ę

ci

Bloki programu – korzyści z grupowania

background image

4096 b

0027

Bloki programu – korzyści z grupowania

Dodatkowe korzy

ś

ci:

du

Ŝ

e bloki danych poza 

obszarem kodu programu
- mo

Ŝ

na zastosowa

ć

 

krótsze skoki

background image

Bloki programu dla procesorów wspierających 

segmenty pamięci

(ukryte)

Dost

ę

p do danych z ró

Ŝ

nych segmentów 

wymaga zmiany (cz

ę

ste?) zawarto

ś

ci 

rejestru segmentowego 

grupowa

ć

dane w segmentach

background image

nazwa 

SEGMENT

[[READONLY]] [[align]] [[combine]] [[use]] [[‘class’]]

……………..
....................
nazwa 

ENDS

Nazwa

: umo

Ŝ

liwia grupowanie cz

ęś

ci segmentu 

(ka

Ŝ

da kolejna definicja z t

ą

 sam

ą

 nazw

ą

 = 

kontynuacja segmentu) i okre

ś

lenie adresu

Segmenty

background image

nazwa 

SEGMENT

[[READONLY]] [[

align

]] [[combine]] [[use]] [[‘class’]]

BYTE, ALIGN(n), WORD, DWORD, PARA, PAGE

Segmenty

BYTE

2             4           16      256   

WORD, DWORD, PARA, PAGE

background image

nazwa 

SEGMENT

[[READONLY]] [[align]] [[

combine

]] [[use]] [[‘class’]]

PUBLICSTACKCOMMONATaddressPRIVATE

Segmenty

Okre

ś

la porz

ą

dek wpisywania segmentów z 

t

ą

 sam

ą

 nazw

ą

do 

pliku wynikowego

PUBLIC, STACK

– przed wpisaniem do pliku wynikowego 

składowe segmentu s

ą

 scalane; (STACK pozwala 

zainicjalizowa

ć

 rejestr SS)

PRIVATE

– w pliku wynikowym składowe segmentu nie s

ą

 

scalone

background image

nazwa 

SEGMENT

[[

READONLY

]] [[align]] [[combine]] [[

use

]] [[‘class’]]

USE16USE32FLAT

Segmenty

Okre

ś

la, czy generowany kod 

ma odpowiada

ć

 16, czy 32-

bitowym przesuni

ę

ciom

-wywołania procedur, powroty

-skoki

asembler wyka

Ŝ

e bł

ą

d, gdy 

napotka instrukcj

ę

 

zapisuj

ą

c

ą

 do segmentu

nie zabezpiecza

przed 

zapisaniem w trakcie 
wykonania programu

READONLY

background image

nazwa 

SEGMENT

[[READONLY]] [[align]] [[combine]] [[use]] [[

‘class’

]]

‘CODE’, ‘STACK’, ‘DATA’, 
‘CONST’

Segmenty

Okre

ś

la kolejno

ść

 post

ę

powania 

z segmentami o ró

Ŝ

nych 

nazwach

background image

(1) asembler ł

ą

czy wszystkie segmenty PUBLIC o tej samej nazwie

(2) po zł

ą

czeniu wpisuje do pliku wyj

ś

ciowego w kolejno

ś

ci, jak w 

programie 

ź

ródłowym (z adresem pocz

ą

tkowym pierwszego 

składnika segmentu)

(3) konsolidator rearan

Ŝ

uje segmenty. Zaczyna od pierwszego 

segmentu w pliku, nast

ę

pnie szuka segmentu o tej samej klasie i 

konsoliduje go, wpisuj

ą

c jako kolejny do pliku .EXE

(4) powtarza kroki dla nast

ę

pnych klas

Segmenty - grupowanie

background image

Typowe definiowanie segmentów

...............zmienne

...............instrukcje

obszar stosu

background image

Segmenty

W procesorze rejestry segmentów np. : CS (+ FS), DS (+ GS), SS, ES.

U

Ŝ

ytkownik odpowiedzialny za za

ł

adowanie w

ł

a

ś

ciwych warto

ś

ci do 

rejestrów segmentowych. 

Przykład:

PROG

SEGMENT
ASSUME

CS: 

PROG

START

:

ADD 

AX, BX

ADD 

AX, CX

INT 3

PROG

ENDS

END 

START

Procesory z segmentacj

ą

 pami

ę

ci

background image

Segmenty

Dyrektywa ASSUME:

ASSUME segreg:segloc

Asembler wylicza przesuni

ę

cia, które wraz z zawarto

ś

ci

ą

rej. segment. 

okre

ś

laj

ą

pe

ł

ny adres.

Przesuni

ę

cia do danych z innego, ni

Ŝ

 bie

Ŝą

cy, 

segmentu poprzedza „adresem” tego segmentu

Dyrektywa informuje asembler jak

ą

warto

ść

rej. segment. ustali

ł

u

Ŝ

ytkownik. Nie generuje kodu ML!

ASSUME zwykle nie potrzebna dla CS (CS automatycznie przypisany 
do bie

Ŝą

cego segmentu programu

nazwa segmentu lub grupy 

(równowa

Ŝ

ne wyra

Ŝ

enie)

background image

Segmenty - ASSUME

Program omija wpis do rejestru 
segmentowego; dost

ę

p do danych 

ę

dnie

wykonany zostanie w segmencie 

DSEG1 (z przesuni

ę

ciami jak do 

segmentu DSEG2)!

background image

Segmenty - ASSUME

Dobra praktyka:

umie

ść

 ASSUME przed procedur

ą

.... je

ś

li tu nast

ę

pna procedura poprzed

ź

 j

ą

 dyrektyw

ą

 ASSUME

U

Ŝ

ywaj nazw w postaci: 

DS1:variable

background image

Grupowanie segmentów

Rozmieszczenie w pami

ę

ci

background image

Instrukcja początkowa programu

Dyrektywa END:

END symbol

Etykieta instrukcji startowej

Przykład