uvod u asemblerski jezik vi poglavlje - karakteristike –
DESCRIPTION
Uvod u asemblerski jezik VI poglavlje - Karakteristike –. Uvod u asemblerski jezik. Skup instrukcija mikroprocesora predstavlja skup binarnih ula z a koji generi š u odredjene akcije u toku ciklusa jedne instrukcije. Primer :. - PowerPoint PPT PresentationTRANSCRIPT
Uvod u asemblerski jezik
VI poglavlje
- Karakteristike –
Skup instrukcija mikroprocesora predstavlja skup binarnih ulaza koji generišu odredjene akcije u toku ciklusa jedne instrukcije
Primer :
Verzija instrukcije na mašinskom jeziku za mikroprocesor MC 68000 koja glasi:
"Napuni neposredni decimalni operand 2001 na adresu na koju ukazuje registar A“
ima sledeći 32-bitni format:
0010 0000 0111 1000 0000 0111 1101 0001
Uvod u asemblerski jezikUvod u asemblerski jezik
Primer :
Za mikroprocesor MC 68000 sekvenca :
“Izvrši sabiranje sadržaja dve memorijske lokacije 600016 i 600216, a rezultat smesti u memorijsku lokaciju 600416“
imaće sledeći oblik: 0011 0000 0011 1000
0110 0000 0000 0000
1101 0000 0111 1000
0110 0000 0000 0000
0011 0001 1100 0000
0110 0000 0000 0100
Ovo predstavlja mašinski jezik, ili objektni (object) kôd (program) i njega će mašina direktno izvršavati, tj. ovakav program koga čini
sekvenca 0 i 1 mašina jedino i razume
AAsemblerski jeziksemblerski jezik
Kreiranje programa na mašinskom jeziku se može iskazati kroz sledeća zapažanja:
programi su teški za razumevanje, veoma teško se nalaze greške, a iste nakon toga koriguju
instrukcije se teško unose u mašinu, kuca se bit po bit, a zatim se cela reč unosi u paralelnoj formi
programer često iz nehata čini greške koje je veoma teško locirati, a nakon toga korigovati
programi ne poseduju komentar koji će programeru olakšati rad
programi su dugački i zamorni za analizu
AAsemblerski jeziksemblerski jezik - osobine - osobine
Preglednost programa se može poboljšati ako se binarana forma
0011 0000 0011 1000
0110 0000 0000 0000
1101 0000 0111 1000
0110 0000 0000 0010
0011 0001 1100 0000
0110 0000 0000 0100
napiše u heksadecimalnoj brojnoj notaciji
AAsemblerski jeziksemblerski jezik – binarna forma – binarna forma
3 0 3 8
6 0 0 0
C 0 7 8
6 0 0 2
7 1 C 0
6 0 0 4
Program koji konvertuje heksadecimalne brojeve u binarne i smešta u memoriju se naziva
"heksadecimalni punilac" – (hexadecimal loader)
AAsemblerski jeziksemblerski jezik – heksadecimalna – heksadecimalna formaforma
Programsko poboljšanje se postiže dodeljivanjem imena svakom instrukcionom kôdu
Ime kôda instrukcije zove se mnemonik
Mnemonik opisuje sa minimalnim brojem znakova šta instrukcija radi
Primer :Add za sabiranje
Sub za oduzimanje
Programska sekvenca za MC 68000, kada se koriste mnemonici, ima sledeći oblik
Move.W $6000, D0
Add.W $6000, D0
Move.W D0,$6004
program napisan na asemblerskom jeziku
AAsemblerski jeziksemblerski jezik – mnemonici – mnemonici
Asemblerski program (asembler) vrši prevodjenje korisničkog programa ili izvornog programa, napisanog
pomoću mnemonika, u program na mašinskom jeziku, ili objektni program, koga će mikroračunar izvršavati
Ulaz u asembler je izvorni program
Izlaz iz asemblera je objektni (izvršivi) program
Move.W $6000, D0
Add.W $6000, D0
Move.W D0,$6004
Za programsku sekvencu
kažemo da je napisana na asemblerskom jeziku
Proces aProces asemblsembliranjairanja
Programer koristi usluge tekst editora za kreiranje tekst datoteke (text file) koja sadrži program napisan na asemblerskom jeziku.
Imena izvorna datoteka (source file) i izvorni program (source program) se često koriste u asemblerskom jeziku i jezicima višeg nivoa da označe tekst datoteke.
Asembler prihvata izvorni program kao ulaz, vrši proveru formata zbog grešaka u pisanju i proizvodi objektni modul koji sadrži program napisan na mašinskom jeziku
Proces razvoja programa na aProces razvoja programa na asemblsemblerskom erskom jezikujeziku
Punilac (loader) smešta objektni modul u memoriju na kojoj će se program izvršavati (ciljna mašina - target machine)
Na ciljnoj mašini program se testira pomoću programa za odstranjivanje grešaka (debugger)
Proces razvoja programa na Proces razvoja programa na aasemblsemblerskom jezikuerskom jeziku
Steps in transforming an assembly Steps in transforming an assembly language program to an executable language program to an executable
program residingprogram residing
Lin
ker
Lo
ad
er
Ass
em
ble
r
add $2,$5,$5 add $2,$2,$2 add $2,$4,$2 lw $15,0($2) lw $16,4($2) sw $16,0($2) sw $15,4($2) jr $31
00a51020 00421020 00821020 8c620000 8cf20004 acf20000 ac620004 03e00008
Assembly language program
Machine language program
Executable machine language program
Memory content
Library routines (machine language)
MIPS, 80x86, PowerPC, etc.
An assembly language program, its machine-An assembly language program, its machine-language version, and the symbol table created language version, and the symbol table created
during the assembly processduring the assembly process
0 00100000000100000000000000001001
addi $s0,$zero,9
test
done result
12
28 248
4 00000010000100000100000000100010 8 00000001001000000000000000100000 12 00010101000100000000000000001100 16 00100001000010000000000000000001 20 00000010000000000100100000100000 24 00001000000000000000000000000011 28 10101111100010010000000011111000
Determined from assembler directives not shown here
Symbol table
done: sw $t1,result($gp)
sub $t0,$s0,$s0 add $t1,$zero,$zero test: bne $t0,$s0,done addi $t0,$t0,1 add $t1,$s0,$zero j test
Assembly language program Machine language program Location
op rs rt rd sh fn Field boundaries shown to facilitate understanding
Generisanje izvršivih binarnih programa iz Generisanje izvršivih binarnih programa iz skupa nezavisno prevedenih izvornih skupa nezavisno prevedenih izvornih procedura zahteva korišćenje linkera procedura zahteva korišćenje linkera
Kros-aKros-asemblersembler
Punilac, odstranjivač grešaka i program na mašinskom jeziku moraju da se izvršavaju na ciljnoj mašini, dok tekst editor i asembler mogu se izvršavati na drugoj (različitoj) mašini. Asembler koji se izvršava na jednoj mašini, a proizvodi (generiše) objektne module za drugu mašinu zove se kros-asembler (cross-assembler). Proces punjenja (loading) objektnog modula sa mašine na kojoj je izvršeno kros asembliranje u ciljnu mašinu (down load) obično se izvodi serijskom komunikacionom vezom.
The structure of a typical assembly The structure of a typical assembly language programlanguage program
Constant Definitions
Main Program
Subroutines
Library Definitions
Global Variables
String Constants
Kada programer vrši programiranje na asemblerskom jeziku, on mora strogo da zna :
Asembler nije prenosiv
Svaki mikroračunar ima svoj sopstveni asemblerski jezik koji odražava njegovu sopstvenu arhitekturu.
Asebmlerski program napisan za MC 68020 neće raditi na mikroračunaru zasnovanom na iAPX486 ili bilo kom drugom mikroprocesoru
koji će mikroračunar koristiti
koje registre i instrukcije dotični mikroračunar poseduje
koje adresne načine rada koristi, i puno drugih detalja
Karakteristike asemblerskog jezikaKarakteristike asemblerskog jezika
asemblerski jezik je jezik kod koga svaka instrukcija generiše tačno jednu mašinsku instrukciju.
postoji korespondencija jedan-prema-jedan izmedju mašinskih instrukcija i instrukcija na asemblerskom programu.
postoji onoliko asemberskih jezika koliko postoji i različitih mikroprocesora
Karakteristike asemblerskog jezika Karakteristike asemblerskog jezika – – produžetak -produžetak -
Za odredjivanje vrednosti algebarskog izraza X=Y+Z kod jednih procesora se koristi instrukcija
Add X,Y,Z
a kod drugih (mikroprocesora) instrukcija
Add Y,Z,X
Sagledavajući ograman broj nedostataka programiranja na asemblerskom jeziku udruženje IEEE oformila je radnu grupu IEEE P 694 koja je imala zadatak da standardizuje mnemonike asemblerskog jezika.
Na žalost preporuke ove grupe nisu široko prihvaćene od strane industrije.
Karakteristike asemblerskog jezikaKarakteristike asemblerskog jezika- nekonzistentnost -- nekonzistentnost -
Nezavisno od toga što su pokušaji standardizacije propali ostali su tragovi tog rada za koje se čini da su prećutno šire prihvaćeni od strane proizvodjača RISC procesora a koji se odnose na:
specifikaciju imena mnemonika
definiciju tipa modifikatora
uslove grananja
dogovor o korišćenju formata ALU instrukcija
Karakteristike asemblerskog jezikaKarakteristike asemblerskog jezika- pokušaj standardizacije -- pokušaj standardizacije -
mnemonikmnemonik operacijaoperacijaAdd sabiranje
Sub oduzimanje
Mul množenje
Div deljenje
Inc inkrementiranje
Dec dekrementiranje
Cmp kompariranje
Move kopiranje
Clr brisanje (sadržaja registra)
Ld punjenje (registra iz memorije)
St smeštaj (sadržaja registra u memoriju)
Lda punjenje adreses u registar
Ldm punjenje većeg broja registara
Stm smeštaj većeg broja registara
Shl pomeranje u levo
Shr pomeranje u desno
Br bezuslovno grananje
Bc uslovno grananje
Bal grananje i povezivanje
Bal R grananje na registar i povezivanje
imena najčešće imena najčešće
korišćenih mnemonikakorišćenih mnemonika
KarakteristikKarakteristike e
asemblerskoasemblerskog jezikag jezika
modifikatormodifikator tip podatkatip podatka
B bajt (8-bitova)
UB neoznačeni bajt (8-bitova)
H polu-reč (16 bitova)
UH neoznačena polu-reč (16-bitova)
W reč (32 bita)
UW neoznačena reč (32-bita)
F pokretni zarez (32-bita)
D dupla preciznost pokretni zarez (64-bita)
C znak ili decimalni broj u 8-bitnom formatu
P decimalni broj u pakovanom (4-bitnom) formatu
Modifikatori koji prate odredjeni tip podataka mogu biti oblika:
Instrukcijom:
Move.W R1,R2 ;kopira sa sadržaj 32 bitnog registra R2 u R1
Karakteristike asemblerskog jezikaKarakteristike asemblerskog jezika- modifikatori za tip podataka -- modifikatori za tip podataka -
uslovi grananjauslovi grananja
CCCC usloviuslovi
T istinit
F pogrešan
V premašaj
C prenos ili pozajmljivanje
PE parna parnost
PO neparna parnost
LE manji od ili jednak
LT manji od
EQ jednak
NE nije jednak
GE veći od ili jednak
GT veći od
KarakteristiKarakteristike ke
asemblerskasemblerskog jezikaog jezika
korišćeni formati ALU instrukcijakorišćeni formati ALU instrukcija
slučaj 1 OP.X odredište, izvorište 1, izvorište 2
(tro-operandski format)
slučaj 2 OP.X odredište, izvorište
(samo kada se specificiraju dva operanda)
slučaj 3 OP.X odredište/izvorište 1, izvorište 2
(u ovom slučaju OP koristi dva izvorna operanda, a upisuje rezultat na mesto operanda izvorište 1)
Karakteristike asemblerskog jezikaKarakteristike asemblerskog jezika
Struktura instrukcija na asemblerskom jeziku dosta verno odslikava strukturu mašinskih instrukcija koje on predstavlja
Asemblerski jezici različitih procesora medjusobno su dosta slični
Ova osobina dozvoljava da se o njima u izvesnoj meri diskutira uopšteno
Kada se dobro poznaje jedan asemblerski jezik lako se uči drugi.
Formati asemblerskih instrukcijaFormati asemblerskih instrukcija
Svaki iskaz na asemblerskom jeziku čine sledeća četiri polja: oznaka (labela)
opkôd ili direktiva
operand (i)
komentar
Polja
oznaka
opkôd
i
direktiva
(pseudoinstrukcija)
operand (i) komentar
[< labela >]
<opkôd>
ili
<direktiva >
[<operand 1>[, <operand 2>]] [<komentar>]
Formati asemblerskih instrukcijaFormati asemblerskih instrukcija
Oznaka – za najveći broj instrukcija i direktiva ovo polje je i opciono polje oznaka predstavlja simboličko ime za memorijsku adresu.
Izraz: Move.L B,D0
Izraz definiše lokaciju instrukcije u memoriji nakon što je program napunjen (loadovan).
Oznaka se može koristiti da definiše početak programskog segmenta radi kasnijeg obraćanja.
Oznaka se koristi kod dodela memorije pseudoinstrukcijama jer omogućava da memorisani podaci budu dostupni preko simboličkih imena.
Formati asemblerskih instrukcijaFormati asemblerskih instrukcija- polje oznaka -- polje oznaka -
Polje operacioni kôd ili direktiva sadrži:
mnemonik instrukcije - simboličku skraćenicu za opkôd ako iskaz predstavlja mašinsku instrukciju ili
asemblersku direktivu – tj. pseudoinstrukciju ako je iskaz komanda asembleru
izbor imena za mnemonike i direktive razlikuje se od jednog asemblera do drugog
Primer :Add R1,R2,R3 ;instrukcija
Alfa EQU 50 ;direktiva
Formati asemblerskih instrukcijaFormati asemblerskih instrukcija- polje - polje operacioni kôd ili direktivaoperacioni kôd ili direktiva - -
Operandi - polja operandi u iskazima asemblerskog jezika namenjena su da specificiraju adrese i registre koji se koriste kao operandi u mašinskoj instrukciji.
Polje operand (i) kod instrukcije Add ukazuje šta sa čime treba sabrati.
Polje operand kod Jump (Branch) instrukcije ukazuje gde treba skočiti.
Kod pseudoinstrukcija ovo polje ukazuje koliko memorijskog prostora treba rezervisati.
Asembleri prepoznaju i odredjene simbole u polju operand (i). Simbolu može da se dodeli apsolutna adresa, neposredna vrednost, ili bilo koji drugi važeći operand.
Formati asemblerskih instrukcijaFormati asemblerskih instrukcija- polje - polje operandioperandi - -
Izraz (expression) predstavlja kombinaciju simbola, konstanti (literali), algebarskih operatora i zagrada, a koristi se od strane asemblera za odredjivanje adresa ili vrednosti operanada.
Instrukcijom
Move.W # $ 2000, D1
definiše se 16-bitna heksadecimalna vrednost 2000 kao neposredni izvorni operand.
Konstante za koje asembler automatski rezerviše memorijski prostor zovemo literali.
Primer :
Formati asemblerskih instrukcijaFormati asemblerskih instrukcija- polje - polje operandi - produžetakoperandi - produžetak
Alternativno ime je asemblerske pseudoinstrukcije
Najveći broj asemblera pruža pomoć programeru na različite načine putem korišćenja asemberskih direktiva
Akcija koja se preuzima od strane direktiva egzistira samo u toku asembliranja izvornog programa, tj. direktive su neizvršive asemblerske instrukcije
Direktive su instrukcije namenjene asembleru, a ne procesoru
Asemblerske direktiveAsemblerske direktive
Asemblerske direktiveAsemblerske direktive - primer - primer
Assembler directives provide the assembler with info on how to translate the program but do not lead to the generation of machine instructions
.macro # start macro .end_macro # end macro
.text # start program’s text segment ... # program text goes here .data # start program’s data segment tiny: .byte 156,0x7a # name & initialize data byte(s) max: .word 35000 # name & initialize data word(s)small: .float 2E-3 # name short float big: .double 2E-3 # name long float .align 2 # align next item on word boundaryarray: .space 600 # reserve 600 bytes = 150 words str1: .ascii “a*b” # name & initialize ASCII string str2: .asciiz “xyz” # null-terminated ASCII string .global main # consider “main” a global name
Asemblerske direktiveAsemblerske direktive - primer - primer
Write assembler directive to achieve each of the following objectives:
a. Put the error message “Warning: The printer is out of paper!” in memory.b. Set up a constant called “size” with the value 4.c. Set up an integer variable called “width” and initialize it to 4.d. Set up a constant called “mill” with the value 1,000,000 (one million).e. Reserve space for an integer vector “vect” of length 250.
Solution:
a. noppr: .asciiz “Warning: The printer is out of paper!”b. size: .byte 4 # small constant fits in one bytec. width: .word 4 # byte could be enough, but ...d. mill: .word 1000000 # constant too large for bytee. vect: .space 1000 # 250 words = 1000 bytes
tiptip opkopkôôdd komentarkomentar
upravljanje asembliranjem
Org<izraz> početak programske sekvence
End kraj programa koji se asemblira
definicija simbola
<oznaka> Equ<izraz> izjednačava simboličko ime (na poziciji oznaka) sa vrednošću operanda
definisanje podataka i memorijskog prostora
[<oznaka>] DC.<I> <vrednost(i)> definiše konstantu(e) tj. memoriše vrednosti operanda kao konstante
[<oznaka>] DS.<I> <vrednost(i)> rezerviše memorijski prostor
makro
definicije
Macro početak makro definicije
Endm kraj makro definicije
upravljanje listingom
Lien dužina linije
List listanje
NoList nema listanja
Spc<N> <N> blanko linija
Page naredna stranica
ostale
Title koristi operand kao naslov na svakoj stranici listinga
If početak asembliranja uslovnog bloka instrukcije samo ako je specificirani uslov ispunjen
Endif kraj uslovnog bloka
Proces asembliranja, kao aktivnost, je dovoljno sličan i može se kao postupak opisati da važi za sve mašine, tj. bude generalni
Asembliranje možemo da zamislimo na sledeći način:
program na asemblerskom jeziku predstavlja niz iskaza
asembler u datom trenutku čita jedan iskaz, prevodi ga u mašinski jezik, a na svom izlazu generiše dva tipa informacija:
odnosi se na generisani mašinski kôd i pridružuje se datoteci u kojoj se čuva izvršivi mašinski kôd,
dodaje se odgovarajućem delu listing datoteke koja se koristi za potrebe štampanja.
Proces se ponavlja dok se ne prevede ceo program.
Proces asembliranjaProces asembliranja
Na prvi pogled veoma logičan postupak koji na žalost nije korektan. Zbog čega?
Analizirajmo sledeću situaciju:
Neka prvi iskaz u programu koji se prevodi bude Jump Adr_1. Asembler neće biti u stanju da asemblira ovaj iskaz sve dok nezna adresu Adr_1. Skok može biti na kraju programa koji se prevodi, što znači da asembler neće biti u stanju da pronadje adresu ako se prethodno ne pročita ceo program.
Ovaj problem je poznat kao obraćanje unapred (forward reference) a javlja se zbog toga što se simbol Adr_1 javlja pre nego što je definisan, tj. obraćamo se simbolu čija definicja sledi kasnije.
Proces asembliranja Proces asembliranja - produžetak- produžetak
Asembler čita izvorni program dva puta. Pri ovome svako čitanje izvornog programa zovemo prolaz (pass). Bilo koji prevodilac koji čita ulazni program dva puta zove se dvo-prolazni prevodilac.
U toku prvog prolaza, kod dvo prolaznog asemblera, skupljaju se i smeštaju u tabeli definicije simbola i oznake (labele) iskaza.
U toku drugog prolaza vrednosti svih simbola su poznate, problem obraćanja unapred nije više kritičan, svaki iskaz se čita, asemblira i generiše njegov izlaz.
Problem obraćanja unapred Problem obraćanja unapred – prvi – prvi pristuppristup
Drugi pristup se zasniva na jednom prolazu. Ideja je sledeća :
Kada se naidje na iskaz koji se ne može asemblirati zbog toga što postoji obraćanje unapred ne generiše se izlaz. Umesto toga kreira se ulaz u (jednoj) tabeli čiji sadržaj ukazuje to da iskaz kod koga se javlja obraćanje unapred nije asembliran. Na kraju procesa asembliranja svi iskazi u neasembliranoj tabeli se asembliraju.
Nedostaci:
dvo prolaznog asemblera ogleda se u tome što zahteva nešto duže vreme prevodjenja
jedno prolaznog: (a) dodatni memorijski prostor, koji može biti veliki ako u programu postoji veliki broj obraćanja unapred; (b) složenija struktura; i (c) razumljivost listinga objektnog koda nije uvek najjasnija. Zbog nabrojanih razloga najveći broj asemblera je dvo prolazni.
Problem obraćanja unapred Problem obraćanja unapred – drugi – drugi pristuppristup
Glavna aktivnost koja se obavlja u toku prvog prolaza u vezi je sa kreiranjem tabele simbola. U tabeli se čuvaju vrednosti svih simbola. Simbol može biti: (a) oznaka (labela); i (b) vrednost kojoj je pomoću direktiva dodeljeno simbolično ime, kao na primer :
DISK_1 Equ 18
Kada simbol pripada polju Oznaka asembler mora da zna, koju adresu treba da dodeli toj instrukciji u toku izvršenja programa. Da bi sačuvao adresni trag o svim asembliranim instrukcija asembler mora u svakom ulazu tabele simbola da pamti vrednost jedne promenljive koja se zove lokacioni brojač instrukcija (instruction location counter - ILC). Na početku prvog prolaza asembler postavi ILC na vrednost 0. Nakon obrade svake instrukcije ILC se inkrementira za dužinu te instrukcije.
Prvi prolazPrvi prolaz
Tabela simbola - ima po jedan ulaz za svaki simbol
Simboli su definisani bilo kao oznake (labele) ili preko definicija (Januar Equ 1)
Svaka tabela simbola sadrži sam simbol (ili pokazivač na taj simbol), njegovu numeričku vrednost i dodatnu informaciju koja se odnosi na :
Tabela simbolaTabela simbola
dužinu polja podatka koje prati taj simbol, relokacione bitove, tj. da li simbol menja vrednost
ako se program puni na neku drugu adresu u odnosu na onu koja je specificirana asemblerom
da li je ili ne simbol dostupan van granica procedure.
Opkôd tabela - sadrži najmanje jedan ulaz za svaki mnemonik asemblerskog jezika
Svaki ulaz opkôd tabele sadrži :
simbolički opkôd (mnemonik)
dva operanda
dužinu instrukcije
klasu instrukcije koja deli opkodove u grupe u zavisnosti od broja i tipova operanada
Opkôd tabelaOpkôd tabela
U ovom prolazu obavljaju se sledeće aktivnosti:
generiše se objektni program
štampa se listing na asemblerskom jeziku ako se to zahteva
generiše se dodatna informacija koja je potrebna programu za povezivanje (linkeru) radi povezivanja procedura koje se asembliraju u različitim vremenskim trenucima
Drugi prolazDrugi prolaz
PseudoinstrukcijePseudoinstrukcije
Example of one-to-one pseudoinstruction: The following
not $s0 # complement ($s0)
is converted to the real instruction:
nor $s0,$s0,$zero # complement ($s0)
Example of one-to-several pseudoinstruction: The following
abs $t0,$s0 # put |($s0)| into $t0
is converted to the sequence of real instructions:
add $t0,$s0,$zero # copy x into $t0slt $at,$t0,$zero # is x negative?beq $at,$zero,+4 # if not, skip next instrsub $t0,$zero,$s0 # the result is 0 – x
PseudoinstrukcijePseudoinstrukcije
MiniMIPS Pseudo-
instructions
Pseudoinstruction UsageMove move regd,regs
Load address la regd,address
Load immediate li regd,anyimm
Absolute value abs regd,regs
Negate neg regd,regs
Multiply (into register) mul regd,reg1,reg2
Divide (into register) div regd,reg1,reg2
Remainder rem regd,reg1,reg2
Set greater than sgt regd,reg1,reg2
Set less or equal sle regd,reg1,reg2
Set greater or equal sge regd,reg1,reg2
Rotate left rol regd,reg1,reg2
Rotate right ror regd,reg1,reg2
NOT not reg
Load doubleword ld regd,address
Store doubleword sd regd,address
Branch less than blt reg1,reg2,L
Branch greater than bgt reg1,reg2,L
Branch less or equal ble reg1,reg2,L
Branch greater or equal bge reg1,reg2,L
Copy
Control transfer
Shift
Arithmetic
Memory access
Logic
Programeri često imaju potrebu da nekoliko puta u okviru programa ponavljaju odredjene sekvence
Najjednostavnije ovoj problem se rešava tako što se sekvenca instrukcija kad god zatreba prepiše
Ako je sekvenca dugačka, ili se često ponavlja, ovaj posao postaje zaista dosadan
Kao alternative se nude sledeća dva rešenja koja se baziraju na grupisanju instrukcija u jedinstvenu celinu :
makro naredbe
potprogrami (procedure)
Makro naredbe i potprogramiMakro naredbe i potprogrami
Obe strategije ima svoje prednosti i nedostatke
Kod poziva procedure izvršavaju instrukcije Call i Return
Ako je procedura kratka, a poziv procedure česti, izvršenje instrukcija Call i Return u značajnoj meri usporava brzinu izvršenja programa
Makro naredbe obezbedjuju efikasnije rešenje problema učestalog izvršenja iste ili skoro iste sekvence instrukcija
Nedostatak makro naredbe se ogleda u povećanju obima programa.
Makro naredbe i potprogrami - Makro naredbe i potprogrami - produžetakprodužetak
Makro mehanizamMakro mehanizam
A macro is a mechanism to give a name to an oft-used sequence of instructions (shorthand notation)
.macro name(args) # macro and arguments named ... # instr’s defining the macro .end_macro # macro terminator
How is a macro different from a pseudoinstruction?
Pseudos are predefined, fixed, and look like machine instructions Macros are user-defined and resemble procedures (have arguments)
How is a macro different from a procedure?
Control is transferred to and returns from a procedure After a macro has been replaced, no trace of it remains
Macro – largest of three valuesMacro – largest of three values
Write a macro to determine the largest of three values in registers and to put the result in a fourth register.
Solution:
.macro mx3r(m,a1,a2,a3) # macro and arguments named move m,a1 # assume (a1) is largest; m = (a1) bge m,a2,+4 # if (a2) is not larger, ignore it move m,a2 # else set m = (a2) bge m,a3,+4 # if (a3) is not larger, ignore it move m,a3 # else set m = (a3) .endmacro # macro terminator
If the macro is used as mx3r($t0,$s0,$s4,$s3), the assembler replaces the arguments m, a1, a2, a3 with $t0, $s0, $s4, $s3, respectively.
Razlika izmedju mRazlika izmedju makro naredbi akro naredbi i i potprogrampotprogramaa
GLPR
CALL PP1
CALL PP2
CALL PP2
......
......
PP1
PP1
10 k
1 k
2 k
rad sa potprogramima Ukupna dužina programa
• jednaka je zbiru
• i nezavisna je od toga koliko se puta u toku izvršenja glavnog programa pozivaju potprogrami.
• U konkretnom slučaju jednaka je 13 k.
n
iiPPGLPR
1
Razlika izmedju mRazlika izmedju makro naredbi akro naredbi i i potprogrampotprogramaa
rad sa makroima Ukupna dužina programa
• jednaka je zbiru
gde je pi broj puta pozivanja makroa i u okviru glavnog programa
• Dužina programa zavisna je od toga koliko se puta u toku izvršenja glavnog programa pozivaju makroi.
• U konkretnom slučaju jednaka je 15 k.
MAKROnp...MAKROp
MAKROpGLPR
n
2
1
2
1
GLPR
MAKRO1
MAKRO2
MAKRO2
......
......
MAKRO1
MAKRO2
10 k
1 k
2 k
Ukupniprogram
MAKRO1
......
......
15 k
MAKRO2
MAKRO2
na mestu poziva ceo MAKRO se umeće u kôd glavnog programa
Veliki broj asemblerskih jezika je proširljiv
Asembleri dozvoljavaju korisniku da definiše nove instrukcione mnemonike koje zovemo makro naredbe
Makro naredbe se mogu smatrati kao sastavni deo jezika, pa se kao takve i mogu pozivati
Novo definisane instrukcije mogu se koristiti potpuno ravnopravno sa svim ostalim instrukcijama iz skupa instrukcija na asemlerskom jeziku
Makro naredba predstavlja sekvencu mašinskih instrukcija koja se definiše jedanput, a može se koristiti po nekoliko puta u toku izvornog programa.
Makro naredbeMakro naredbe
Definicija makro naredbe liči na definiciju procedure
Procedure i makro naredbe nisu isto
Razlika se ogleda u sledećem :
korišćenjem makro naredbi ne štedi se memorijski prostor
na mestima na kojima se poziva marko naredba ubacije se sekvenca mašinskih instrukcija, koje čine makro naredbe, čime se obim programa povećava
makro naredbe nije potrebno povezivati, tj. linkovati.
makro naredbe su pogodnije za primenu kada se u toku programa javljaju kratke celine po nekoliko puta, a procedure kada su celine duže.
Makro naredbe - Makro naredbe - produžetakprodužetak
Definicija makro naredbe predstavlja metod dodele imena delu programa
Različiti asembleri koriste različitu notaciju kod definicje makro naredbi
Nezavisno od detalja svi imaju sledeće tri osnovne celine:
zaglavlje u kome se javlja ime makro naredbe koja se definiše,
tekst koji čini telo makro naredbe,
direktiva koja se odnosi na kraj definicije.
Definicija makro naredbeDefinicija makro naredbe
ime Makro operand, . . . , operand
.
. telo makro naredbe .
Endm
Tri celine kod definicije makro Tri celine kod definicije makro naredbenaredbe
Kada se ime makro naredbe koristi kao opkôd tada je ono poznato kao makro poziv a njegova ekspanzija telom makro naredbe zove se makro ekspanzija
Definicija makroa uključuje zadavanje formalnih parametara, a makro pozivom se predaju aktuelni parametri.
Makro naredbe - Makro naredbe - produžetakprodužetak
Korišćenjem procedure može da poboljša čitljivost, pisanje, i održavanje velikih programa
Procedure takodje smanjuju veličinu programa jer je njihov kôd deljiv, tj. zajednički za veći broj programa
Upotreba procedura je takodje svojstvena kod uvodjenja novih programskih tehnika kao što je rekurzivno programiranje čime se u značajnoj meri smanjuju napori programera kod realizacije odredjenih algoritama
Lako prepoznajemo korišćenje procedura u skoro svim programima koje danas srećemo.
Procedura je osnovna programska jedinica kod najvećeg broja HLL-ova.
ProcedureProcedure
implementacija procedura podrazumeva upravljanje nekim strukturama podataka koje zbog poziva procedura unose dodatno vremensko prekoračenje, tj. usporavaju brzinu izvršenja programa
savremeni mikroprocesori poseduju specijalne instrukcije koje izvode ove aktivnosti, a njihov efekat se ogleda u poboljšanju performansi
Procedure - Procedure - produžetakprodužetak
Prenos parametara proceduri (preko magacina, registara, itd)
Predaja upravljanja željenoj proceduri
Dodela prostora radi memorisanja lokalno promenljivih,
Pamćenje konteksta programa iz koga je izvršen poziv,
Pristup parametrima u toku izvršenja procedure,
Obnavljanje konteksta programa iz koga je izvršen poziv,
Oslobadjanje prostora koji je bio rezervisan za memorisanje lokalno promenljivih,
Izbavljanje parametara (iz magacina, registara, itd),
Vraćanje upravljanja programu iz koga je izvršen poziv.
Aktivnosti kod poziva proceduraAktivnosti kod poziva procedura
procedure P(X : integer; var y : integer);
var z : integer;
begin
.
y:=z+x
.
end;
program (glavni)
.
P(A,B);
.
end
Primer korišćenja procedura kod Primer korišćenja procedura kod PascalaPascala
Metod prenosa upravljanje izmedju programa iz koga je izvršen poziv i potprograma zove se povezivanje potprograma (subroutine linkage)
Informacija koja je potrebna potprogramu definiše se u zavisnosti od parametara
Definicaija procedure uključuje formalne ili fiktivne parametre, a pozivom procedure se predaju aktuelni ili stvarni parametri
Alternativno formalne parametre zovemo parametri, a za stvarne parametre se koristi termin argumenti
Prenos upravljanja izmedju Prenos upravljanja izmedju programa i potprogramaprograma i potprograma
tip opis komentar
registarski rutina iz koje se vrši poziv puni unapred definisane registre vrednostima ili adresama
• broj parametara je ograničen
• predaja je dinamička
magacin
adresa iz koje se vrši poziv smešta vrednosti ili adrese magacina
• adresa povratka u toku obrade mora biti sačuvana, a obnovljena pre povrataka
• predaja dinamička
parametarske oblasti
definišu se oblasti u memoriji u kojima se čuvaju vrednosti ili adrese
• predaja statička , ako su oblasti definisane u toku asembliranja,
• predaja je dinamička ako se bazna adresa oblasti predaje u registru
in line vrednosti ili adrese se memorišu nakon instrukcije za poziv potprograma. Potprogram izračunava lokacije parametara
• predaja je statička
Tehnike za prenos vrednosti ili Tehnike za prenos vrednosti ili adresa adresa
Argumenti koji se predaju potprogramu zove se ulazni parametri
Dobijeni rezultati u formi vrednosti ili adrese odgovaraju izlaznim parametrima potprograma
Parametri koji se prenose izmedju pozivnog i pozvanog programa mogu se predavati kao:
vrednosti (by value) - pozvanom programu se predaje stvarna vrednost
adrese (by reference) - stvarni parametar se predaje kao adresa
Tipovi argumenata i parametri koji Tipovi argumenata i parametri koji se prenosese prenose
Najjednostavniji metod za prenos argumenata
Podaci se predaju preko internih registara CPU-a
Brzi prenos podataka
Broj argumenata koji se može preneti je ograničen brojem dostupnih registara
Projektanti oba programa moraju prethodno da se dogovore preko kojih registara će se prenosti argumenti
Registerski prenosRegisterski prenos
Primer :Primer :
Sledećom sekvencom instrukcija (važi za MC 68020)
.
Move.L vred_1,D1 ; prenos vrednosti
Move.L adr_x,A1 ; prenos adrese
Lea zaglav, A2 ; adresa zaglavlja
Jsr PP_1 ; poziv potprograma
.
postavlja se 32-bitna vrednost u D1, adresa pokazivača na lokaciju adrese u A1, a adresa zaglav u A2. Potprogram PP_1 može kada obavlja svoju funkciju direktno da pristupa registrima
Registerski prenosRegisterski prenos
Argumenti se smeštaju u magacin pre nego što se izvrši poziv potprograma
Kod smeštanja podataka u magacin registar SP se prvo dekrementira, za vrednost koja je odredjena obimom podatka koga treba zapamtiti, a nakon toga se memoriše podatak
Prenos preko magacinaPrenos preko magacina
Primer :Primer :
Argumenti se smeštaju u magacin pre nego što se izvrši poziv potprograma na sledeći način:
.
Move.L vred_1,(SP) ; smešta se prvi podatak
Move.W vred_2,(SP) ; smešta se drugi podatak
Jsr PP_A ; poziv potprograma PP_A
.
na vrh magacina pokazuje registar SP
registar SP uvek pokazuje na punu lokaciju
Prenos preko magacinaPrenos preko magacina
Primer :Primer :
Sekvenca instrukcija, mikroprocesora MC68020, koja obavlja ovu aktivnost ima sledeći oblik:
PP_A: Move.L (SP)+,A1 ;privremeno sačuvaj (PC) u A1
Move.W (SP)+,D1 ;smesti vred_2 u D1
Move.L (SP)+,D2 ;smesti vred_1 u D1
.
. telo potprograma PP_A
.
Move.L (A1),(SP) ;smesti (PC) u magacin
Rts ;povratak iz potprograma
Prenos preko magacinaPrenos preko magacina
Prednosti :
Nedostaci :
broj argumenata koji se prenosi mo`e biti veliki
metoda je univerzalna jer magacin poseduju svi procesori
ova metoda prenosa argumenata koristi se od strane velikog broja kompilatora, kakvi su C, Pascal, i dr.
s obzirom da se pristupa memorijskim lokacijama prenos je sporiji u odnosu na registarski
ako je broj poziva potprograma ili broj podataka koji se prenosi veliki, a dodeljen prostor magacinu mali, tada može da dodje do prekoračenja opsega magacina. Ovo neminovno dovodi do gubitaka podataka, a time i do kraha rada sistema.
Prenos preko magacina - Prenos preko magacina - produžetakprodužetak
Kada je broj parametara koji se prenosi veliki, parametarsku oblast je bolje postaviti u memoriji
Ova oblast sadrži, po unapred odredjenoj sekvenci, vrednosti ili adrese kojima se pristupa od strane potprograma nakon što je njemu predata početna adresa ove oblasti
Ista oblast se može koristiti od strane nekoliko potprograma pod uslovom da je ona dovoljno velika da može čuvati sve podatke
Potprogram može da pristupa vrednostima koristeći indirektno adresiranje sa razmeštajem
Prenos podataka preko memorijskih Prenos podataka preko memorijskih lokacijalokacija
Sekvenca za prenos pet podataka preko memorijskih lokacija, za mikroprocesor MC 68020, imaće oblik
.
Move.L vred_1, memo_ob ; smeštaj prvog podatka
Move.W vred_2, memo_ob+4 ; smeštaj drugog podatka
Move.W vred_3, memo_ob+6 ; smeštaj trećeg podatka
Move.L vred_4, memo_ob+8 ; smeštaj četvrtog podatka
Move.W vred_5, memo_ob+12 ; smeštaj petog podatka
Lea memo_ob, A1 ; smesti adresu oblasti u A1
Jsr PP_2 ; poziv potprograma
Primer :Primer :
Prenos podataka preko memorijskih Prenos podataka preko memorijskih lokacijalokacija
.
memo_ob: DS.L 1 ; rezervacija prostora
DS.W 2
DS.L 1
DS.W 1
End
instrukcijom
Move.L (8,A1),D1
vrši se prenos vred_4 u D1
definisanje parametarske oblasti se može obaviti na veći broj načina
Primer -produžetak:Primer -produžetak:
Metod za prenos vrednosti potprogramu zasniva se na kôdiranju vrednosti koja sledi nakon poziva potprograma
Ovaj metod se zove in-line kodiranje i definiše vrednosti argumenata koje su konstante i ne menjaju se nakon asembliranja
""In-lineIn-line" kodiranje" kodiranje
Sekvencom instrukcija:
Jsr PP_3 ; poziv potprograma PP_3
DC.W 1 ; in line argument
32-bitna vrednost PC-a koja se smešta u sistemski magacin nakon poziva potprograma ukazuje na lokaciju argumenta u instrukcionoj sekvenci.
Primer :Primer :
""In-lineIn-line" kodiranje" kodiranje
Sledećom sekvencom koja je deo potprograma PP_3, smeštamo argumet u LS deo registra D1, a zatim u magacin smeštamo povratnu adresu koja se nalazi iza konstante :
Move.L (SP), A0 ; izbavi (PC) i smesti ga u A0
Move.W (A0)+, D1 ; pribavi argumet i inkrementiraj A0
Move.L A0, (SP) ; smesti novu povratnu adresu
.
. telo potprograma PP_3
.
Rts ; povratak iz potprograma
Primer :Primer :
""In-lineIn-line" kodiranje" kodiranje
Kreiranje i dokumentovanje programa je od izuzetne važnosti za programere
Promena funkcionalnih zahteva nekog programskog modula iziskuje modifikaciju prethodno kreiranog kôda
Dobro dokumentovani program može da uštedi mnogo vremena koje je potrebno za analizu postojećeg kôda
Svaka organizacija na jedinstven način formira svoj sopstveni standard o vodjenju dokumentacije
Projektovanje modularnih programa Projektovanje modularnih programa i dokumentacijai dokumentacija
Ključne komponente, minimalnog standarda koga treba ispoštovati, su :
funkcionalni opis
algoritamski opis
tabela o korišćenju registara
in line dokumentacija
Projektovanje modularnih programa Projektovanje modularnih programa i dokumentacija - i dokumentacija - produžetakprodužetak
Funkcionalni opis: opisuje šta odredjena funkcija obavlja, ali ne daje informaciju kako se ta funkcija izvršava
Funkcionalni opis mora da objasni na koji način se argumenti prenose toj funkciji, i na koji način se rezultati vraćaju (ako postoje)
Funkcionalni opisFunkcionalni opis
Primer:Primer: Hexout (R1 : vrednost)32-bitna binarna vrednost se prenosi funkciji u registru R1, a heksadecimalna vrednost se štampa sa desnim poravnjanjem.
Decout (R1 : vrednost)32-bitna binarna vrednost se prenosi funkciji u registru R1, a decimalna vrednost se štampa sa desnim poravnjanjem.
Decin (R1 : vrednost, R2 : status)Čita se niz decimalnih cifara sa tastature i vraća 32-bitni binarni ekvivalenat u registar R1. Ako niz ne predstavlja na korektan način decimalni broj tada se vrednost "1" kao tip statusne greške vraća u registar R2, inače, kada je decimalni broj važeći, u registar R2 se vraća vrednost "0".
Hexin ( niz, vrednost)Analizira se niz ASCII karaktera koji predstavlja heksadecimalni broj i vraća se 32-bitna binarna ekvivalentna vrednost u magacin na lokaciji MemSP-4. Pokazivač na niz se prenosi funkciji preko magacina na lokaciji MemSP. Nakon povratka, pokazivač u MemSP pokazivaće na bajt koji sledi nakon zadnje heksadecimalne cifre u nizu.
Funkcionalni opisFunkcionalni opis
Pseudokôd: objašnjava na koji način se implementira funkcija
svaki programer kome se dodeljuje zadatak da modifikuje kôd izuzetno je zainteresovan za logičku strukturu postojećeg kôda
obično logičku strukturu kôda lakše je razumeti ako se koristi neka HLL notacija
korišćenje HL pseudokôda od izuzetne je važnosti u toku inicijalnog razvoja kôdnog modula kao i od velike pomoći programeru koji se bavi održavanjem
pseudokôd olakšava saradnju individua zaduženih za modifikacije, a takodje i olakšava debagiranje
na osnovu svega izloženog, preporučuje se da, pseudokôd bude sastavni deo dokumentacije programa na asemblerskom jeziku
Algoritamski opisAlgoritamski opis
; #####################################################################; Ime programa: Suma integer vrednosti; Programer: Mika Rus; Datum zadnje modifikacije: 12.01.2004.; #####################################################################
Jedan tipičan primer koji uključuje funkcionalni opis kao i opis algoritma na nivou pseudokôda imao bi sledeći oblik :
Primer :Primer :
Algoritamski opisAlgoritamski opis
################################################################; Funkcionalni opis: ; Program odredjuje sumu celobrojnih vrednosti (integer) od 1 do N, gde je; N vrednost koja se prihvata (čita) sa tastature; ###############################################################; Opis algoritma na pseudokod nivou
; main: cout << "\n Uneti ulaznu vrednost za N = "cin >> v0if (v0 > 0)t0 = 0;while (v0 > 0) do t0 = t0 + v0;v0 = v0 - 1cout << "Zbir integer-a od 1 do N je", t0;go to main;elsecout << "\n Ovo je kraj opisa"
; ###############################################################
Algoritamski opisAlgoritamski opis
Tabela o korišćenju registara: U okviru granica algoritma ovom tabelom se definiše način korišćenja svakog od registara procesora i premošćava se jaz izmedju opisnih imena promenljivih i odgovarajućih registara procesora
Tabela o korišćenju registaraTabela o korišćenju registara
Primer :Primer :
Jedan tipičan primer zaglavlja glavnog programa koji koristi tabelu o korišćenju registara bio bi sledećeg oblika:;####################Primer zaglavlja glavnog programa###############; Program 1: <opisno ime> ; Programer: <ime i prezime>; Dan kreiranja: dan, mesec, godina; Zadnja modifikacija: dan, mesec, godina ; ###############################################################; Funkcionalni opis programa; Sledi kratak opis programa; ###############################################################; Korišćenje registara u glavnom programu; R1 = početna adresa niza .........................; R2 = vrednost koja se dobija sabiranjem .......................; ###############################################################; Opis pseudokoda; ###############################################################
Tabela o korišćenju registaraTabela o korišćenju registara
Primer :Primer :
Drugi tipični primer koji bi se odnosio na opis funkcije bio bi sledećeg oblika:; #################### Primer zaglavlja funkcije #####################; Ime funkcije: <opisno ime> ; Programer: <ime i prezime>; Dan kreiranja: dan, mesec, godina; Zadnja modifikacija: dan, mesec, godina ; ##################################################################; Funkcionalni opis: ; Sledi kratak opis:; ##################################################################; Objašnjenje koji se parametri prenose funkciji i na koji način; R1 = pokazivač niza u memoriji ; Objašnjenje koje se vrednosti vraćaju od strane funkcije i kako ; R2 = binarna vrednost rezultata izračunavanja; R3 = vrednost statusa, "1" - rezultat ima korektnu vrednost, "0" - rezultat nema ; korektnu vrednost
; Primer pozivne sekvence:
; <prikaz prenosa parametara preko registara, magacina, .........>
; JSR xxxx poziv potprograma
; <povratak na ovo mesto .............>; ##################################################################
; Način korišćenja registara u funkciji:
; R5 = adresa lokacije ..................
; R6 = privremena suma; ##################################################################; Algoritamski opis na nivou pseudokoda:; sledi opis; ##################################################################
Tabela o Tabela o korišćenjkorišćenj
u u registararegistara
In line dokumentacija: Ovaj tip dokumentacije je od velike koristi u fazi identifikacije koju aktivnost svaki od blokova na asemblerskom jeziku obavlja
"In line""In line" dokumentacija dokumentacija
Primer :Primer :
Jedan tipičan primer korišćenja in line dokumentacije je sledeći:
Andi R3,R1,1 ; maskiraj LSB registra R1 i smesti vrednost ; u registar R3
Beqz R3,parno ; ako je LSB=0 skoči na parnoAddi R2,R2,1 ; inkrementiraj brojač neparno za 1parno: ......
"In line""In line" dokumentacija dokumentacija
Svaki modul ima
sopstveni adresni prostor, počev od adrese 0
a) Pozicioniranje objektnih modula u binarnoj slici pre relokacije i linkovanja
b) Objektni moduli nakon linkovanja i relokacije
Adresni prostor nakon linkovanja- za prethodni slajd -
Interna struktura objektnog modula generisanog od strane prevodioca
Relocirani binarni program sa prethodnih
slajdova pomeren za 300 adresa
naviše
Veliki broj instrukcija ukazuje na nekorektne memorijske adrese.
Dinamičko povezivanje
a) Pre poziva EARTH
b) Nakon poziva i linkovanja EARTH
Korišćenje DLL fajla od strane dva procesa