33
1 PROJEKTOVANJE ASEMBLERA Asembler Moduli asemblera

Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

  • Upload
    hadat

  • View
    267

  • Download
    5

Embed Size (px)

Citation preview

Page 1: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

1

PROJEKTOVANJE ASEMBLERA

AsemblerModuli asemblera

Page 2: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

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

Page 3: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

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

Page 4: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

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.

Page 5: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

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.

Page 6: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

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.

Page 7: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

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.

Page 8: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

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.

Page 9: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

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.

Page 10: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

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

Page 11: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

11

Odnosi između modula asemblera :

ASEMBLER

PRVI PROLAZ

DRUGI PROLAZ

IZRAČUNAVANJEIZRAZA

KONVERZIJA KONSTANTI

Page 12: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

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

Page 13: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

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

Page 14: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

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

Page 15: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

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

Page 16: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

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

Page 17: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

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

Page 18: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

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

Page 19: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

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

Page 20: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

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.

Page 21: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

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

Page 22: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

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

Page 23: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

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

Page 24: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

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

Page 25: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

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

Page 26: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

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

Page 27: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

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

Page 28: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

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

Page 29: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

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

Page 30: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

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

Page 31: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

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

Page 32: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

32

BDA II prolaza (8/8)

START

POVRATAK

Disp (N, TIP, LOK)

BL = BL + N

TIP = ' INFO '

STANJE NA IZLAZ

NE

D A

Page 33: Asembler Moduli asemblera - rt-rk.uns.ac.rs Poglavlje 2... · 2 Asembler je program koji prevodi polazni ili izvorni program napisan na asemblerskom jeziku u izvršivi mašinski program

33

Izračunavanje izraza ikonverzija konstanti

Proučiti iz knjige