Transcript Document

Uvod u asemblerski
jezik
VI poglavlje
- Karakteristike –
Uvod u asemblerski jezik
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
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
Asemblerski jezik - osobine
 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
 programi ne poseduju komentar koji će programeru
olakšati rad
 programi su dugački i zamorni za analizu
 programer često iz nehata čini greške koje je veoma teško
locirati, a nakon toga korigovati
Asemblerski jezik – binarna forma
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
Asemblerski jezik – heksadecimalna forma
3
0
3
8
6
0
0
0
C
0
7
8
6
0
0
2
3
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)
Asemblerski jezik – mnemonici
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
Proces asembliranja
Za programsku sekvencu
Move.W
$6000, D0
Add.W
$6000, D0
Move.W
D0,$6004
kažemo da je napisana na asemblerskom jeziku
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
Proces razvoja programa na asemblerskom jeziku
 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 asemblerskom
jeziku
 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)

Steps in transforming an assembly language
program to an executable program residing
$2,$5,$5
$2,$2,$2
$2,$4,$2
$15,0($2)
$16,4($2)
$16,0($2)
$15,4($2)
$31
00a51020
00421020
00821020
8c620000
8cf20004
acf20000
ac620004
03e00008
Executable
machine
language
program
Loader
add
add
add
lw
lw
sw
sw
jr
Machine
language
program
Linker
Assembly
language
program
Assembler
MIPS, 80x86,
PowerPC, etc.
Library routines
(machine language)
Memory
content
An assembly language program, its machine-language
version, and the symbol table created during the
assembly process
Assembly language program
addi
sub
add
test: bne
addi
add
j
done: sw
Symbol
table
$s0,$zero,9
$t0,$s0,$s0
$t1,$zero,$zero
$t0,$s0,done
$t0,$t0,1
$t1,$s0,$zero
test
$t1,result($gp)
done
result
test
28
248
12
Location
0
4
8
12
16
20
24
28
Machine language program
00100000000100000000000000001001
00000010000100000100000000100010
00000001001000000000000000100000
00010101000100000000000000001100
00100001000010000000000000000001
00000010000000000100100000100000
00001000000000000000000000000011
10101111100010010000000011111000
op
rs
rt
rd
sh
fn
Field boundaries shown to facilitate understanding
Determined from assembler
directives not shown here
Generisanje izvršivih binarnih programa iz skupa
nezavisno prevedenih izvornih procedura zahteva
korišćenje linkera
Kros-asembler
 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 krosasembler (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
language program
Constant Definitions
Main Program
Subroutines
Library Definitions
Global Variables
String Constants
Karakteristike asemblerskog jezika
 Kada programer vrši programiranje na asemblerskom jeziku, on
mora strogo da zna :
 koji će mikroračunar koristiti
 koje registre i instrukcije dotični mikroračunar poseduje
 koje adresne načine rada koristi, i puno drugih detalja
 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
Karakteristike asemblerskog jezika
– produžetak -
 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
- nekonzistentnost -
 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 jezika
- pokušaj standardizacije -
 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
mnemonik
Karakteristike
asemblerskog
jezika
imena najčešće
korišćenih mnemonika
operacija
Add
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
Karakteristike asemblerskog jezika
- modifikatori za tip podataka -
 Instrukcijom:
Move.W
R1,R2
;kopira sa sadržaj 32 bitnog registra R2 u R1
 Modifikatori koji prate odredjeni tip podataka mogu biti oblika:
modifikator
B
UB
H
tip podatka
bajt (8-bitova)
neoznačeni bajt (8-bitova)
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
Karakteristike
asemblerskog
jezika
uslovi grananja
CC
uslovi
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
Karakteristike asemblerskog jezika
korišć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)
Formati asemblerskih instrukcija
 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 instrukcija
 Svaki iskaz na asemblerskom jeziku čine sledeća četiri polja:
 oznaka (labela)
 opkôd ili direktiva
 operand (i)
 komentar
Polja
oznaka
[< labela >]
opkôd
i
direktiva
(pseudoinstrukcija)
<opkôd>
ili
<direktiva >
operand (i)
komentar
[<operand 1>[, <operand 2>]] [<komentar>]
Formati asemblerskih instrukcija
- polje oznaka -
 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 instrukcija
- polje operacioni kôd ili direktiva -
 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 instrukcija
- polje operandi -
 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 instrukcija
- polje operandi - produžetak
 Izraz (expression) predstavlja kombinaciju simbola, konstanti
(literali), algebarskih operatora i zagrada, a koristi se od strane
asemblera za odredjivanje adresa ili vrednosti operanada.
Primer :
 Instrukcijom
Move.W
# $ 2000, D1
definiše se 16-bitna heksadecimalna
neposredni izvorni operand.
vrednost
2000
kao
 Konstante za koje asembler automatski rezerviše memorijski
prostor zovemo literali.
Asemblerske direktive
 Alternativno ime je asemblerske pseudoinstrukcije
 Najveći broj asemblera pruža pomoć programeru na
različite načine putem korišćenja asemberskih direktiva
Direktive su instrukcije namenjene asembleru, a ne
procesoru
 Akcija koja se preuzima od strane direktiva egzistira
samo u toku asembliranja izvornog programa, tj. direktive
su neizvršive asemblerske instrukcije
Asemblerske direktive - primer
Assembler directives provide the assembler with info on how to translate
the program but do not lead to the generation of machine instructions
tiny:
max:
small:
big:
array:
str1:
str2:
.macro
.end_macro
.text
...
.data
.byte
156,0x7a
.word
35000
.float
2E-3
.double 2E-3
.align
2
.space
600
.ascii
“a*b”
.asciiz “xyz”
.global main
#
#
#
#
#
#
#
#
#
#
#
#
#
#
start macro
end macro
start program’s text segment
program text goes here
start program’s data segment
name & initialize data byte(s)
name & initialize data word(s)
name short float
name long float
align next item on word boundary
reserve 600 bytes = 150 words
name & initialize ASCII string
null-terminated ASCII string
consider “main” a global name
Asemblerske direktive - 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 byte
c. width: .word 4
# byte could be enough, but ...
d. mill: .word 1000000
# constant too large for byte
e. vect: .space 1000
# 250 words = 1000 bytes
tip
opkôd
komentar
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
Lien
dužina linije
List
listanje
NoList
nema listanja
Spc<N>
<N> blanko linija
Page
naredna stranica
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
upravljanje
listingom
ostale
Proces asembliranja
 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 asembliranja
- produžetak
 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.
Problem obraćanja unapred
– prvi pristup
 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 dvoprolazni 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
– drugi pristup
 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.
Prvi prolaz
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.
Tabela simbola
 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 :
 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
 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
Drugi prolaz
 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
Pseudoinstrukcije
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
slt
beq
sub
$t0,$s0,$zero
$at,$t0,$zero
$at,$zero,+4
$t0,$zero,$s0
#
#
#
#
copy x into $t0
is x negative?
if not, skip next instr
the result is 0 – x
Pseudoinstrukcije
MiniMIPS
Pseudoinstructions
Copy
Arithmetic
Shift
Logic
Memory access
Control transfer
Pseudoinstruction
Usage
Move
Load address
Load immediate
Absolute value
Negate
Multiply (into register)
Divide (into register)
Remainder
Set greater than
Set less or equal
Set greater or equal
Rotate left
Rotate right
NOT
Load doubleword
Store doubleword
Branch less than
Branch greater than
Branch less or equal
Branch greater or equal
move
la
li
abs
neg
mul
div
rem
sgt
sle
sge
rol
ror
not
ld
sd
blt
bgt
ble
bge
regd,regs
regd,address
regd,anyimm
regd,regs
regd,regs
regd,reg1,reg2
regd,reg1,reg2
regd,reg1,reg2
regd,reg1,reg2
regd,reg1,reg2
regd,reg1,reg2
regd,reg1,reg2
regd,reg1,reg2
reg
regd,address
regd,address
reg1,reg2,L
reg1,reg2,L
reg1,reg2,L
reg1,reg2,L
Makro naredbe i potprogrami

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 potprogrami -
produžetak
 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 mehanizam
A macro is a mechanism to give a name to an oft-used
sequence of instructions (shorthand notation)
.macro name(args)
...
.end_macro
# macro and arguments named
# instr’s defining the 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 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)
move
m,a1
bge
m,a2,+4
move
m,a2
bge
m,a3,+4
move
m,a3
.endmacro
#
#
#
#
#
#
#
macro and arguments named
assume (a1) is largest; m = (a1)
if (a2) is not larger, ignore it
else set m = (a2)
if (a3) is not larger, ignore it
else set m = (a3)
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 makro naredbi i potprograma
rad sa potprogramima
• jednaka je zbiru
GLPR
...
CALL PP1
...
CALL PP2
Ukupna dužina programa
n
10 k
...
GLPR   PPi
i 1
CALL PP2
...
PP1
1k
PP1
2k
• i nezavisna je od toga
koliko se puta u toku
izvršenja glavnog
programa pozivaju
potprogrami.
• U konkretnom slučaju
jednaka je 13 k.
Razlika izmedju makro naredbi i potprograma
rad sa makroima
Ukupna dužina programa
• jednaka je zbiru
GLPR
...
MAKRO1
...
MAKRO2
10 k
...
Ukupni
program
GLPR  p1  MAKRO1 
 p2  MAKRO2  ... pn  MAKROn
MAKRO1
...
MAKRO2
...
...
15 k
MAKRO1
MAKRO2
1k
...
gde je pi broj puta pozivanja makroa
i u okviru glavnog programa
MAKRO2
2k
MAKRO2
...
na mestu poziva ceo MAKRO
se umeće u kôd 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.
Makro naredbe
 Veliki broj asemblerskih jezika je proširljiv
dozvoljavaju korisniku da definiše nove
instrukcione mnemonike koje zovemo makro naredbe
 Asembleri
 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
naredba predstavlja sekvencu mašinskih
instrukcija koja se definiše jedanput, a može se koristiti
po nekoliko puta u toku izvornog programa.
 Makro
Makro naredbe -
produžetak
 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.
Definicija makro naredbe
 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.
Tri celine kod definicije makro naredbe
ime
Makro
operand, . . . ,
operand
.
.
.
Endm
 telo makro naredbe
Makro naredbe -
produžetak

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.
Procedure
Procedura je osnovna programska
jedinica kod najvećeg broja HLL-ova.
 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.
Procedure -
produžetak
 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
Aktivnosti kod poziva procedura
 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.
Primer korišćenja procedura kod Pascala
procedure P(X : integer; var y : integer);
var z : integer;
begin
.
y:=z+x
.
end;
program (glavni)
.
P(A,B);
.
end
Prenos upravljanja izmedju programa i
potprograma
 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
Tehnike za prenos vrednosti ili adresa
tip
registarski
magacin
opis
rutina iz koje se vrši poziv puni
unapred definisane registre
vrednostima ili adresama
• broj parametara je ograničen
• predaja je dinamička
adresa iz koje se vrši poziv smešta • adresa povratka u toku obrade
vrednosti ili adrese magacina
mora biti sačuvana, a obnovljena
pre povrataka
• predaja dinamička
definišu se oblasti u memoriji u
parametarsk kojima se čuvaju vrednosti ili
adrese
e oblasti
in line
komentar
vrednosti ili adrese se memorišu
nakon instrukcije za poziv
potprograma. Potprogram
izračunava lokacije parametara
• predaja statička , ako su oblasti
definisane u toku asembliranja,
• predaja je dinamička ako se
bazna adresa oblasti predaje u
registru
• predaja je statička
Tipovi argumenata i parametri koji se
prenose
 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
Registerski prenos
 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 prenos
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
Prenos preko magacina
 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 magacina
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
; poziv potprograma PP_A
PP_A
.
 na vrh magacina pokazuje registar SP
 registar SP uvek pokazuje na punu lokaciju
Prenos preko magacina
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
Rts
(A1),(SP)
;smesti (PC) u magacin
;povratak iz potprograma
Prenos preko magacina -
produžetak
 Prednosti :
 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.
 Nedostaci :
 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 podataka preko memorijskih lokacija
 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 lokacija
Primer :
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
Jsr
PP_2
; smesti adresu oblasti u A1
; poziv potprograma
Primer -produžetak:
.
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
"In-line" kodiranje
 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-line" kodiranje
Primer :
Sekvencom instrukcija:
Jsr
PP_3
DC.W 1
; poziv potprograma PP_3
; 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.
"In-line" kodiranje
Primer :
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
Projektovanje modularnih programa i
dokumentacija
 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 i
dokumentacija - produžetak
 Ključne komponente, minimalnog standarda koga
treba ispoštovati, su :
 funkcionalni opis
 algoritamski opis
 tabela o korišćenju registara
 in line dokumentacija
Funkcionalni opis
 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 opis
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 MemSP-4.
Pokazivač na niz se prenosi funkciji preko magacina na lokaciji MemSP.
Nakon povratka, pokazivač u MemSP pokazivaće na bajt koji sledi nakon
zadnje heksadecimalne cifre u nizu.
Algoritamski 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
modifikacije, a takodje i olakšava debagiranje
zaduženih
za
 na osnovu svega izloženog, preporučuje se da, pseudokôd
bude sastavni deo dokumentacije programa na asemblerskom
jeziku
Algoritamski opis
Primer :
Jedan tipičan primer koji uključuje funkcionalni opis kao i opis
algoritma na nivou pseudokôda imao bi sledeći oblik :
;
############################################################
#########
; Ime programa: Suma integer vrednosti
; Programer: Mika Rus
; Datum zadnje modifikacije: 12.01.2004.
;
############################################################
#########
Algoritamski 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 >> v0
if (v0 > 0)
t0 = 0;
while (v0 > 0) do
t0 = t0 + v0;
v0 = v0 - 1
cout << "Zbir integer-a od 1 do N je", t0;
go to main;

else
cout << "\n Ovo je kraj opisa"
; ###############################################################
Tabela o korišćenju registara
 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 registara
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
registara
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
; ##################################################################
"In line" dokumentacija
 In line dokumentacija: Ovaj tip dokumentacije je od
velike koristi u fazi identifikacije koju aktivnost svaki od
blokova na asemblerskom jeziku obavlja
"In line" dokumentacija
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 parno
Addi R2,R2,1
; inkrementiraj brojač neparno za 1
parno: ......
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