You are on page 1of 34

Način asembliranja jednoprolaznih i

dvoprolaznih asemblera
prof.dr.sc. Mario Kovač, prof.dr.sc. Danko Basch
Ovaj dokument namijenjen je isključivo za osobnu upotrebu studentima
Fakulteta elektrotehnike i računarstva Sveučilišta u Zagrebu.
Svaka druga upotreba ili umnožavanje bilo kojeg dijela ovog dokumenta
nije dozvoljena bez pismene dozvole autora.
© Mario Kovač, Danko Basch

Za pregledavanje ovog dokumenta


pokrenite prezentaciju (tipkom F5) jer se
inače animacije neće dobro vidjeti.

© Kovač, Basch, FER, 1


Asembleri - Opći način rada
• Asembleri obrađuju mnemoničku datoteku u jednom ili više
prolaza

• Pod prolazom se misli na čitanje cijele mnemoničke datoteke


i njeno (djelomično ili potpuno) prevođenje

• Datoteka se čita redak po redak i obrađuje se svaki redak


zasebno (što je moguće zbog nezavisnosti redaka)

• Zbog jednostavne sintakse mnemoničke datoteke,


prevođenje je također vrlo jednostavno:
• Možemo promatrati kao da asemblerski prevoditelj ima tablicu
svih naredaba procesora u kojoj za svaku naredbu pamti njen
mnemonički oblik i strojni kôd
• Pojednostavljeno: asembler svaku naredbu traži u tablici i
zamjenjuje je njenim strojnim kôdom

© Kovač, Basch, FER, 2


Jednoprolazni asembleri - način rada
• Jednoprolazni asembleri nazivaju se apsolutnima jer ne
mogu koristiti labele, nego samo adrese zadane brojem
(tzv. apsolutno asemblersko adresiranje)

• Ovo ograničenje otežava pisanje mnemoničkih programa


i onemogućava stvaranje premjestivog strojnog kôda jer
su sve adrese zadane apsolutnim iznosima

• Način rada je jednak opisanom na prethodnom slajdu

• Svaki redak datoteke moguće je prevesti u samo jednom


prolazu (osim, naravno, u slučaju pogrešno napisanog
retka)

© Kovač, Basch, FER, 3


Jednoprolazni asembleri - način rada
• Asemblerski prevoditelji imaju varijablu u kojoj uvijek
pamte adresu naredbe koju prevode
• Uočite analogiju s PC-om u procesoru koji pamti adresu
naredbe koju treba sljedeću izvesti

• Ovu varijablu nazvat ćemo lokacijsko brojilo


• Na početku prevođenja, lokacijsko brojilo postavlja se na
početnu adresu
• Tijekom prevođenja lokacijsko brojilo se povećava za veličinu
prethodno prevedene naredbe

• Pri objašnjavanju načina rada asemblera, na sljedećim


slajdovima ćemo radi jednostavnosti pretpostaviti da se
svaka naredba ili podatak prevode u JEDNU memorijsku
lokaciju

© Kovač, Basch, FER, 4


Jednoprolazni asembleri - način rada
• Primjer prevođenja:
Mnemonička datoteka: Datoteka sa strojnim
kôdom:
ADD R0, R1, R1
STORE R1,(3)
JP 0
`DW 0

U prvom (i jedinom) prolazu,


čita se redak po redak
mnemoničke datoteke

© Kovač, Basch, FER, 5


Jednoprolazni asembleri - način rada
• Primjer prevođenja:
Mnemonička datoteka: Datoteka sa strojnim
kôdom:
ADD R0, R1, R1
STORE R1,(3)
JP 0
`DW 0

Asemble Traži
r Tablica
naredaba:
STORE:
111_____
LOAD:
FF4_____
...
Lokacijsko ADD: 22331
brojilo: 22331234 234
0 ++ JP:
674_____
© Kovač, Basch, FER, 6
Jednoprolazni asembleri - način rada
• Primjer prevođenja:
Mnemonička datoteka: Datoteka sa strojnim
kôdom:
ADD R0, R1, R1 0 22331
STORE R1,(3) 234
JP 0
`DW 0

Asemble
r Tablica
naredaba:
STORE:
111_____
LOAD:
FF4_____
...
Lokacijsko ADD: 22331
brojilo: 22331234 234
1 JP:
674_____
© Kovač, Basch, FER, 7
Jednoprolazni asembleri - način rada
• Primjer prevođenja:
Mnemonička datoteka: Datoteka sa strojnim
kôdom:
ADD R0, R1, R1 0 22331
STORE R1,(3) 234
JP 0
`DW 0

Asemble Traži
r 0 Tablica
000 naredaba:
STORE: 111
3 111_____
LOAD:
FF4_____
...
Lokacijsko ADD:
brojilo: 22331234
1 ++ JP:
674_____
© Kovač, Basch, FER, 8
Jednoprolazni asembleri - način rada
• Primjer prevođenja:
Mnemonička datoteka: Datoteka sa strojnim
kôdom:
ADD R0, R1, R1 0 22331
STORE R1,(3) 1 234
11100
JP 0 003
`DW 0

Asemble
r Tablica
naredaba:
STORE:
111_____
LOAD:
FF4_____
...
Lokacijsko ADD: 22331
brojilo: 22331234 234
2 JP:
674_____
© Kovač, Basch, FER, 9
Jednoprolazni asembleri - način rada
• Primjer prevođenja:
Mnemonička datoteka: Datoteka sa strojnim
kôdom:
ADD R0, R1, R1 0 22331
STORE R1,(3) 1 234
11100
JP 0 003
`DW 0

Asemble Traži
r 0 Tablica
000 naredaba:
STORE:
0 111_____
LOAD:
FF4_____
...
Lokacijsko ADD:
brojilo: 22331234
2 ++ JP: 674
674_____
© Kovač, Basch, FER, 10
Jednoprolazni asembleri - način rada
• Primjer prevođenja:
Mnemonička datoteka: Datoteka sa strojnim
kôdom:
ADD R0, R1, R1 0 22331
STORE R1,(3) 1 234
11100
JP 0 2 67400
003
`DW 0 000

Asemble
r Tablica
naredaba:
STORE:
111_____
LOAD:
FF4_____
...
Lokacijsko ADD: 22331
brojilo: 22331234 234
3 JP:
674_____
© Kovač, Basch, FER, 11
Jednoprolazni asembleri - način rada
• Primjer prevođenja:
Mnemonička datoteka: Datoteka sa strojnim
kôdom:
ADD R0, R1, R1 0 22331
STORE R1,(3) 1 234
11100
JP 0 2 67400
003
`DW 0 000

Asemble
r Tablica
naredaba:
00000 STORE:
000 111_____
LOAD:
FF4_____
...
Lokacijsko ADD:
brojilo: 22331234
3 ++ JP:
674_____
© Kovač, Basch, FER, 12
Jednoprolazni asembleri - način rada
• Primjer prevođenja:
Mnemonička datoteka: Datoteka sa strojnim
kôdom:
ADD R0, R1, R1 0 22331
STORE R1,(3) 1 234
11100
JP 0 2 67400
003
`DW 0 3 000
00000
000
Asemble
r Tablica
naredaba:
KRAJ STORE:
PREVOĐENJA 111_____
LOAD:
FF4_____
...
Lokacijsko ADD: 22331
brojilo: 22331234 234
4 JP:
674_____
© Kovač, Basch, FER, 13
Dvoprolazni asembleri - način rada
• Dvoprolazni asembleri nazivaju se simboličkim jer mogu
koristiti labele, odnosno adrese zadane simbolima (tzv.
simboličko asemblersko adresiranje)

• Ovo adresiranje olakšava pisanje mnemoničkih programa i


omogućava stvaranje premjestivog strojnog kôda jer adrese
ne moraju biti zadane apsolutnim iznosima

• Ovaj asembler, u odnosu na jednoprolazni, dodatno ima


tablicu labela
>>>>

© Kovač, Basch, FER, 14


Dvoprolazni asembleri - način rada
• TABLICA LABELA:

• U tablici labela se za svaku labelu pamti njeno ime i njena


vrijednost, tj. pamti se adresa koju labela predstavlja:

Ime labele Vrijednost labele


PETLJA_1 327
NATRAG 12
... ...

• Tablica labela se popunjava kad prevoditelj pronađe


labelu u prvom stupcu retka (tj. definiciju labele). Kao
vrijednost labele u tablici se pamti trenutačna vrijednost
lokacijskog brojila

© Kovač, Basch, FER, 15


Dvoprolazni asembleri - način rada
• Prilikom prevođenja naredbe koja koristi labelu,
prevoditelj pretražuju tablicu labela:
• Ako se labela pronađe, u naredbi se umjesto labele stavlja
vrijednost labele i naredba se prevodi do kraja
• Ako se labela ne pronađe, naredba se označi kao neprevedena i
njeno prevođenje se odgađa za drugi prolaz

• Dva prolaza su potrebna jer je moguće da se labela u


naredbi koristi prije nego se navede na početku nekog retka

• U drugom prolasku prevode se one naredbe koje su ostale


neprevedene u prvom prolazu. To je moguće jer će u prvom
prolazu biti zapamćene sve labele (naravno, osim ako neku
labelu zabunom ne ispustimo)

© Kovač, Basch, FER, 16


Dvoprolazni asembleri - način rada
• Primjer prevođenja:
Mnemonička datoteka: Datoteka sa strojnim
kôdom:
LAB1 ADD R7,R5,R2
STORE R2,(REZ)
JP LAB1
REZ `DW 0

U prvom prolazu, čita se


redak po redak mnemoničke
datoteke

© Kovač, Basch, FER, 17


Dvoprolazni asembleri - način rada
• Primjer prevođenja:
Mnemonička datoteka: Datoteka sa strojnim
kôdom:
LAB1 ADD R7,R5,R2
STORE R2,(REZ)
JP LAB1
REZ `DW 0

Asemble LAB1 Traži


r Tablica
Tablica labela: Labela u naredaba:
STORE:
retku
111_____
LOAD:
FF4_____
...
Lokacijsko ADD: 22331
brojilo: 22331234
234
0 ++ JP:
674_____
© Kovač, Basch, FER, 18
Dvoprolazni asembleri - način rada
• Primjer prevođenja:
Mnemonička datoteka: Datoteka sa strojnim
kôdom:
LAB1 ADD R7,R5,R2 0 22331
STORE R2,(REZ) 234
JP LAB1
REZ `DW 0

Asemble
r Tablica
Tablica labela: naredaba:
STORE:
LAB1 0 111_____
LOAD:
FF4_____
...
Lokacijsko ADD:
brojilo: 22331234
1 JP:
674_____
© Kovač, Basch, FER, 19
Dvoprolazni asembleri - način rada
• Primjer prevođenja:
Mnemonička datoteka: Datoteka sa strojnim
kôdom:
LAB1 ADD R7,R5,R2 0 22331
STORE R2,(REZ) 234
JP LAB1
REZ `DW 0

Asemble Traži
r Tablica
Tablica labela: Traži naredaba:
STORE:111
LAB1 0
REZ 111_____
LOAD:
FF4_____
...
Lokacijsko ADD:
brojilo: 22331234
1 ++ JP:
674_____
© Kovač, Basch, FER, 20
Dvoprolazni asembleri - način rada
• Primjer prevođenja:
Mnemonička datoteka: Datoteka sa strojnim
kôdom:
LAB1 ADD R7,R5,R2 0 22331
STORE R2,(REZ) 1 234
111
JP LAB1
REZ `DW 0

Asemble
r Tablica
Tablica labela: naredaba:
STORE:
LAB1 0 111_____
LOAD:
FF4_____
...
Lokacijsko ADD:
brojilo: 22331234
2 JP:
674_____
© Kovač, Basch, FER, 21
Dvoprolazni asembleri - način rada
• Primjer prevođenja:
Mnemonička datoteka: Datoteka sa strojnim
kôdom:
LAB1 ADD R7,R5,R2 0 22331
STORE R2,(REZ) 1 234
111
JP LAB1
REZ `DW 0

Asemble Traži
r Tablica
Tablica labela: Traži naredaba:
STORE:
LAB1 111_____
LAB1 0 0000 LOAD:
0 FF4_____
...
Lokacijsko ADD:
brojilo: 22331234
2 ++ JP: 674
674_____
© Kovač, Basch, FER, 22
Dvoprolazni asembleri - način rada
• Primjer prevođenja:
Mnemonička datoteka: Datoteka sa strojnim
kôdom:
LAB1 ADD R7,R5,R2 0 22331
STORE R2,(REZ) 1 234
111
JP LAB1 2 67400
REZ `DW 0 000

Asemble
r Tablica
Tablica labela: naredaba:
STORE:
LAB1 0 111_____
LOAD:
FF4_____
...
Lokacijsko ADD:
brojilo: 22331234
3 JP:
674_____
© Kovač, Basch, FER, 23
Dvoprolazni asembleri - način rada
• Primjer prevođenja:
Mnemonička datoteka: Datoteka sa strojnim
kôdom:
LAB1 ADD R7,R5,R2 0 22331
STORE R2,(REZ) 1 234
111
JP LAB1 2 67400
REZ `DW 0 000

Asemble REZ 00000


r Tablica
000 naredaba:
Tablica labela: Labela u STORE:
retku 111_____
LAB1 0 LOAD:
FF4_____
...
Lokacijsko ADD:
brojilo: 22331234
3 ++ JP: 674
674_____
© Kovač, Basch, FER, 24
Dvoprolazni asembleri - način rada
• Primjer prevođenja:
Mnemonička datoteka: Datoteka sa strojnim
kôdom:
LAB1 ADD R7,R5,R2 0 22331
STORE R2,(REZ) 1 234
111
JP LAB1 2 67400
REZ `DW 0 3 000
00000
000
Asemble
r KRAJ PRVOG PROLAZA Tablica
Tablica labela: naredaba:
STORE:
TABLICA LABELA JE 111_____
LAB1 0 LOAD:
POPUNJENA
REZ 3 FF4_____
...
Lokacijsko ADD:
brojilo: 22331234
4 JP:
674_____
© Kovač, Basch, FER, 25
Dvoprolazni asembleri - način rada
• Primjer prevođenja:
Mnemonička datoteka: Datoteka sa strojnim
kôdom:
LAB1 ADD R7,R5,R2 0 22331
STORE R2,(REZ) 1 234
111
JP LAB1 2 67400
REZ `DW 0 3 000
00000
000
Asemble
r POČINJE DRUGI Tablica
Tablica labela: PROLAZ naredaba:
STORE:
LAB1 0 111_____
LOKACIJSKO BROJILO LOAD:
REZ 3 SE VRAĆA NA 0 FF4_____
...
Lokacijsko ADD:
brojilo: 22331234
0 JP:
674_____
© Kovač, Basch, FER, 26
Dvoprolazni asembleri - način rada
• Primjer prevođenja:
Mnemonička datoteka: Datoteka sa strojnim
kôdom:
LAB1 ADD R7,R5,R2 0 22331
STORE R2,(REZ) 1 234
111
JP LAB1 2 67400
REZ `DW 0 3 000
00000
000
Asemble
r Tablica
Tablica labela: NEMA OZNAKU : naredaba:
STORE:
REDAK SE PRESKAČE 111_____
LAB1 0 LOAD:
REZ 3 FF4_____
...
Lokacijsko ADD:
brojilo: 22331234
0 ++ JP:
674_____
© Kovač, Basch, FER, 27
Dvoprolazni asembleri - način rada
• Primjer prevođenja:
Mnemonička datoteka: Datoteka sa strojnim
kôdom:
LAB1 ADD R7,R5,R2 0 22331
STORE R2,(REZ) 1 234
111
JP LAB1 2 67400
REZ `DW 0 3 000
00000
000
Asemble
r Tablica
Tablica labela: naredaba:
STORE:
LAB1 0 111_____
LOAD:
REZ 3 FF4_____
...
Lokacijsko ADD:
brojilo: 22331234
1 JP:
674_____
© Kovač, Basch, FER, 28
Dvoprolazni asembleri - način rada
• Primjer prevođenja:
Mnemonička datoteka: Datoteka sa strojnim
kôdom:
LAB1 ADD R7,R5,R2 0 22331
STORE R2,(REZ) 1 234
111
JP LAB1 2 67400
REZ `DW 0 3 000
00000
000
Asemble Traži
r Tablica
Tablica labela: Traži
IMA OZNAKU : naredaba:
STORE:111
LAB1 0
REZREDAK SE PREVODI 111_____
LOAD:
REZ 3 0000 FF4_____
...
3
Lokacijsko ADD:
brojilo: 22331234
1 ++ JP:
674_____
© Kovač, Basch, FER, 29
Dvoprolazni asembleri - način rada
• Primjer prevođenja:
Mnemonička datoteka: Datoteka sa strojnim
kôdom:
LAB1 ADD R7,R5,R2 0 22331
STORE R2,(REZ) 1 234
11100
JP LAB1 2 67400
003
REZ `DW 0 3 000
00000
000
Asemble
r Tablica
Tablica labela: naredaba:
STORE:
LAB1 0 111_____
LOAD:
REZ 3 FF4_____
...
Lokacijsko ADD:
brojilo: 22331234
2 JP:
674_____
© Kovač, Basch, FER, 30
Dvoprolazni asembleri - način rada
• Primjer prevođenja:
Mnemonička datoteka: Datoteka sa strojnim
kôdom:
LAB1 ADD R7,R5,R2 0 22331
STORE R2,(REZ) 1 234
11100
JP LAB1 2 67400
003
REZ `DW 0 3 000
00000
000
Asemble
r Tablica
Tablica labela: NEMA OZNAKU : naredaba:
STORE:
REDAK SE PRESKAČE 111_____
LAB1 0 LOAD:
REZ 3 FF4_____
...
Lokacijsko ADD:
brojilo: 22331234
2 ++ JP:
674_____
© Kovač, Basch, FER, 31
Dvoprolazni asembleri - način rada
• Primjer prevođenja:
Mnemonička datoteka: Datoteka sa strojnim
kôdom:
LAB1 ADD R7,R5,R2 0 22331
STORE R2,(REZ) 1 234
11100
JP LAB1 2 67400
003
REZ `DW 0 3 000
00000
000
Asemble
r Tablica
Tablica labela: naredaba:
STORE:
LAB1 0 111_____
LOAD:
REZ 3 FF4_____
...
Lokacijsko ADD:
brojilo: 22331234
3 JP:
674_____
© Kovač, Basch, FER, 32
Dvoprolazni asembleri - način rada
• Primjer prevođenja:
Mnemonička datoteka: Datoteka sa strojnim
kôdom:
LAB1 ADD R7,R5,R2 0 22331
STORE R2,(REZ) 1 234
11100
JP LAB1 2 67400
003
REZ `DW 0 3 000
00000
000
Asemble
r Tablica
Tablica labela: NEMA OZNAKU : naredaba:
STORE:
REDAK SE PRESKAČE 111_____
LAB1 0 LOAD:
REZ 3 FF4_____
...
Lokacijsko ADD:
brojilo: 22331234
3 ++ JP:
674_____
© Kovač, Basch, FER, 33
Dvoprolazni asembleri - način rada
• Primjer prevođenja:
Mnemonička datoteka: Datoteka sa strojnim
kôdom:
LAB1 ADD R7,R5,R2 0 22331
STORE R2,(REZ) 1 234
11100
JP LAB1 2 67400
003
REZ `DW 0 3 000
00000
000
Asemble
r KRAJ DRUGOG PROLAZA Tablica
Tablica labela: I CIJELOG PREVOĐENJA naredaba:
STORE:
LAB1 0 111_____
DATOTEKA JE LOAD:
REZ 3 FF4_____
PREVEDENA ...
Lokacijsko ADD:
brojilo: 22331234
4 JP:
674_____
© Kovač, Basch, FER, 34

You might also like