Vous êtes sur la page 1sur 47

FAKULTET STROJARSTVA I RAUNARSTVA

STUDIJ RAUNARSTVA

Arhitektura digitalnog raunala


Vjebe

Goran Kraljevi

Akademska godina 2008/2009

Arhitektura digitalnog raunala

Kazalo:
Osnovna arhitektura 8086 procesora ....................................................4
Izvrna jedinica i njezini registri .......................................................................... 5

Registri za podatke ........................................................................................ 5


Pokazivaki i indeksni registri .......................................................................... 5
Registar zastavica .......................................................................................... 6
Suelje prema sabirnici ...................................................................................... 7

Segmentni registri .......................................................................................... 7


Stog ................................................................................................................. 8
Naini upotrebe memorije i adresiranja................................................................ 9
Modovi adresiranja ........................................................................................... 11

Direktno adresiranje ...................................................................................... 11


Indirektno adresiranje ................................................................................... 12

Programiranje u asembleru ................................................................ 13


Programerski model .......................................................................................... 13
Predloak za pisanje asemblerskog programa...................................................... 13
Prevoenje i povezivanje programa .................................................................... 14
int 21h............................................................................................................. 14
Tipovi varijabli .................................................................................................. 15

Cijeli brojevi ................................................................................................. 15


Stringovi ...................................................................................................... 15
Pokazivai .................................................................................................... 16
Polja ............................................................................................................ 16
Konstante..................................................................................................... 17
@DATA ........................................................................................................ 17
Skokovi............................................................................................................ 18

Bezuvjetni skokovi ........................................................................................ 18


Uvjetni skokovi ............................................................................................. 18
Procedure ........................................................................................................ 20
Makroi ............................................................................................................. 21

Arhitektura digitalnog raunala

N a r e d b e ......................................................................................... 23
Naredbe za manipuliranje podacima ................................................................... 24

Registar registar ili registar memorija.................................................... 24


Postavljanje registara za pristup adresama u memoriji ..................................... 24
Naredbe za rad sa stogom ............................................................................. 25
Upravljanje blokovima podataka ..................................................................... 26
Uvjetne petlje................................................................................................... 27
Aritmetike operacije ........................................................................................ 28

Zbrajanje ..................................................................................................... 28
Oduzimanje .................................................................................................. 28
Mnoenje ..................................................................................................... 29
Dijeljenje...................................................................................................... 29
Logike operacije .............................................................................................. 30
Operacije za pomak i rotiranje bitova ................................................................. 31

Pomak bitova................................................................................................ 31
Rotiranje bitova ............................................................................................ 31
Usporedba i testiranje stringova ......................................................................... 32

P r i m j e r i ......................................................................................... 33
Primjeri asemblerskog programiranja - zadaci s rjeenjima ................................... 34
Primjeri prevoenja i povezivanja programa ........................................................ 44

Arhitektura digitalnog raunala

Osnovna arhitektura 8086 procesora


8086 procesor ima dva glavna dijela:
Suelje prema sabirnici dohvaa podatke i naredbe iz memorije,
Izvrna jedinica dekodira i izvrava naredbe.
Ova dva dijela rade istovremeno, tj. ciklus izvravanja se poklapa s ciklusom
dohvata (paralelizam) to ubrzava rad mikroprocesora.

Izvrna jedinica (Execution Unit skraeno EU)


obavlja sve poslove potrebne da bi se izvravale pojedine instrukcije
sastoji se od aritmetiko-logike jedinice, registra zastavica i jo osam
registara za razliite podatke, te odgovarajue upravljake logike.
Svi navedeni elementi su meusobno povezani jednom 16-bitnom sabirnicom
za izmjenu podataka.
Jedinica za suelje prema sabirnici (Bus Interface Unit skraeno BIU)
obavlja sve potrebne radnje za komuniciranje mikroprocesora s vanjskim
svijetom
dovodi instrukcije iz memorije, dohvaa operande iz memorije, upisuje u
memoriju, prihvaa i predaje podatke vanjskim jedinicama i slino.
Komuniciranje mikroprocesora sa vanjskim svijetom se obavlja preko 20-bitne
adresne sabirnice i 16-bitne sabirnice za podatke.

Arhitektura digitalnog raunala

Izvrna jedinica i njezini registri


Registri za podatke
Registri za podatke (registri ope namjene) A, B, C i D mogu se upotrebljavati
kao registri za rad s cjelovitim 16-bitnim rijeima ili kao dva pojedinana bajta.
Npr. ako se registar A upotrebljava kao cjelina, oznaava se sa AX, a ako se on
sastoji od dva razdvojena bajta, oznaava se sa AH i AL, tj. bajt vee teine
(High) i bajt manje teine (Low). Isto vrijedi i za registre B, C i D.
AH
BH
CH
DH

AX
BX
CX
DX

AL
BL
CL
DL

Accumulator
Base
Count
Data

Podatkovni
registri

Ovo su registri ope namjene, slue kod izvravanja aritmetikologikih


operacija, ali neki od njih slue i za specifine operacije.
AX [Accumulator] koristi se za aritmetike operacije (mnoenje,
dijeljenje) i kod ulazno-izlaznih operacija.
BX [Base] esto se koristi za adresiranje podataka u memoriji.
CX [Count] slui kao broja u petljama.
DX [Data] slui za pristup podacima, sadrava adresu ulazno-izlaznih
vrata (porta).
Pokazivaki i indeksni registri
Dva pokazivaka registra SP i BP se koriste za rad sa stogom, dok se dva
indeksna registra SI i DI koriste za rad sa stringovima.
15

SP
BP
SI
DI

Stack pointer
Base pointer
Source index
Destination index

Pokazivaki
registri
Indeksni
registri

SP [Stack pointer] sadri adresu vrha stoga SS:SP


BP [Base pointer] koristi se za pristup podacima unutar stoga SS:BP
SI [Source index] koristi se za rad sa stringovima s tim da sadri
adresu izvorita podataka DS:SI ili ES:SI
DI [Destination index] koristi se za rad sa stringovima s tim da sadri
adresu odredita podataka DS:DI ili ES:DI

Arhitektura digitalnog raunala

Registar zastavica
Registar zastavica u mikroprocesoru 8086 je takoer 16-bitni registar, no
stvarno se upotrebljava samo 9 bitova:
6 kao zastavice statusa (status flags)
3 kao upravljake zastavice
15

14

13

12

11

10

O D

T S Z

Registar
zastavica

Statusne zastavice: Ove zastavice su direktno povezane sa ALU i prate


rezultate pojedinih operacija.
Budui da se statusne zastavice postavljaju u odgovarajue stanje kao rezultat
izvedbe pojedinih programerskih naredaba, njihovo se stanje moe testirati i na
temelju stanja zastavice moe se usmjeravati daljnje izvoenje programa.
CF [carry flag] postavlja se u stanje 1 ako se dogodi prijenos iz
najznaajnijeg bita pri izvedbi aritmetikih operacija. Isto se dogaa pri
posuivanju. Inae je ovaj bistabil u stanju 0.
PF [parity flag] postavlja se u stanje 1, ako rezultat dobiven izvoenjem
instrukcije ima parni paritet, tj. ako je broj jedinica u rezultatu paran broj. Ako je
broj jedinica neparan, PF se postavlja u 0.
AF [auxiliary carry] postavlja se u stanje 1 ako se dogodi prijenos iz nibla
(nibl=4 bita) manje teine u nibl vee teine ili posuivanje iz nibla vee teine
niblu manje teine u bajtu manje teine 16-bitne rijei (vano kod BCD
aritmetike).
ZF [zero flag] postavlja se u stanje 1 kada je rezultat izvoenja instrukcije
jednak 0. Inae je u stanju 0.
SF [sign flag] kopija je bita najvee teine. Prema tome on je u stanju 1 ako
je rezultat negativan, a u stanju 0, ako je pozitivan.
OF [overflow flag] postavlja se u 1 ako je rezultat (tretiran kao broj s
predznakom aritmetika dvojnog komplementa) izvan doputenoga podruja.

Upravljake zastavice:
IF [interrupt flag] ako je IF u stanju 1 znai da e zahtjevi za prekid biti
prihvaeni (STI -> Set I; CLI -> Clear I)
TF [trap flag] ako je TF u stanju 1 omogueno je izvoenje programa korak
po korak tj. izvoenje jedne po jedne naredbe. (koristi se kod debugger-a).
DF [direction flag] odreuje smjer u kojem e se pristupati uzastopnim byteovima stringa.
0 podrazumijeva da je sljedei byte na veoj adresi
1 podrazumijeva da je sljedei byte na nioj adresi

Arhitektura digitalnog raunala

Suelje prema sabirnici


Segmentni registri
Adresna sabirnica mikroprocesora 8086 ima 20 bita. To omoguava adresiranje
memorije od 1 Megabajta.
Od cijelog memorijskog podruja (1M) u svakom trenutku su aktivna 4
segmenta od po 64K.
Memorija je podijeljena na segmente, a poetna adresa svakog segmenta
odreena je odgovarajuim segmentnim registrom.
Poetnu adresu segmenta za instrukcije, podatke, stog i posebni segment
odreuju segmentni registri CS, DS, SS i ES, a adresa unutar segmenta dobije
se tako da se poetnoj adresi segmenta doda pomak, tj. sadraj odgovarajueg
registra.
CS
DS
SS
ES

Code segment
Data segment
Stack segment
Extra segment

IP

Instruction pointer

Segmentni
registri

CS [Code segment] adresa segmenta u kojem se nalazi kod


programa.
DS [Data segment] adresa segmenta u kojem se nalaze podaci.
SS [Stack segment] adresa segmenta u kojem se nalazi stog.
ES [Extra segment] adresa dodatnog segmenta koji se koristi za
pohranu podataka.
IP [Instruction pointer] kombiniranjem sadraja IP registra i registra
CS dobije se adresa instrukcije (sljedee naredbe) CS:IP.

Arhitektura digitalnog raunala

Stog
Stog je dio memorije koji se koristi za privremenu pohranu podataka.
Postoje 2 instrukcije koje rade sa stogom:
PUSH xxx postavlja 16-bitnu vrijednost (1 rije) iz xxx na stog.
POP xxx uzima 16-bitnu vrijednost (1 rije) sa stoga i sprema je u xxx
(16-bitna varijabla, registar ili segmentni registar).
Stog koristi LIFO (Last In First Out) princip.
Primjer:
Ako punimo stog (PUSH) sljedeim vrijednostima: 1, 2, 3, 4, 5
prva vrijednost koju emo naredbom POP preuzeti sa stoga je 5, zatim 4,
3, 2, 1.

Za pristup stogu se koriste 2 registra:


SS:SP (SP offset koji pokazuje na vrh stoga)
SS:BP (BP pristupa podacima unutar stoga)

Arhitektura digitalnog raunala

Naini upotrebe memorije i adresiranja


Organizaciju memorije koja se moe upotrebljavati s mikroprocesorom 8086
prikazuje sljedea slika ...

Adresno se podruje sastoji od 1 Megabajta s adresama pisanim


heksadecimalno od 00000 do FFFFF.
Duina podatka u svakoj lokaciji je 8-bita. Koristiti se moe ili takav 1-bajtni
podatak ili dva uzastopna bajta koji predstavljaju jednu 16-bitnu rije.
Osnovne jedinice za rad s memorijom su byte i word.

Nibble 4 bita
Byte 8 bita
Word 16 bita

Arhitektura digitalnog raunala

Adresa svakog byte-a u memoriji je odreena sa 20 bita, ali kako su svi registri
16-bitni cijela adresa se ne moe pohraniti u jedan registar, pa se dijeli na
dva dijela:
Adresa segmenta (SEGMENT),
Adresa byte-a u segmentu (OFFSET).
U heksadecimalnoj notaciji ta adresa izgleda ovako:
SEGMENT:OFFSET
Primjer:
0040:0002 je adresa 3 byte-a u segmentu 40h.

Procesor izvodi jednostavnu kalkulaciju da odredi 20-bitnu fiziku adresu u


memoriji kada su poznati SEGMENT i OFFSET.
Fiz.adresa = (segment << 4) + offset
Ovo je ekvivalentno mnoenju segmenta sa 16 i dodavanju offset-a.
Primjer:
Ukoliko elimo pristupiti memoriji na fizikoj
12345h potrebno je postaviti sljedee vrijednosti:
DS=1230h SI=0045h

adresi

Za pristup memoriji mogu se koristiti sljedei registri: BX, SI, DI, BP.
Kombinirajui ove registre unutar simbola [ ] mogu se dobiti razliite memorijske
lokacije.
Sve mogue kombinacije se mogu lako upamtiti koristei formulu...

Uzima se pojedina vrijednost iz stupca ili se stupac u potpunosti preskae.


Po default-u:
BX, SI, DI registri rade sa DS segmentnim registrom
BP, SP rade sa SS segmentnim registrom

10

Arhitektura digitalnog raunala

Modovi adresiranja
Procesor 8086 ne dozvoljava operacije izmeu dvije memorijske lokacije
U primjerima s adresiranjem se koristi naredba
MOV odredite,

MOV

izvor

Napomena: MOV naredba se ne moe koristiti da se postavi vrijednost CS ili IP


registra.

Direktno adresiranje
Postoji vie naina direktnog adresiranja:
preko imena varijable
MOV
MOV

ax, var1
var2, bl

preko vrijednosti
MOV

ax, 2Ch

preko adrese varijable


MOV

ax, [2Ch]

MOV
MOV

ax, DS:[2Ch]
ax, ES:[2Ch]

- u ovom sluaju se podrazumijeva da pristupamo


adresi u DS.

preko registara
MOV
MOV

ax, di
cl, dh

11

Arhitektura digitalnog raunala

Indirektno adresiranje
Ovo adresiranje se naziva indirektno jer se vrijednosti pristupa preko njene
adrese.
registarski mod adresa sa koje se podatak prebacuje nalazi se u
"nekom" registru.
MOV
MOV
MOV

ah, [bx] -> prebacuje se byte s adrese DS:[BX] u ah


ah, [si]
ah, [di]

MOV

ah, [bp] -> vezan je uz SS

indeksni mod koristi se za pristupanje elementima polja.


[SI|DI + konst.]
MOV
MOV

si, 0
al, polje[si]

bazni mod koristi se kod pristupanja elementima strukture podataka.


[BP|BX + konst.]

bazno-indeksni mod koristi se ukoliko nije poznato ime niza brojeva


ve samo adresa prvog elementa.
MOV

al, [bx][si] -> DS:[bx + si]

MOV
MOV

ax, polje
bx, OFFSET polje

bazno-indeksni mod s pomakom koristi se za pristup elementima


polja koji su lanovi strukture.
[BP|BX + SI|DI + konst.]

12

Arhitektura digitalnog raunala

Programiranje u asembleru
Programerski model
Programerski model obuhvaa memoriju i registre.
Memorija se dijeli u blokove od 64 K u kojima se nalaze kod, program,
podaci i stog.
Registri se dijele na:
podatkovne (AX, BX, CX, DX)
segmentne (CS, DS, ES, SS)
indeksne (SI, DI)
pokazivake (SP, BP, IP)
registar zastavica
Predloak za pisanje asemblerskog programa
.MODEL mem_model
.DATA
--.STACK
.CODE
start:
----END start

.MODEL ova direktiva definira memorijski model:


small
medium
compact
large
huge

podaci 64k
podaci 64k
podaci > 64k (ali polje 64k)
podaci > 64k (ali polje 64k)
podaci > 64k (polje > 64k)

kod 64k
kod > 64k
kod 64k
kod > 64k
kod 64k

.STACK rezervira prostor za stog (exe programi trebaju stog).


Treba biti potencija broja 2.
.STACK [size]
size - definira veliinu stoga u byte-ovima. Ako nije navedeno nita veliina
stoga je 1K.

.CODE oznaava poetak koda programa.

13

Arhitektura digitalnog raunala

Prevoenje i povezivanje programa


Prvi korak je prevoenje programa u strojni kod (kompajliranje).
masm ime_programa.asm
Kao rezultat prevoenja se dobiju tri datoteke:
*.obj - datoteka s prevedenim programom,
*.lst - tekstualna datoteka u kojoj se nalazi i strojni kod i linije programa,
*.crf - tekstualna datoteka s strojnim kodom.
Nakon uspjenog prevoenja ide povezivanje (linkanje) i stvara se izvrni
program.
link ime_programa.obj
Kao rezultat prevoenja se dobiju dvije datoteke:
*.exe - izvrna datoteka,
*.map - datoteka koja definira poetni offset, kraj i duljinu (u byte-ovima)
svakog segmenta u programu

int 21h
int 21h je DOS prekid (interrupt) koji sadri 100-tinjak osnovnih funkcija
potrebnih za normalan rad korisnikih aplikacija.
Izmeu ostalog on omoguava otvaranje, zatvaranje, pisanje i itanje datoteka;
itanje znakova s tastature, ispis znakova na ekran, uzimanje i postavljanje
sistemskog vremena,
Svaka od tih funkcija ima svoj broj i kada se pozove int 21h, on ita broj funkcije
iz registra ah. to znai da se prije poziva prekida broj eljene funkcije mora
staviti u registar ah.
Ah
4c
01h

Al
00h

02h

09h

Funkcija
kraj programa
skuplja znak s tastature i sprema ga u AL
uzima znak koji se nalazi u DL i ispisuje ga
na ekran
uzima string s poetnom adresom u DX i
ispisuje ga na ekran

14

Arhitektura digitalnog raunala

Tipovi varijabli
.DATA
Oznaava poetak segmenta u kojem se nalaze podaci.
Sintaksa:
naziv_var

direktiva

inicializator

Direktiva

Veliina____________

DB

1B (define byte)

DW

2B (define word)

DD

4B (define double word)

DF

6B (define farword)

DQ

8B (define qadword)

DT

10B

Cijeli brojevi
DB (Define Byte) opseg vrijednosti od -128 do 127 ili 0 255
DW (Define Word) bez predznaka 0 65 535 ili
sa predznakom od -32768 do 32767
DD (Define Double Word) bez predznaka od 0 do 4 294 967 295 ili
sa predznakom od - 2 147 483 648 do 2 147 483 647
...
Primjer:
broj1
broj2

DB
DB

16
?

broj1 = 16
broj2 nije inicijaliziran

Stringovi
Uglavnom se koristi DB direktiva.
Primjer:
pod1
pod2
pod3

DB
DB
DB

"abc$"
'a', 'b', 'c', '$'
97, 98, 99, 36

pod1 = 'abc$' (string)


pod2 = 'abc$' (znakovi)
pod3 = 'abc$' (ascii vrijednosti)

15

Arhitektura digitalnog raunala

Pokazivai
Uglavnom se koristi:
DW - za adresiranje unutar istog segmenta
DD - za adresiranje u neki drugi segment
Primjer:
pod

DB

"Tekst$"

string

pok1
pok2

DW
DD

pod
pod

pokaziva
pokaziva

tip

broj

DUP (vrijednost)

Polja
Sintaksa:
ime

broj broj elemenata polja


vrijednost vrijednost(i) koju e DUP duplicirati
Primjer:
polje1 DB 5 DUP (1)
polje1 DB 5 DUP (1,2)
polje1 DB 5 DUP (?)

~
~

polje1 DB 1,1,1,1,1
polje1 DB 1,2,1,2,1,2,1,2,1,2
rezervira se prostor u memoriji za 5 DB ali
nisu inicijalizirani na poetnu vrijednost.

a DB 48h, 65h, 6Ch, 6Ch, 6Fh, 00h


b DB 'Hello', 0
a i b su dva identina polja. Kada kompajler vidi string unutar jednostrukih
navodnika prevodi ga kao set byte-ova ...

Elementima polja se moe pristupiti na sljedei nain:


polje1[0]
polje1[1]
...
Takoer se moe iskoristiti vrijednost pojedinih registara: BX, SI, DI, BP
polje1[SI]
...

16

Arhitektura digitalnog raunala

Konstante
EQU koristi se za definiranje konstanti
Sintaksa:
konst EQU izraz
Primjer:
Ukoliko se radi o brojanim konstantama:
kolona EQU 80 kolona = 80
red
EQU 40 red = 40
Ukoliko se radi o stringu:
kr1 EQU kolona-redak
kr1 = 40
kr2 EQU <kolona-redak> kr2 = "kolona-redak"

@DATA
@DATA ita adresu na kojoj se nalazi poetak podatkovnog segmenta koji je
inicijaliziran naredbom .DATA.
Ta adresa se prvo kopira u AX a tek onda u DS jer 8086 procesor ne dozvoljava
direktno kopiranje konstante u segmentni registar.
mov ax, @DATA
mov ds, ax

17

Arhitektura digitalnog raunala

Skokovi
Bezuvjetni skokovi
JMP - bezuvjetni skok na navedenu memorijsku adresu
DIREKTNI
Sintaksa:
JMP labela
JMP SHORT labela
JMP FAR PTR labela

INDIREKTNI
Sintaksa:
JMP

reg_ili_mem

Da bi deklarirali labelu potrebno je unijeti naziv labele i dodati : na kraj. Npr.


labela1:
labela2:
a:

Naziv labele ne smije poeti brojem.


Labela se moe deklarirati u posebnom retku programa ili prije bilo koje
instrukcije.
x1:
mov ax, 1
x2:

mov ax, 2

Uvjetni skokovi
Uvjetni skokovi slijede iza naredbi CMP ili TEST.
Sintaksa:
CMP vrijednost1, vrijednost2

NAREDBA labela

usporeuje ove dvije vrijednosti (vrijednost1 i vrijednost2) i obje ostaju


nepromijenjene.
TEST vrijednost1, vrijednost2

NAREDBA labela

radi logiko I s operandima.

18

Arhitektura digitalnog raunala

Openito, kada je potrebno usporediti dvije numerike vrijednosti - koristi se


naredba CMP. Obavljaju se iste akcije kao pri naredbi oduzimanja, ali se ne
pohranjuje rezultat, nego se samo postavljaju vrijednosti zastavica.
Primjer:
Kada je potrebno usporediti 5 i 2,
5-2=3
Rezulat nije nula (Zero Flag=0)
Kada je potrebno usporediti 7 i 7,
7-7=0
Rezulat je nula! Zero Flag (ZF) = 1 JZ i JE e izvriti skok.

Naredba

Opis

Zastavice

Suprotna
naredba

JE , JZ

Jump if Equal (=).


Jump if Zero.

ZF = 1

JNE, JNZ

JNE , JNZ

Jump if Not Equal (<>).


Jump if Not Zero.

ZF = 0

JE, JZ

JG , JNLE

Jump if Greater (>).


Jump if Not Less or Equal (not <=).

JL , JNGE

Jump if Less (<).


Jump if Not Greater or Equal (not >=).

JGE , JNL

Jump if Greater or Equal (>=).


Jump if Not Less (not <).

JLE , JNG

Jump if Less or Equal (<=).


Jump if Not Greater (not >).

ZF = 0
and
SF = OF

JNG, JLE

SF <> OF

JNL, JGE

SF = OF

JNGE, JL

ZF = 1
or
SF <> OF

JNLE, JG

19

Arhitektura digitalnog raunala

Procedure
Sintaksa:
ime_proc PROC {NEAR/FAR}
------RET [konst]
ime_proc ENDP
PROC i ENDP su direktive kompajleru tako da se one ne prevode u strojni kod.
Kompajler samo pamti adresu procedure.
NEAR - ako je kod procedure u istom segmentu kao i poziv procedure (CALL
naredba). Na stog se pohranjuje sadraj IP (Instruction Pointer) registra.
FAR - ako kod procedure moe biti u razliitom segmentu od poziva procedure
(CALL naredba). Na stog se pohranjuje sadraj registara CS (Code Segment) i
IP (Instruction Pointer).
CALL naredba se koristi za poziv procedure.
.model
--.code
ime_proc PROC NEAR
--ime_proc ENDP
start:
--CALL ime_proc
--end start

Procedura se moe nalaziti i u odvojenoj datoteci, to se oznaava koritenjem


kljune rijei EXTRN:
dat1.asm

dat2.asm

.model
--.code

.model
--.code
PUBLIC ime_proc
ime_proc PROC
---

EXTRN

ime_proc: NEAR/FAR

start:
--CALL

--end start

ime_proc

RET

ime_proc ENDP
END

20

Arhitektura digitalnog raunala

Makroi
Sintaksa:
ime_makroa
-------

MACRO

[arg1, arg2, ]

ENDM

Makro se poput procedure koristi kako bi se izbjeglo viestruko pisanje koda


koji se ponavlja, te kako bi se poveala itljivost programa.
Makroi izgledaju kao procedure, ali oni postoje samo dok va kod nije
kompajliran. Nakon kompajliranja svi makroi se zamjenjuju stvarnim
naredbama. Ako je u programu deklariran makro koji se nikada ne poziva iz
programa, kompajler e ignorirati cijeli makro.
.model
--.code
ime_makroa
--ENDM

start:
--ime_makroa [vr1, vr2, ]
--end start

Usporedba makroa i procedura:


Za razliku od procedura koje se pozivaju CALL naredbom kada se eli
koristiti makro upie se samo naziv makroa.
Procedura se nalazi na odreenoj adresi u memoriji i ako program poziva
istu proceduru 100 puta, procesor e svaki put prebaciti kontrolu nad
izvravanjem u taj dio memorije. Stog se koristi za pohranu adrese na
koje se program treba vratiti nakon zavretka izvoenja procedure.
Makro se ekspandira direktno u kod programa. Ako program koristi isti
makro 100 puta, kompajler umee makro isto toliko puta inei krajnji
exe-fajl sve veim i veim.
Potrebno je koristiti stog ili neki od registara ope namjene da bi se
poslali parametri u proceduru.

21

Arhitektura digitalnog raunala

Makro moe uzimati i argumente. Argument moe biti:

varijabla
registar
konstanta

Da bi se poslali parametri u makro dovoljno ih je pri pozivu navesti nakon


naziva makroa.
MyMacro 1,2,3

Direktiva ENDM oznaava kraj makroa, dok se kraj procedure oznaava


imenom procedure iza kojeg ide direktiva ENDP.
Kod makroa treba biti oprezan s koritenjem skokova i labeli jer ako se makro
pozove na nekoliko mjesta u programu (a makro se umee direktno u kod
programa) imati emo vie labeli s istim imenom.
Da bi se to izbjeglo potrebno je tu labelu definirati kao

LOCAL.

.MODEL small
.DATA
.STACK
.CODE
MyMacro MACRO
LOCAL label1, label2
cmp ax, 2
je label1
cmp ax, 3
je label2
label1:
inc ax
label2:
add ax, 2
--ENDM
Start:
--MyMacro
MyMacro
--mov ax, 4c00h
int 21h
END Start

22

Arhitektura digitalnog raunala

Naredbe

23

Arhitektura digitalnog raunala

Naredbe za manipuliranje podacima

ZADATAK

NAREDBE

Prebacuje podatke iz jednog reg. u drugi ili


iz registra u memoriju.
Postavlja registre za adresiranje
memorijske lokacije

MOV, XCHG
LDS, LEA, LES

Upravljanje stogom

POP, POPF, POPA,


PUSH, PUSHF, PUSHA

Prebacivanje niza znakova ili rijei

LODS, MOVS, STOS

Registar registar ili registar memorija


MOV odredite,

izvor
1

8-bitni
registar

3
7
MEMORIJA

(varijabla)

16-bitni
registar

KONSTANTA

seg. registar
bez CS

XCHG odredite,

izvor

zamjenjuje sadraj izvorita i odredita.

Postavljanje registara za pristup adresama u memoriji


LEA registar,

var

Load Effective Address Koristi se za spremanje adrese varijable u


registar. (Alternativa LEA naredbi je koritenje OFFSET operatora).

24

Arhitektura digitalnog raunala

LDS registar,

far_ptr

Load memory double word into word register and DS.


LES registar,

far_ptr

Load memory double word into word register and ES.


Ova naredba se koristi kada podaci ne mogu stati unutar jednog
segmenta i far_ptr je pokaziva na podatke u nekom drugom segmentu.
Ona mijenja trenutnu adresu DS (LDS) ili ES (LES) registru u adresu
segmenta na kojeg pokazuje far_ptr, a u registar se upisuje adresa na
koju pokazuje far_ptr.

Naredbe za rad sa stogom


POP xxx

Skida 1 rije s stoga i sprema u xxx (16-bitna varijabla, registar ili seg.
registar).
PUSH xxx

Stavlja 1 rije iz xxx na stog.


POPF

Skida 1 rije s stoga i sprema je u registar zastavica.


PUSHF

Stavlja registar zastavica na stog.


POPA

Skida sa stoga 8 rijei i sprema ih u DI, SI, BP, SP, BX, DX, CX, AX.
PUSHA

Stavlja na stog sadraj registara AX, CX, DX, BX, SP, BP, SI, DI.

25

Arhitektura digitalnog raunala

Upravljanje blokovima podataka


MOVS odredite,

MOVSB

MOVSW

izvor

kopira 8 ili 16 bita s adrese DS:SI na adresu ES:DI, nakon ega se SI i DI


inkrementiraju/dekrementiraju za 1 ili 2 ovisno o tome da li se prebacuje 8 ili
16 bita.

LODS operand

LODSB

LODSW

kopira 8/16 bita s adrese


inkrementira/dekrementira.

DS:SI

AL/AX.

Nakon prebacivanja

SI

se

STOS operand

STOSB

STOSW

kopira 8/16 bita iz registra


se inkrementira/dekrementira.

ES:[DI]

AL/AX

na adresu

ES:DI.

Nakon prebacivanja

STOS

AX
MOVS

DS:[SI]

Ah

Al

LODS

26

DI

Arhitektura digitalnog raunala

Uvjetne petlje
LOOP labela

ova naredba dekrementira registar CX i radi skok na labelu, sve dok CX


ne postane 0.
LOOPE labela

ili

LOOPZ labela

ova naredba dekrementira registar CX i radi skok na labelu sve dok je


postavljena Zero Flag zastavica (ZF=1) i dok je CX <> 0.
LOOPNE labela

ili

LOOPNZ labela

ova naredba dekrementira registar CX i radi skok na labelu sve dok


nije postavljena Zero Flag zastavica (ZF=0) i dok je CX <> 0.
REP naredba_za_rad_sa_stringom

Koristi se za ponavljanje jedne naredbe za rad sa stringom onoliko


puta koliko pie u CX.
U kombinaciji s naredbom REP mogu se koristiti naredbe:
MOVSB, MOVSW , LODSB, LODSW , STOSB, STOSW .

27

Arhitektura digitalnog raunala

Aritmetike operacije
U ovu grupu operacija spadaju operacije za zbrajanje, oduzimanje, mnoenje i
dijeljenje. Svaka od operacija radi s 8 i 16 bitnim vrijednostima, s tim da
operacije za mnoenje i dijeljenje postoje odvojeno za rad s brojevima s
predznakom (signed) i brojevima bez predznaka (unsigned).
Zbrajanje
ADD op1,

op2 op1 = op1 + op2

Zbraja dva broja pri emu operandi mogu biti veliine 8 ili 16 bita, ali
oba moraju biti iste veliine. Za ovu naredbu oba broja su pozitivna, tj.
MSB (Most Significant Bit) nije bit predznaka.
ADC op1,

op2 op1 = op1 + op2 + CF

Zbraja dva broja s tim da ako je u prethodnoj operaciji dolo do


preljeva uzima to u obzir i zbraja i CF (Carry Flag).
INC var/reg

var = var + 1 ili reg = reg + 1

Increase - Uveava vrijednost u registru ili varijablu za 1.


Oduzimanje
SUB op1,

op2 op1 = op1 - op2

Oduzima dva broja pri emu operandi mogu biti veliine 8 ili 16 bita,
ali oba moraju biti iste veliine. Za ovu naredbu uzima se da su oba broja
pozitivna.
SBB op1,

op2 op1 = op1 - op2 - CF

Oduzima dva broja s tim da ako je u prethodnoj operaciji dolo do


posudbe uzima to u obzir i oduzima i CF.
DEC var/reg

var = var - 1 ili reg = reg - 1

Decrease - Umanjuje vrijednost u registru ili varijablu za 1.


NEG var/reg

var = var * (-1) ili reg = reg * (- 1)

Dvostruki komplement. Npr. 5 postaje -5, a -2 postaje 2 ...

28

Arhitektura digitalnog raunala

Mnoenje
MUL op2

Unsigned multiply - Koristi se za mnoenje brojeva (bez predznaka) s


tim da se jedan operand nalazi u registru AL a drugi se pie iza naredbe
MUL. Rezultat ide u registar AX.
To vrijedi samo ako su operandi 8-bitni, dok se za 16 bitne operande prvi
operand nalazi u AX, drugi se pie iza naredbe i rezultat ide u registre DX
(viih 16 bita) i AX (niih 16 bita). op2 moe biti ili registar ili varijabla.
Kada je operand byte (8 bita)
AX = AL * operand
Kada je operand word (16 bita)
(DX AX) = AX * operand
IMUL op2

Signed multiply - Koristi se za mnoenje brojeva s predznakom, a


princip je isti kao kod naredbe MUL.

Dijeljenje
DIV djelitelj

Unsigned divide - Koristi se za dijeljenje cjelobrojno pozitivnih brojeva


s tim da se djeljenik nalazi ili u registru AX (ako je djelitelj 8-bitni) ili u
DXAX (ako je djelitelj 16-bitni).
Djelitelj moe biti ili registar ili varijabla.
Kada je djelitelj byte (8 bita)
AL = AX / operand
AH - ostatak
Kada je djelitelj word (16 bita)
AX = (DX AX) / operand
DX - ostatak
IDIV djelitelj

Signed divide - Koristi se za dijeljenje brojeva s predznakom, a princip


je isti kao kod naredbe DIV.

29

Arhitektura digitalnog raunala

Logike operacije
AND op1,

op2 op1 = op1 AND op2

Ova naredba izvrava logiko I izmeu operanda1 i operanda2.


1
1
0
0
OR op1,

AND
AND
AND
AND

1
0
1
0

=
=
=
=

1
0
0
0

op2 op1 = op1 OR op2

Ova naredba izvrava logiko OR izmeu operanda1 i operanda2.


1
1
0
0
XOR op1,

OR
OR
OR
OR

1
0
1
0

=
=
=
=

1
1
1
0

op2 op1 = op1 XOR op2

Ova naredba izvrava logiko XOR izmeu operanda1 i operanda2.


1
1
0
0

XOR
XOR
XOR
XOR

1
0
1
0

=
=
=
=

0
1
1
0

NOT op

Ova naredba izvrava logiku negaciju, tj sve 01 i sve 10.

30

Arhitektura digitalnog raunala

Operacije za pomak i rotiranje bitova


Pomak bitova
SHL odredite,

broja

Shift Left Ova naredba se koristi za pomicanje bitova na odreditu


ulijevo za onoliko puta koliko pie u brojau. Kako se bitovi odredita
pomiu ulijevo na prazna mjesta dolaze 0. Najznaajniji bit ide u CF.
Odredite je ili varijabla ili registar. Broja moe biti ili konstanta ili
registar CL.

CF
SHR odredite,

broja

Shift Right Ova naredba se koristi za pomicanje svih bitova na


odreditu (raunajui MSB) u desno za onoliko puta koliko pie u brojau.
Kako se bitovi odredita pomiu udesno na prazna mjesta dolaze 0.
SAL odredite,

broja

Shift Arithmetic Left


SAR odredite,

broja

Shift Arithmetic Right


Ove naredbe se koriste za pomicanje bitova na odreditu udesno za
onoliko puta koliko pie u brojau, s tim da bit predznaka zadrava svoju
vrijednost.

Rotiranje bitova
RCL odredite,

broja

Rotate (operand) left through Carry Flag Ova naredba se koristi za


rotiranje bitova odredita ulijevo za onoliko mjesta koliko je navedeno u
brojau.
Odredite moe biti ili varijabla ili registar, dok je broja ili CL registar ili
konstanta.
RCL koristi kao proirenje i CF, tako da se vrijednost CF pomie u LSB, a
MSB ide u CF.
CF

MSB

LSB

31

Arhitektura digitalnog raunala

RCR odredite,

broja

Rotate (operand) right through Carry Flag Ova naredba se koristi za


rotiranje bitova odredita udesno za onoliko mjesta koliko je navedeno u
brojau.
RCR koristi kao proirenje i CF, tako da se vrijednost CF pomie u MSB, a
LSB ide u CF.
ROL odredite,

broja

Rotate Left Ova naredba se koristi za rotiranje bitova odredita


ulijevo za onoliko mjesta koliko je navedeno u brojau, s tim da se MSB
prebacuje i u LSB i u CF.
Odredite moe biti ili varijabla ili registar, dok je broja ili CL registar ili
konstanta.
CF

ROR odredite,

MSB

LSB

broja

Rotate Right Ova naredba se koristi za rotiranje bitova odredita


udesno za onoliko mjesta koliko je navedeno u brojau, s tim da se LSB
prebacuje i u MSB i u CF.

Usporedba i testiranje stringova


CMPS

Ova naredba se koristi za usporedbu 1, 2 ili 4 byte-a na adresi DS:SI


sa 1, 2 ili 4 byte-a na adresi ES:DI na nain da se te dvije vrijednosti
oduzimaju. Rezultat se nigdje ne sprema nego se samo postavljaju
zastavice.
Nakon usporedbe registri SI i DI se inkrementiraju/dekrementiraju.
Da li e se usporeivati 1, 2 ili 4 byte-a odreuje se odabirom naredbe:

CMPSB

Copmare String Byte

CMPSW

Copmare String Word

CMPSD

Copmare String Doubleword

32

Arhitektura digitalnog raunala

Primjeri

33

Arhitektura digitalnog raunala

Primjeri asemblerskog programiranja - zadaci s rjeenjima

Primjer 1: Napisati program koji u registar bx upisuje broj 5, a onda ga iz


registra bx prebacuje u ax.
.MODEL small
.DATA
.STACK
.CODE
Start:
mov bx, 5
mov ax, bx
mov ax, 4c00h
int 21h
END Start

Primjer 2: Napisati program koji ispisuje poruku "Zdravo svima!" na ekran.


.MODEL small
.DATA
string DB "Zdravo svima!$"
.STACK
.CODE
Start:
mov ax, @DATA
mov ds, ax
mov dx, OFFSET string
mov ah, 09h
int 21h
mov ax, 4c00h
int 21h
END Start

34

Arhitektura digitalnog raunala

Primjer 3: Napisati program koji na ekran ispisuje broj 3 (koristiti prekid za ispis
znaka).
.MODEL small
.DATA
.STACK
.CODE
Start:
mov ax, @DATA
mov ds, ax
mov dl, '3'
mov ah, 02h
int 21h
mov ax, 4c00h
int 21h
END Start

Primjer 4: Napisati program koji unosi znak s tastature i odmah ga zatim


ispisuje na ekran.
.MODEL small
.DATA
.STACK
.CODE
Start:
mov ax, @DATA
mov ds, ax
mov ah, 01h
int 21h
mov dl, al
mov ah, 02h
int 21h
mov ax, 4c00h
int 21h
END Start

35

Arhitektura digitalnog raunala

Primjer 5: Zaokruite programe koji e na ekran ispisati broj 5.


a)

b)

c)

.MODEL small
.STACK
.CODE

.MODEL small
.STACK
.CODE

.MODEL small
.STACK
.CODE

Start:
mov dl, '5'
mov ah, 02h
int 21h

Start:
mov dl, 5
mov ah, 02h
int 21h

Start:
mov dl, 53
mov ah, 02h
int 21h

mov ax, 4c00h


int 21h
END Start

mov ax, 4c00h


int 21h
END Start

mov ax, 4c00h


int 21h
END Start

Rjeenje: a) i c)

Primjer 6: Napii program koji sadraj registra AX zapisuje u BX, a sadraj iz


BX u AX. Pri tome koristiti stog.
.MODEL small
.DATA
.STACK
.CODE
Start:
mov ax, 1212h
mov bx, 3434h
push ax
push bx
pop ax
pop bx
mov ax, 4c00h
int 21h
END Start

36

Arhitektura digitalnog raunala

Primjer 7: to e ispisati sljedei program?


.MODEL small
.STACK
.CODE
Start:
mov cx, 0
mov ax, '3'
ponovo:
cmp cx, 6
jge kraj
inc ax
mov dl, al
mov ah, 02h
int 21h
add cx, 3
jmp ponovo
kraj:
mov ax, 4c00h
int 21h
END Start
Rjeenje: 45

Primjer 8: to e ispisati sljedei program?


.MODEL small
.DATA
str DB 5 DUP ('5')
.STACK
.CODE
Start:
mov ax, @DATA
mov ds, ax
mov si, 0
mov str[si], '0'
inc si
inc si
mov str[si], '1'
mov str[5], '$'
mov dx, OFFSET str
mov ah, 09h
int 21h
mov ax, 4c00h
int 21h
END Start
Rjeenje: 05155

37

Arhitektura digitalnog raunala

Primjer 9: Napii program koji simulira FOR petlju. Npr. program koji 10 puta
na ekranu ispisuje 3.
.MODEL small
.DATA
.STACK
.CODE
Start:
mov ax, @DATA
mov ds, ax
mov cx, 0
ponovo:
cmp cx, 10
jge kraj
mov dl, '3'
mov ah, 02h
int 21h
inc cx
jmp ponovo
kraj:
mov ax, 4c00h
int 21h
END Start

38

Arhitektura digitalnog raunala

Primjer 10: Napii program koji simulira IF-ELSE grananje. Npr. program koji
unosi broj s tastature i nakon toga provjerava da li je uneseni broj vei od 5,
manji od 5 ili jednak 5. Na ekran je potrebno ispisati odgovarajuu poruku: "Broj
je veci od 5 !", "Broj je manji od 5 !" ili "Unijeli ste broj 5 !" .
.MODEL small
.DATA
string1 DB "Broj je manji od 5 !$"
string2 DB "Broj je veci od 5 !$"
string3 DB "Unijeli ste broj 5 !$"
.STACK
.CODE
Start:
mov ax, @DATA
mov ds, ax
mov ah, 01h
int 21h
cmp al, '5'
je pet
jg veci
mov dx, OFFSET string1
mov ah, 09h
int 21h
jmp kraj
pet:
mov dx, OFFSET string3
mov ah, 09h
int 21h
jmp kraj
veci:
mov dx, OFFSET string2
mov ah, 09h
int 21h
kraj:
mov ax, 4c00h
int 21h
END Start

39

Arhitektura digitalnog raunala

Primjer 11: Napisati program koji unosi znak s tastature i odmah ga zatim
ispisati dva puta na ekran. Za unos znaka s tastature koristiti makro (unos
MACRO), a ispis znaka na ekran realizirati kroz proceduru (ispis PROC).
.MODEL small
.DATA
.STACK
.CODE
unos MACRO
mov ah, 01h
int 21h
ENDM
ispis PROC NEAR
mov ah, 02h
int 21h
ret
ispis ENDP
Start:
unos
mov dl, al
call ispis
call ispis
mov ax, 4c00h
int 21h
END Start

40

Arhitektura digitalnog raunala

Primjer 12: Ispitajte sadraj registara AX, BX, CX i DX u naznaenom trenutku


izvoenja programa.
.MODEL small
.DATA
a DW 3
b DW 4
.STACK
.CODE
Start:
mov ax, @DATA
mov ds, ax
mov si, OFFSET a
mov dx, [si]
mov si, OFFSET b
mov bx, [si]
mov ax, 8123h
mov cx, 1456h
shl cx, 1
mul bx
=> Upiite sadraj registara AX, BX, CX, DX u ovom trenutku
izvravanja programa.
mov ax, 4C00h
int 21h
END Start

Rjeenje:
AX = 048Ch
BX = 4h
CX = 28ACh
DX = 2h

41

Arhitektura digitalnog raunala

Primjer 13: Definirajte u memoriji jedan 16-bitni i jedan 32-bitni broj te ih nakon
toga uitajte u procesor (registre unutar CPU 8086).
.MODEL small
.DATA
a DW 789Ah
b DD 2959ED51h
.STACK
.CODE
Start:
mov ax, @DATA
mov ds, ax
mov si, OFFSET a
mov cx, [si]
mov
mov
inc
inc
mov

si, OFFSET b
bx, [si]
si
si
ax, [si]

mov ax, 4C00h


int 21h
END Start

42

Arhitektura digitalnog raunala

Prilog
ASCII kod (American Standard Code for Information Interchange)
Char Dec Oct Hex | Char Dec Oct Hex | Char Dec Oct Hex | Char Dec Oct Hex
------------------------------------------------------------------------------------(nul)
0 0000 0x00 | (sp)
32 0040 0x20 | @
64 0100 0x40 | `
96 0140 0x60
(soh)
1 0001 0x01 | !
33 0041 0x21 | A
65 0101 0x41 | a
97 0141 0x61
(stx)
2 0002 0x02 | "
34 0042 0x22 | B
66 0102 0x42 | b
98 0142 0x62
(etx)
3 0003 0x03 | #
35 0043 0x23 | C
67 0103 0x43 | c
99 0143 0x63
(eot)
4 0004 0x04 | $
36 0044 0x24 | D
68 0104 0x44 | d
100 0144 0x64
(enq)
5 0005 0x05 | %
37 0045 0x25 | E
69 0105 0x45 | e
101 0145 0x65
(ack)
6 0006 0x06 | &
38 0046 0x26 | F
70 0106 0x46 | f
102 0146 0x66
(bel)
7 0007 0x07 | '
39 0047 0x27 | G
71 0107 0x47 | g
103 0147 0x67
(bs)
8 0010 0x08 | (
40 0050 0x28 | H
72 0110 0x48 | h
104 0150 0x68
(ht)
9 0011 0x09 | )
41 0051 0x29 | I
73 0111 0x49 | i
105 0151 0x69
(nl)
10 0012 0x0a | *
42 0052 0x2a | J
74 0112 0x4a | j
106 0152 0x6a
(vt)
11 0013 0x0b | +
43 0053 0x2b | K
75 0113 0x4b | k
107 0153 0x6b
(np)
12 0014 0x0c | ,
44 0054 0x2c | L
76 0114 0x4c | l
108 0154 0x6c
(cr)
13 0015 0x0d | 45 0055 0x2d | M
77 0115 0x4d | m
109 0155 0x6d
(so)
14 0016 0x0e | .
46 0056 0x2e | N
78 0116 0x4e | n
110 0156 0x6e
(si)
15 0017 0x0f | /
47 0057 0x2f | O
79 0117 0x4f | o
111 0157 0x6f
(dle) 16 0020 0x10 | 0
48 0060 0x30 | P
80 0120 0x50 | p
112 0160 0x70
(dc1) 17 0021 0x11 | 1
49 0061 0x31 | Q
81 0121 0x51 | q
113 0161 0x71
(dc2) 18 0022 0x12 | 2
50 0062 0x32 | R
82 0122 0x52 | r
114 0162 0x72
(dc3) 19 0023 0x13 | 3
51 0063 0x33 | S
83 0123 0x53 | s
115 0163 0x73
(dc4) 20 0024 0x14 | 4
52 0064 0x34 | T
84 0124 0x54 | t
116 0164 0x74
(nak) 21 0025 0x15 | 5
53 0065 0x35 | U
85 0125 0x55 | u
117 0165 0x75
(syn) 22 0026 0x16 | 6
54 0066 0x36 | V
86 0126 0x56 | v
118 0166 0x76
(etb) 23 0027 0x17 | 7
55 0067 0x37 | W
87 0127 0x57 | w
119 0167 0x77
(can) 24 0030 0x18 | 8
56 0070 0x38 | X
88 0130 0x58 | x
120 0170 0x78
(em)
25 0031 0x19 | 9
57 0071 0x39 | Y
89 0131 0x59 | y
121 0171 0x79
(sub) 26 0032 0x1a | :
58 0072 0x3a | Z
90 0132 0x5a | z
122 0172 0x7a
(esc) 27 0033 0x1b | ;
59 0073 0x3b | [
91 0133 0x5b | {
123 0173 0x7b
(fs)
28 0034 0x1c | <
60 0074 0x3c | \
92 0134 0x5c | |
124 0174 0x7c
(gs)
29 0035 0x1d | =
61 0075 0x3d | ]
93 0135 0x5d | }
125 0175 0x7d
(rs)
30 0036 0x1e | >
62 0076 0x3e | ^
94 0136 0x5e | ~
126 0176 0x7e
(us)
31 0037 0x1f | ?
63 0077 0x3f | _
95 0137 0x5f | (del) 127 0177 0x7f
ASCII Opis
-----------------------nul
null byte
bel
bell character
bs
backspace
ht
horizontal tab
np
formfeed
nl
newline
cr
carriage return
vt
vertical tab
esc
escape
sp
space

Treba uoiti da pojedine znamenke prikazane kao znak ne odgovaraju po


binarnom prikazu odgovarajuem cijelom broju.
Npr. znamenka 7 prikazana kao cijeli broj u 1 byte-u iznosi 0000 0111, a
prikazana kao ASCII znak 0011 0111.
Pretvorba:
broj = znak - 48
broj = znak - '0'
broj = znak & 0x0f

43

Arhitektura digitalnog raunala

Primjeri prevoenja i povezivanja programa


U primjerima koji slijede koriten je Microsoft Macro Assembler (MASM).
Prevoenje programa u strojni kod (kompajliranje):

Povezivanje programa (linkanje) stvaranje izvrnog programa:

Dobili smo izvrnu datoteku vj1.exe

44

Arhitektura digitalnog raunala

Turbo Debugger
Za analiziranje ponaanja napisanog programa (liniju po liniju koda) koristiti
emo Turbo Debugger.
td.exe se nalazi u BIN direktoriju

Nakon pokretanja Turbo Debugger-a moe se uitati izvrna datoteka vj1.exe


(prethodno kreirana - primjer 1)
File => Open ...

Moe se pojaviti poruka o greci: Program has no symbol table


Zanemarite ovu vrstu pogreke. Kliknite OK.

45

Arhitektura digitalnog raunala

Na ekranu se mogu uoiti pojedina podruja ...

1 kod vaeg programa


2 registri
3 registar zastavica
4 memorijske lokacije
5 stog

Da bi vidjeli ponaanje programa liniju po liniju koda (step by step) pritisnite F8


(Run => Step Over)
Konkretno u primjeru 1 izvri se prva naredba ...
mov bx, 5

Na gornjoj slici se vidi da je sadraj registra bx promijenio vrijednost:


bx=0005h

46

Arhitektura digitalnog raunala

Nakon to se jo jednom pritisne F8 izvri se druga linija programa ...


mov ax, bx

Nakon toga vrijednost registra ax i bx je postavljena na 5.


Idua naredba postavlja vrijednost registra ax=4C00h
Na kraju program poziva int21 kraj programa.

Na isti nain kao u prvom primjeru izvri se kompajliranje i linkanje drugog


naeg primjera:
masm vj2
link vj2

Nakon to se pokrene program ispie se poruka: Zdravo svima!

47

Vous aimerez peut-être aussi