Upload
hadat
View
267
Download
5
Embed Size (px)
Citation preview
1
PROJEKTOVANJE ASEMBLERA
AsemblerModuli asemblera
2
Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program
ASEMBLER PROGRAM NA MAŠINSKOM
JEZIKU
PROGRAM NA ASEMBLERSKOM
JEZIKU
IZVRŠIVI PROGRAM NA MAŠ. JEZIKU
REZULTAT
Format instrukcije iSimbolički izrazi
Format asemblerske instrukcije: [labela] KOP [operandi] [komentar] Npr. START MOV AX,0 obrisi AX
Operandi su simbolički izrazi Izrazi se sastoje od simbola, brojeva i
operatora, kao što su: +, -, * Npr. 2 * (BEGINX - ENDX)
3
4
Problem prevođenja simboličkih izraza:
Simbolički izrazi se pojavljuju u asemblerskim iskazima u polju operanda (jmp loop, mov ax,loc...).Definicija simbola ne mora prethoditinjegovoj upotrebi.Prema tome asembler mora biti organizovan u dva prolaza.
5
Prvi i drugi prolaz asemblera:
Prvi prolaz: definicija vrednosti simbola, koji se pojavljuju u programu.Drugi prolaz: prevođenje na mašinske instrukcije i određivanje vrednosti operanada izračunavanjem izraza koji predstavljaju vrednost operanada u instrukciji.
6
TABELA SIMBOLA:
Definicija simbola predstavlja proces pridruživanja simbola sa brojem, koji predstavlja njegovu vrednost.Prvi prolaz dodeljuje memorijsku lokaciju svakoj instrukciji.TABELA SIMBOLA služi za upisivanje simbola i njima pridruženih vrednosti.
7
TABELA LITERALA:
Literali: specijalna vrsta simbola koji se odnose na konstante.Prvi prolaz dodeljuje memorijske lokacije i svim literalima u programu.TABELA LITERALA sadrži adresu ibinarni kod konstante koja odgovara datom literalu.
8
TABELA KODA OPERACIJE:
Ugrađena je u asembler.Ima po jednu vrstu za svaki simbolički kod operacije.Definiše razliku između mašinskih i pseudo operacija.
9
Drugi prolaz završava prevođenje:
Svaki izraz u polju operanda, definiše vrednost jednog od polja instrukcije.Simbolički kod operacije se zamenjujenjegovim numeričkim kodom.Vrednosti svih polja se skupljaju prema formatu instrukcije koja se prevodi.
10
Četiri osnovna modulaasemblera:
Modul za prvi prolaz,Modul za drugi prolaz,Modul za izračunavanje izraza, U I prolazu za obradu EQU, u II prolazu za
određivanje vrednosti operanada
Modul za konverziju konstanti. U I prolazu za obradu literala, u II prolazu
za obradu : DATA i literala
11
Odnosi između modula asemblera :
ASEMBLER
PRVI PROLAZ
DRUGI PROLAZ
IZRAČUNAVANJEIZRAZA
KONVERZIJA KONSTANTI
12
Tok informacija u prvom i drugom prolazu :
TABELA SIMBOLA
TABELA LITERALA
KOPIJA POLAZNOG PROGRAMA
OSTALE INFORMACIJE
PRVI PROLAZ
POLAZNI PROGRAM NA
ASEMBLERSKOM JEZIKU
DRUGI PROLAZ
DATOTEKA PREVEDENOGPROGRAMA
IZVEŠTAJ OPREVOĐENJU
Jednostavan primer (1/2)Kako se asemblira ovaj jednostavan program? Tabela KOP je naravno poznata unapred
13
TITLE PRVIBROJ DB 5,48
MOV AX, CS: BROJCMP AX, BROJ+1JNE DVA
DVA HLTEND
TKOPMNEMONIK KODMOV ... 2E A1CMP ... 2E 3B 06JNE ... 75HLT F4
Jednostavan primer (2/2)
14
MAŠINSKI PROGRAM T SLOKACIJA SADRŽAJ SIMBOL VREDNOST0000 05 BROJ 00000001 30 DVA 000D0002 2E0003 A10004 000005 000006 2E0007 3B0008 06 TKOP0009 01 MNEMONIK KOD000A 00 MOV ... 2E A1000B 75 CMP ... 2E 3B 06000C 00 JNE ... 75000D F4 HLT F4
TITLE PRVIBROJ DB 5,48
MOV AX, CS: BROJ
CMP AX, BROJ+1JNE DVA
DVA HLTEND
15
Primer BubleSort (1/3)1 DOSEG
2 0000 .MODEL SMALL
3 0000 .CODE
4 PUBLIC _BubbleSort
5 0000 _BubbleSort PROC
6 0000 55 push bp
7 0001 8B EC mov bp, sp
8 0003 56 push si ;sačuvaj registre
9 ; i promenljive
16
Primer BubleSort (2/3)10 0004 53 push bx
11 0005 33 DB xor bx, bx
12 0007 51 push cx
13 0008 33 C9 xor cx, cx
14 000A 52 push dx
15 000B 50 push ax
16 000C 33 C0 xor ax, ax
17
18 000E 8B 76 04 mov si, [bp+4] ; si pokazuje na niz
19 0011 4E dec si
17
Primer BubleSort (3/3)20 0012 8B 56 06 mov dx, [bp+6] ; broj znakova u dx
21 0015 8A F2 mov dh, dl
22 0017 FE CA dec dl
23 0019 B1 00 mov cl, 0 ; i=0
24
25 001B FirstLoop:
26 001B FE C1 inc cl ; i=i+1
27 001D 8A E9 mov ch, cl ; j=i
28 001F SecondLoop:
29 001F FE C5 inc ch ; j=j+1
18
I prolaz asemblera (1/3)Treba da definiše sve simboleZato dodeljuje memorijske lokacije za: Za svaku mašinsku instrukciju Za svaku konstantu koje generiše pseudo operacija : DATA
Za svaki memorijski blok rezervisan iskazom : BLOK p
Za svaku konstantu Koju generiše literal
19
I prolaz asemblera (2/3)Svi elementi se smeštaju u memoriju Počev od adrese 0, po redosledu u programu U tu svrhu se uvodi brojač lokacija koji ukazuje na prvi nedodeljen bajt u memoriji uvećava za vrednost zavisno od iskaza
Mašinska instrukcija: za dužinu instrukcije Pseudo instrukcija : DATA : za dužinu podataka koje
generiše izraz Pseudo instrukcija : BLOK p: za dužinu bloka koji se
rezerviše; tj. pa p Pseudo instrukcija koja ne generiše izlaz, npr. EQU: za 0
20
I prolaz asemblera (3/3)Definisanje simbola Unos simbola i brojača lokacije u tabelu simbola
Obrada literala Više literala može generisati istu konstantu Pravi se samo jedna instanca
Literal se konvertuje u binarnu vrednostDodatna info: dužina i ograničenja u pogledu
smeštanja
Prostor za literale se dodeljuje na kraju I prol.
21
BDA I prolaza (1/2)
START
BL=0
FORMIRATI DATOTEKE KOPIJERADI UPISA I OTVARANJA
C
ČITANJE LINIJE PROGRAMAOD znaka S0 do S7
DUŽINA NAZIVA = 0
NAZIV VEĆ U TAB.
SIMB.
UNOS NAZIVA U TABELU SIMBOLA
GREŠKA: VIŠESTRUKEDEFINICIJE
ODSTRANI SUVIŠNE PRAZNINE; UTVRDI POZICIJU NAZIVA KODAOPERACIJE I POLJA OPERANDA
MNEMONIČKI KOD ?
U POLJU OPERANDA
LITERALKONVERZIJA KONSTANTE: 1. KONVERTOVANA KONSTANTA2. DUŽINA KONSTANTE 3. PODEŠENOST K = DUŽINA MAŠINSKE
INSTRUKCIJE BL = BL + K PRETRAŽITI TABELU
LITERALA
REČ U TABELI
LITERALA
SMESTITI 1, 2 I 3 U TABELU LITERALA
A
DA
DANE
NE DA
NE
DA
NE
X
22
BDA I prolaza (2/2)
A
: BLOK pBL=BL+p
C
DA
NE
: DATA
NE
DA
USLOVI SMEŠTANJAZA PRVI ELEMENAT
K = BROJ BAJTA ZA PODEŠAVANJE
EQU
NE
DA
IZR_IZRAZ
DEFINIŠI SIM(VREDNOST IZ
IZR_IZRAZ)
C
END
DANE
DRUGIPROLAZ
BL=BL+K
DEFINIŠI SIMBOL(BL)
i = INDEKS U SPRVOG ZNAKA U
POLJU OPERANDA
USLOVE SMEŠTANJAZA ELEMEN. U S(i)
K = BR. BAJTA PODEŠAVANJA +
DUŽINA ELEMENTA
BL=BL+K
i = INDEKS
i = i + 1
S(i-1)=''
C
23
II prolaz asemblera (1/2)Asembliranje mašinskih instrukcijaOdređivanje svakog polja instrukcije: Kod operacije iz tabele KOP Konverzija i asembliranje konstanti : DATA Mora se uračunati potreba za popunom
Zauzimanje prostora za blok : BLOK pMora se uračunati potreba za popunom
Pseudo operacije koje ne generišu izlaz Već su obrađene – jednostavno se ignorišu
24
II prolaz asemblera (2/2)Izlazi: mašinski kod (.obj) i izveštaj (.lst)Izveštaj (listing): Redni broj linije i ukazivač greške Adresa memorijske lokacije (relativno od 0) Generisani mašinski kod i podaci Izvorni asemblerski kod
25
BDA II prolaza (1/8)
START
NE
DA
OTVORI DATOTEKU KOPIJE
KRAJ DATOTEKE
KOPIJE
RETURN
BL = 0
UČITAJ SLEDEĆU INSTRUK.I PRIDRUŽI INDIKATORU
U S I REČ INDIKATORA
BL – BROJAČ LOKACIJA
U SLOG LISTINGA POSTAVI PRAZNA MESTA
P_out = 1
LOCIRAJ LABELU, MNEMONIK, OPERACIJU I OPERANDE
NE
MAŠINSKA INSTRUKCIJA
EQU ?
OBRADI MAŠINSKU INSTRUKCIJU
: BLOK p
C
DA
ODREDI EQU PSEUDOINSTRUKCIJU
OBRADI :BLOK p PSEUDO INSTRUKCIJU
A
A
A
B
26
BDA II prolaza (2/8)
P_out 0
: DATA DA
NE
OBRADI : DATA PSE. INSTRUKCIJU
END?
DA
NE
OBRADI ENDPSE. INSTRUKCIJU
START?
DA
NE
OBRADI STARTPSE. INSTRUKCIJU
ISPIŠI LINIJULISTINGA
P_out = 1
ADA
NE ISPIŠI LINIJULISTINGA
C
B
A
A
A
27
BDA II prolaza (3/8)
START
J indeks koda operacije tekuće instrukcije u tabeli kodova operacije
OP brojna vrednost koda operacije iz tabele kodova operacije
TIP tip operacije iz tabele kodova operacije
I indeks prvog znaka iz polja operanda u S
OBRADI POLJE OPERANDA
FORMIRAJ INSTRUKCIJU
RETURN
OBRADI MAŠINSKU INSTRUKCIJU
28
BDA II prolaza (4/8)
START
PRONAĐI STAVKU U TAB. SIMB. U KOJOJ JE SMEŠTEN SIMB. IZ POLJA LABELE
RETURN
OBRADI EQU PSEUDO INSTRUKCIJU
IZVUCI VREDN. SIMBOLA IZ OVE STAVKE
ZAPIŠI VREDNOST SIMB. ZAJEDNO SA IZVORNOM INSTRUKCIJOM
29
BDA II prolaza (5/8) START
i indeks prvog znaka polja operanda u S
K veličina popune za stavaku koja počinje sa S(i)
n broj ponavljanja od tekuće stavke
i indeks tipa znaka koji prati broj ponavljanja
RETURN
OBRADI : DATA PSEUDO INSTRUKCIJU
NE
DA
S(i) prazno mesto
konvertuj konstantu
K broj bajtova u bloku
i i + 1
popuni blok ponavljanjem n puta konvertovane konastante
30
BDA II prolaza (6/8)
START
i indeks prvog znaka polja operanda u S
i indeks sledećeg zareza ili praznog mesta u S
RETURN
OBRADI : BLOK PSEUDO INSTRUKCIJU
NE
DA
S(i) prazno mesto
i i + 1
k 0
k k + (veličina stavke koja počinje sa S(i))
31
BDA II prolaza (7/8)
START
KONST konstanta iz tabele literala
K veličina popune potrebne za ponavljanje konstante
zapiši popunu u program objekta
RETURN
OBRADI END PSEUDO INSTRUKCIJU
NE
DA
i > indeks zad. stavke tabele lit.
i i + 1
i 0
K veličina konstante
zapiši konstantu u program objekta
zapiši slog kraja u program objekta
zatvori datoteku programa objekta
obriši datoteku kopije
32
BDA II prolaza (8/8)
START
POVRATAK
Disp (N, TIP, LOK)
BL = BL + N
TIP = ' INFO '
STANJE NA IZLAZ
NE
D A
33
Izračunavanje izraza ikonverzija konstanti
Proučiti iz knjige