29
1-1 1. ARHITEKTURA RAČUNARA I INSTRUKCIJE PROCESORA Elemente arhitekture računara čine programski dostupni registri, tipovi podataka, formati instrukcija, načini adresiranja, skup instrukcija i mehanizam prekida. 1.1 Programski dostupni registri Programski dostupni registri procesora su registri u koje je moguće programskom putem izvršavanjem instrukcija procesora upisivati vrednosti i iz kojih je moguće programskom putem izvršavanjem instrukcija procesora očitavati vrednosti. Vrednost koja se u neki od ovih registara upisuju u nekom od koraka izvršavanja instrukcije koriste se u nekom ili nekim kasnijim koracima izvršavanja te iste instrukcije, ali ne neke od sledećih instrukcija. Upisivanje vrednosti u ove registre i čitanje vrednosti iz ovih registara je nemoguće specificirati instrukcijama. To je određeno usvojenim algoritmima izvršavanja svake instrukcije posebno. Ovi registri su deo organizacije računara. Funkcije i broj programski dostupnih registara se razlikije od procesora do procesora. Ovde se daju oni programski dostupni registri koji se često sreću kod komercijalno raspoloživih procesora i to programski brojač PC, registri podataka DR, adresni registri AR, bazni registar BR, indeksni registri XR, registri opšte namene GPR, programska statusna reč PSW, ukazivač na vrh steka SP i ukazivač na okvir steka FP. Programski brojač PC je standardni programski brojač procesora čija se vrednost implicitno koristi kao adresa memorijske lokacije sa koje se čita instrukcija. Vrednost programskog brojača PC se menja i to implicitno prilikom svakog čitanja instrukcije kada se vrši inkrementiranje programskog brojača PC i eksplicitno instrukcijama skoka kada se u programski brojač brojač PC upisuje nova vrednost. Registri podataka DR se koriste kod registarskog direktnog adresiranja. Registrima podataka se pristupa programskim putem instrukcijama prenosa i aritmetičkim, logičkim i pomeračkim instrukcijama. Registri podataka se uvode da bi se ubrzao pristup podacima, tako

Vezba 1 - Instrukcijska arhitektura racunara.pdf

Embed Size (px)

Citation preview

Page 1: Vezba 1 - Instrukcijska arhitektura racunara.pdf

1-1

1.

ARHITEKTURA RAČUNARA I INSTRUKCIJE PROCESORA

Elemente arhitekture računara čine programski dostupni registri, tipovi podataka,

formati instrukcija, načini adresiranja, skup instrukcija i mehanizam prekida.

1.1 Programski dostupni registri

Programski dostupni registri procesora su registri u koje je moguće programskom putem

izvršavanjem instrukcija procesora upisivati vrednosti i iz kojih je moguće programskom

putem izvršavanjem instrukcija procesora očitavati vrednosti. Vrednost koja se u neki od ovih

registara upisuju u nekom od koraka izvršavanja instrukcije koriste se u nekom ili nekim

kasnijim koracima izvršavanja te iste instrukcije, ali ne neke od sledećih instrukcija.

Upisivanje vrednosti u ove registre i čitanje vrednosti iz ovih registara je nemoguće

specificirati instrukcijama. To je određeno usvojenim algoritmima izvršavanja svake

instrukcije posebno. Ovi registri su deo organizacije računara.

Funkcije i broj programski dostupnih registara se razlikije od procesora do procesora.

Ovde se daju oni programski dostupni registri koji se često sreću kod komercijalno

raspoloživih procesora i to programski brojač PC, registri podataka DR, adresni registri AR,

bazni registar BR, indeksni registri XR, registri opšte namene GPR, programska statusna reč

PSW, ukazivač na vrh steka SP i ukazivač na okvir steka FP.

Programski brojač PC je standardni programski brojač procesora čija se vrednost

implicitno koristi kao adresa memorijske lokacije sa koje se čita instrukcija. Vrednost

programskog brojača PC se menja i to implicitno prilikom svakog čitanja instrukcije kada se

vrši inkrementiranje programskog brojača PC i eksplicitno instrukcijama skoka kada se u

programski brojač brojač PC upisuje nova vrednost.

Registri podataka DR se koriste kod registarskog direktnog adresiranja. Registrima

podataka se pristupa programskim putem instrukcijama prenosa i aritmetičkim, logičkim i

pomeračkim instrukcijama. Registri podataka se uvode da bi se ubrzao pristup podacima, tako

Page 2: Vezba 1 - Instrukcijska arhitektura racunara.pdf

1-2

što bi se tokom izvršavanja programa pristupalo podacima u registrima podataka procesora

umesto u memorijskim lokacijama, a rezultat je činjenice da je pristup registrima skoro za red

veličine brži od pristupa memorijskim lokacijama. Korišćenje registara podataka radi

ubrzavanja pristupa podacima ima smisla ukoliko se u toku nekog računanja javi potreba da

se viša puta koristi neki podatak.

Adresni registri AR se koriste kod registarskog indirektnog adresiranja i autoinkrement

i autodekrement načina adresiranja. Adresni registri se uvode da bi se ubrzao pristup

adresama, tako što bi se tokom izvršavanja programa pristupalo adresama u adresnim

registrima procesora umesto u memorijskim lokacijama, a rezultat je činjenice da je pristup

registrima skoro za red veličine brži od pristupa memorijskim lokacijama.

Bazni registri BR se koriste kod baznog i bazno-indeksnog adresiranja. Zbir sadržaja

specificiranog baznog registra i pomeraja kod baznog adresiranja, odnosno baznog registra,

indeksnog registra i pomeraja kod bazno-indeksnog adresiranja, predstavlja adresu

memorijske lokacije na kojoj se nalazi izvorišni ili odredišni operand.

Indeksni registri XR se koriste kod indeksnog i bazno-indeksnog adresiranja. Zbir

sadržaja specificiranog indeksnog registra i pomeraja kod indeksnog adresiranja, odnosno

baznog registra, indeksnog registra i pomeraja kod bazno-indeksnog adresiranja, predstavlja

adresu memorijske lokacije na kojoj se nalazi izvorišni ili odredišni operand.

Registri opšte namene GPR se koriste na isti način kao registri podataka, adresni

registri, bazni registri i indeksni registri. Registri opšte namene GPR se javljaju kod onih

procesora kod kojih ne postoje posebni registri podataka, adresni registri, bazni registri i

indeksni registri. Za razliku od procesora sa posebnim registrima podataka, adresnim

registrima, baznim registrima i indeksnim registrima, gde se registri iz svake grupe registara

koriste samo uz odgovarajuća adresiranja, procesori sa registrima opšte namene mogu da

koriste bilo koji od registara uz bilo koje adresiranje.

Registar PSW je standardna programska statusna reč procesora sastavljena od

određenog broja bitova, koji se obično nazivaju indikatori. Bitovi programske statusne reči

PSW se nezavisno postavljaju i koriste po pravilima definisanim posebno za svaki bit. U

programskoj statusnoj reči PSW postoje dve grupe bitova i to bitovi statusnog i bitovi

upravljačkog karaktera. Na slici 1 je prikazana tipična struktura PSW registra.

Slika 1. Struktura registra PSW

Bitovi statusnog karaktera su:

- N—bit koji se postavlja na 1 u slučaju da je rezultat operacije negativan,

Page 3: Vezba 1 - Instrukcijska arhitektura racunara.pdf

1-3

- Z—bit koji se postavlja na 1 u slučaju da je rezultat operacije jednak 0,

- C—bit koji se postavlja na 1 u slučaju prenosa/pozajmice u aritmetici celobrojnih

veličina bez znaka i

- V—bit koji se postavlja na 1 u slučaju prekoračenja u aritmetici celobrojnih veličina

sa znakom.

Bit upravljačkog karaktera je:

- I—bit koji je jednak 1 ako treba da budu dozvoljeni maskirajući prekidi.

Bitovi statusnog karaktera N, Z, C i V, se postavljaju hardverski na osnovu rezultata

izvršavanja instrukcija, a proveravaju softverski instrukcijama uslovnog skoka. Bitovi

upravljačkog karaktera se postavljaju softverski kao rezultat izvršavanja posebnih instrukcija,

a proveravaju hardverski u saglasnosti sa algoritmom izvršavanja instrukcija.

Registar SP je ukazivač na vrh steka kada je stek je organizovan u operativnoj

memoriji.

Registar SP se pojavljuje u procesorima kao podrška za realizaciju LIFO strukture podataka.

Prilikom upisa u LIFO strukturu podataka ili čitanja iz LIFO strukture podataka sadržaj

registra SP se koristi kao adresa memorijske lokacije u koju treba upisati podatak ili iz koje

treba očitati podatak. Tom prilikom se vrši i ažuriranje i to inkrementiranje ili

dekrementiranje sadržaja registra SP. LIFO strukturu podataka je moguće realizovati na četiri

načina u zavisnosti od toga da li se kod upisa vrši inkrementiranje ili dekrementiranje sadržaja

registra SP, pa se kaže da stek raste prema višim ili prema nižim lokacijama, i da li sadržaj

registra SP ukazuje na zadnju zauzetu lokaciju ili prvu slobodnu lokaciju.

Stek raste prema višim lokacijama a registar SP ukazuje na zadnju zauzetu lokaciju

Kod upisa na stek najpre se vrši inkrementiranje registra SP, pa sa posle toga sadržaj

registra SP koristi kao adresa memorijske lokacije u koju se upisuje. Kod čitanja sa steka

najpre se sadržaj registra SP koristi kao adresa memorijske lokacije sa koje se čita sadržaj, pa

se posle toga vrši dekrementiranje sadržaja registra SP.

Stek raste prema višim lokacijama a registar SP ukazuje na prvu slobodnu lokaciju

Kod upisa na stek najpre se sadržaj registra SP koristi kao adresa memorijske lokacije u

koju se upisuje, pa se posle toga vrši inkrementiranje registra SP. Kod čitanja sa steka najpre

se vrši dekrementiranje sadržaja registra SP, pa se posle toga sadržaj registra SP koristi kao

adresa memorijske lokacije sa koje se čita sadržaj.

Stek raste prema nižim lokacijama a registar SP ukazuje na zadnju zauzetu lokaciju

Page 4: Vezba 1 - Instrukcijska arhitektura racunara.pdf

1-4

Kod upisa na stek najpre se vrši dekrementiranje registra SP, pa sa posle toga sadržaj

registra SP koristi kao adresa memorijske lokacije u koju se upisuje. Kod čitanja sa steka

najpre se sadržaj registra SP koristi kao adresa memorijske lokacije sa koje se čita sadržaj, pa

se posle toga vrši dekrementiranje sadržaja registra SP.

Stek raste prema nižim lokacijama a registar SP ukazuje na prvu slobodnu lokaciju

Kod upisa na stek najpre se sadržaj registra SP koristi kao adresa memorijske lokacije u

koju se upisuje, pa se posle toga vrši dekrementiranje registra SP. Kod čitanja sa steka najpre

se vrši inkrementiranje sadržaja registra SP, pa se posle toga sadržaj registra SP koristi kao

adresa memorijske lokacije sa koje se čita sadržaj.

Ukazivač na okvir steka FP (frame pointer ili base pointer, BP) ukazuje na bazu

okvira (frame-a) koji se formira na steku kod poziva potprograma. Koristi se za pristup:

- parametrima koji se predaju kod poziva potprograma i

- lokalnim promenljivim veličinama kod jezika sa dinamičkim dodeljivanjem

prostora kod ulaska u potprogram i oslobađanjem prostora kod napuštanja

potprograma.

1.2 Instrukcije procesora

Rad procesora je određen instrukcijama koje on izvršava, a koje se zovu mašinske

instrukcije ili računarske instrukcije. Skup različitih instrukcija koje procesor može da izvrši

se zove skup instrukcija procesora. Skup standardnih instrukcija čine instrukcije prenosa,

aritmetičke instrukcije, logičke instrukcije, instrukcije pomeranja i rotiranja, instrukcije skoka

i mešovite instrukcije. U tabeli 1 su date osnovne instrukcije procesora.

Tabela 1. Osnovne instrukcije procesora

Instrukcije

prenosa

MOV a,b Prebacivanje podatka iz jedne lokacije u drugu

IN a,b

Prebacivanje iz registra kontrolora periferije a u registar

procesora b

OUT a,b Prebacivanje iz registra procesora a u registar kontrolora

periferije b

LOAD a Prebacivanje podatka sa lokacije a u akumulator

STORE a Smeštanje podatka iz akumulatora na lokaciju a

PUSH a Podatak sa lokacije a se smešta na stek (može biti i

bezadresna, tada se podrazumeva akumulator kao izvor)

POP a Podatak sa steka se smešta na lokaciju a (može biti i

bezadresna, tada se podrazumeva akumulator kao odredište)

Aritmetičke

instrukcije

ADD a,b,c

ADD a,b

ADD a

Sabiranje operanada sa lokacija a i b i smeštanje na lokaciju

c; kod dvoadresne instrukcije jedan od operanada je i

odredište; kod jednoadresne instrukcije jedan izvor i

Page 5: Vezba 1 - Instrukcijska arhitektura racunara.pdf

1-5

ADD odredište je akumulator; kod bezadresne instrukcije vrh

steka je implicitan izvor i odredište

SUB a,b,c

SUB a,b

SUB a

SUB

Oduzimanje

MUL a,b,c

MUL a,b

MUL a

MUL

Množenje

DIV a,b,c

DIV a,b

DIV a

DIV

Deljenje

INC a,b

INC a

INC

Inkrementiranje operanda sa lokacije a i smeštanje na

lokaciju b; kod jednoadresne instrukcije odredište je

lokacija a, kao i izvor; kod bezadresne instrukcije vrh steka

je implicitno odredište i izvor

DEC a,b

DEC a

DEC

Dekrementiranje

Logičke

instrukcije

AND a,b,c

AND a,b

AND a

AND

Operacija logičko I

OR a,b,c

OR a,b

OR a

OR

Operacija logičko ILI

XOR a,b,c

XOR a,b

XOR a

XOR

Operacija logičko XOR

NOT a,b

NOT a

NOT

Operacija komplementiranja

Instrukcije

pomeranja

ASR a,b

ASR a

ASR

Aritmetičko pomeranje udesno; na mesto novog MSB bita

se upisuje stari MSB bit

ASL a,b

ASL a

ASL

Aritmetičko pomeranje ulevo; na mesto novog LSB bita se

upisuje 0

LSR a,b

LSR a

LSR

Logičko pomeranje udesno; na mesto novog MSB bita se

upisuje 0

LSL a,b

LSL a

LSL

Logičko pomeranje ulevo; na mesto novog LSB bita se

upisuje 0

ROR a,b

ROR a

Rotiranje udesno; na mesto novog MSB bita se upisuje stari

LSB bit

Page 6: Vezba 1 - Instrukcijska arhitektura racunara.pdf

1-6

ROR

ROL a,b

ROL a

ROL

Rotiranje ulevo; na mesto novog LSB bita se upisuje stari

MSB bit

RORC a,b

RORC a

RORC

Rotiranje udesno sa prenosom; na mesto novog MSB bita se

upisuje bit prenosa C, koji je jednak starom LSB bitu

ROLC a,b

ROLC a

ROL

Rotiranje ulevo sa prenosom; na mesto novog LSB bita se

upisuje bit prenosa C, koji je jednak starom LSB bitu

Instrukcije

skoka

JMP a Bezuslovni skok na adresu a, koja se upisuje u PC procesora

kao naredna instrukcija za izvršavanje

JMPIND a Bezuslovni skok na adresu koja je specificirana operandom

a

BEQL a

BNEQ a

BGRTU a

BGREU a

BLSSU a

BLEQU a

BGRT a

BGRE a

BLSS a

BLEQ a

BNEG a

BNNG a

BOVF a

BNVF a

Instrukcije uslovnog skoka u zavisnosti od vrednosti

indikatora u PSW-u; a je pomeraj u odnosu na PC na koji

treba skočiti

JEQL a

JNEQ a

JGRTU a

JGREU a

JLSSU a

JLEQU a

JGRT a

JGRE a

JLSS a

JLEQ a

JNEG a

JNNG a

JOVF a

JNVF a

Instrukcije bezuslovnog skoka u zavisnosti od vrednosti

indikatora u PSW-u; a je adresa na koju se skače

JSR a Skok na potprogram na adresi a

RTS Povratak iz potprograma

INT a Skok na prekidnu rutinu na adresi a

RTI Povratak iz prekidne rutine

Page 7: Vezba 1 - Instrukcijska arhitektura racunara.pdf

1-7

1.2.1 Elementi mašinske instrukcije

Svaka instrukcija mora da sadrži informacije koje procesor zahteva za izvršenje.

Elementi mašinske instrukcije su:

- Kod operacije, koji određuje operaciju koja treba da se izvede. On predstavlja binarni

kod koji jedinstveno određuje svaku operaciju.

- Referenca izvornog operanda, koja obuhvata jedan ili više izvršnih operanada koji se

koriste kao ulazi za izvršenje instrukcija.

- Referenca rezultujućeg operanda, koja obuhvata rezultujući operand, tj. rezultat

izvršenja instrukcije.

- Referenca na sledeću instrukciju, koja govori procesoru gde se nalazi sledeća

instrukcija koju treba izvršiti posle završetka tekuće instrukcije.

Sledeća instrukcija koja treba da se izvrši se nalazi u glavnoj memoriji ili na disku (kod

sistema sa virtuelnom memorijom). U većini slučajeva, sledeća instrukcija koja treba da se

izvrši se nalazi neposredno iza tekuće instrukcije. Na slici 2 je prikazan dijagram stanja

instrukcijskog ciklusa.

Slika 2. Dijagram stanja instrukcijskog ciklusa

Operandi izvora i rezultata mogu da se nalaze u jednoj od sledeće tri oblasti:

1. Glavna ili virtuelna memorija,

2. Registri procesora,

3. U/I uređaji (u slučaju memorijski preslikanog ulaza/izlaza predstavlja adresu u glavnoj

memoriji koja je rezervisana za dati uređaj).

1.2.2 Predstavljanje instrukcija

Unutar računara, svaka instrukcija je predstavljena nizom bitova. Podeljena je na polja

koja odgovaraju elementima instrukcije koji su njen sastavni deo. Jednostavan primer formata

Page 8: Vezba 1 - Instrukcijska arhitektura racunara.pdf

1-8

instrukcije je prikazan na slici 3. Za vreme izvršenja instrukcije, ona se učitava u registar za

instrukcije IR, koji se nalazi u procesoru.

Slika 3. Primer formata instrukcije

Binarno predstavljene mašinske instrukcije su teško razumljive za čoveka. Stoga je

uobičajena praksa da se koristi simboličko predstavljanje mašinskih instrukcija. Operacioni

kodovi se predstavljaju skraćenicama koje se zovu mnemonici i ukazuju na određenu

operaciju. Neki od primera su ADD, SUB, LOAD, POP,…, a primer kompletne instrukcije je:

ADD x,y,z

Jezik u kome se koriste simboličko predstavljene mašinske instrukcije se zove asembler.

1.2.3 Vrste instrukcija

Instrukcije se mogu klasifikovati po operacijama koje izvršavaju i po broju adresnih

polja koje koriste za svoje izvršavanje. Stoga razlikujemo operacije koje se koriste za:

- Obradu podataka (aritmetičke i logičke instrukcije),

- Skladištenje podataka (memorijske instrukcije),

- Pomeranje podataka (U/I instrukcije),

- Upravljanje (testiranje i grananje).

Po broju adresa razlikujemo sledeće operacije:

- Bezadresne (imaju samo kod operacije bez adresa operanada),

- Jednoadresne (imaju kod operacije i prostor za jedan operand),

- Dvoadresne (imaju kod operacije i prostor za dva operanda),

- Troadresne (imaju kod operacije i prostor za tri operanda).

Na slici 4 su upoređene tipične jednoadresne, dvoadresne i troadresne instrukcije, koje

bi mogle da se upotrebe da bi se izračunala vrednost izraza Y = (A – B) / [C + (D * E)]. Sa tri

adrese, svaka instrukcija određuje dve lokacije izvornih operanada i odredišnu lokaciju

operanada. Privremena lokacija T se koristi da se skladište međurezultati, kako ne bismo

menjali sadržaj nijedne od lokacija.

Page 9: Vezba 1 - Instrukcijska arhitektura racunara.pdf

1-9

Slika 4. Programi za izračunavanje izraza Y = (A – B) / [C + (D * E)]

Troadresni formati instrukcija nisu uobičajeni zato što zahtevaju relativno dugačak

format instrukcije da bi se smestile tri adresne reference. Kod dvoadresnih instrukcija i za

binarne operacije, jedna adresa mora da ima dvostruku ulogu, kao operand i kao rezultat.

Prema tome, instrukcija SUB Y, B izvodi računanje Y – B i skladišti rezultat u Y. Dvoadresni

format smanjuje količinu memorije potrebne za smeštanje instrukcija, ali unosi i izvesnu

nezgrapnost. Da bi se izbeglo menjanje vrednosti operanda, koristi se instrukcija MOVE kako

bi se jedna od vrednosti prebacila u lokaciju za rezultat ili privremenu lokaciju pre nego što se

izvede operacija. U ovom primeru, program se širi na šest instrukcija.

Još jednostavnija je jednoadresna instrukcija. Da bi ona radila, druga adresa mora da

bude implicitna. Implicitna adresa je obično registar u procesoru koji se naziva akumulator

(Acc). Akumulator sadrži jedan od operanada i koristi se za skladištenje rezultata. U ovom

primeru, potrebno je osam instrukcija da bi se izvršio zadatak.

Bezadresne instrukcije se mogu koristiti kod računara koji poseduju specijalnu

organizaciju memorije koja se zove stek. Stek je skup lokacija sa kojima se radi po pravilu

LIFO (Last In, First Out), poslednji podatak koji se smesti na stek se prvi čita. Podatak se

smešta na stek instrukcijom PUSH, a uzima sa steka instrukcijom POP.

1.2.4 Vrste operanada

Operandi predstavljaju podatke koji se mogu podeliti u četiri kategorije:

1. Adrese (operand može predstavljati adresu u operativnoj memoriji ili adresu

registra),

2. Brojevi,

3. Znakovi,

4. Logički podaci.

Page 10: Vezba 1 - Instrukcijska arhitektura racunara.pdf

1-10

Brojevi u računaru mogu biti predstavljeni u vidu tri tipa numeričkih podataka:

1. Celi brojevi (brojevi u fiksnom zarezu),

2. Brojevi u pokretnom zarezu,

3. Decimalni brojevi (predstavljeni BCD (engl. Binary Coded Decimal numbers)

kodom).

Znakovi se predstavljaju pomoću binarnih kodova, od kojih je najzastupljeniji 7-bitni

ASCII kod.

Logički podaci u računaru se predstavljaju pomoću jednog bita koji ima vrednost 0 za

netačnu vrednost izraza (false) i 1 za tačnu vrednost izraza (true).

Zadatak 1. Na steku se nalaze simboli A, B, C i D, tako da je A na vrhu steka.

Izračunati vrednost izraza (A3 + B + C) * D i smestiti ga na stek. Koristiti jednu pomoćnu

lokaciju b i naredbe LOAD, STORE, POP, PUSH koje koriste akumulator, kao i jednoadresne

aritmetičke naredbe ADD i MUL, kod kojih je prvi operand u akumulatoru, drugi u memoriji,

a rezultat ostaje u akumulatoru.

Naredba Adresa Komentar

POP (Acc) = A

STORE b (b) = (Acc) = A

MUL b (Acc) = (Acc) * (b) = A * A

MUL b (Acc) = (Acc) * (b) = A * A * A

STORE b (b) = A3

POP (Acc) = B

ADD b (Acc) = (Acc) + (b) = B + A3

STORE b (b) = B + A3

POP (Acc) = C

ADD b (Acc) = C + B + A3

STORE b (b) = C + B + A3

POP (Acc) = D

MUL b (Acc) = D * (C + B + A3)

PUSH

Zadatak 2. Napisati program za izračunavanje izraza (X + Y) * Z – W2, gde se X, Y, Z

i W nalaze u memorijskim ćelijama sa adresama a, b, c i d, respektivno. Program ne sme da

menja sadržaj ovih ćelija. Na raspolaganju je i lokacija e na koju se smešta rezultat, kao i

pomoćna lokacija f. Program napisati za računar koji koristi:

a) jednoadresne naredbe,

Page 11: Vezba 1 - Instrukcijska arhitektura racunara.pdf

1-11

b) dvoadresne naredbe, kod kojih je prva adresa adresa prvog operanda, druga adresa

adresa drugog operanda i adresa na koju se smešta rezultat,

c) troadresne naredbe, kod kojih je prva adresa adresa prvog operanda, druga adresa

adresa drugog operanda, a treća adresa adresa rezultata.

Rešenje:

a)

Instrukcija Komentar

LOAD d (Acc) = W

MUL d (Acc) = (Acc) * (d) = W2

STORE e (e) = W2

LOAD a (Acc) = X

ADD b (Acc) = (Acc) + (b) = X + Y

MUL c (Acc) = (Acc) * (c) = (X + Y) * Z

SUB e (Acc) = (Acc) – (e) = (X + Y) * Z – W2

STORE e (e) = (X + Y) * Z – W2

b)

Instrukcija Komentar

MOVE d,e (e) = W

MUL d,e (e) = (e) * (d) = W2

MOVE b,f (f) = Y

ADD a,f (f) = (a) + (f) = X + Y

MUL c,f (f) = (c) * (f) = (X + Y) * Z

SUB f,e (e) = (f) - (e) = (X + Y) * Z – W2

c)

Instrukcija Komentar

MUL d,d,e (e) = (d) * (d) = W2

ADD a,b,f (f) = (a) + (b) = X + Y

MUL f,c,f (f) = (f) * (c) = (X + Y) * Z

SUB f,e,e (e) = (f) – (e) = (X + Y) * Z – W2

Page 12: Vezba 1 - Instrukcijska arhitektura racunara.pdf

1-12

INSTRUKCIJE GRANJANJA I SKOKA

Instrukcije grananja imaju kao jedan od svojih operanada adresu sledeće instrukcije koja

treba da se izvrši. Ove instrukcije najčešće obuhvataju instrukcije uslovnog grananja. To znači

da se grananje vrši ako se ispuni određeni uslov, u suprotnom se izvršava sledeća instrukcija

po redosledu. Instrukcije grananja u kojima se grananje uvek preduzima zovu se instrukcije

bezuslovnog grananja.

Neke od najčešćih instrukcija skoka (uslovnog grananja) su date u tabeli 1.

Tabela 1. Neke od najčešćih instrukcija skoka

Tip skoka Mnemonik Uslov

Branch if Zero BZ Z = 1

Branch if not Zero BNZ Z = 0

Branch if Carry BC C = 1

Branch if not Carry BNC C = 0

Branch if Negative BN N = 1

Branch if Positive BNN N = 0

Branch if Overflow BV V = 1

Branch if not Overflow BNV V = 0

Kao što se iz tabele 1 vidi, instrukcije skoka se izvršavaju na osnovu stanja indikatora

(flegova) u programskoj statusnoj reči (PSW). Ovde dati mnemonici operacija predstavljaju

interno označavanje koje nema veze ni sa jednom konkretnom arhitekturom.

Na postavljanje indikatora utiču samo aritmetičke i logičke instrukcije, kao i instrukcija

LOAD, dok ostale instrukcije ne postavljaju flegove u PSW-u. Šta to znači? Ako imamo, npr.

instrukciju ADD a,b,c i kao rezultat se dobije 0, tada će se automatski postaviti fleg Z (zero)

na 1. Ukoliko posle toga ide naredba uslovnog skoka, npr. BZ, ona će proveriti tu vrednost i

pošto je Z = 1, skočiti na određeno mesto u kodu. Naravno, ovo je uopšteno poimanje

arhitekture računara, dok se konkretne implementacije mogu razlikovati.

Adresa programskog skoka se u asembleru uglavnom obeležava sa labelom. Labela

predstavlja proizvoljnu alfa-numeričku oznaku koja se piše ispred određene instrukcije.

Labela označava datu instrukciju tako da se može koristiti kao adresa skoka. Primer labele:

L1: ADD a,b,c !instrukcija postavlja flegove u PSW-u

BZ L1 !ako je rezultat 0 (dakle Z = 1), skače se na labelu L1, tj. instrukciju

!ADD

Naredba bezuslovnog skoka JMP označava da se skok mora izvršiti. Ona kao parametar,

takođe, ima labelu na koju se skače.

Page 13: Vezba 1 - Instrukcijska arhitektura racunara.pdf

1-13

Zadatak 3. Napisati program koji množi dva binarna broja A i B koji su smešteni na

lokacijama x i y, respektivno. Na raspolaganju su jednoadresne instrukcije skoka, LOAD,

STORE i ADD, kao i bezadresne instrukcije INC i DEC. Rezultat se smešta na lokaciju w.

Rešenje. Pošto nije dostupna instrukcija MUL, zadatak se rešava sabiranjem broja A

sa samim sobom B puta, ili sabiranjem broja B sa samim sobom A puta. Pri svakom

sabiranju, vrednost broja B, odnosno A, se umanjuje za 1. Sabiranje se vrši sve dok broj B,

odnosno A, ne postane jednak 0.

Labela Instrukcija Adresa Komentar

LOAD #00h Acc 0

STORE w w 0

L1: LOAD w Acc (w)

ADD x Acc (Acc) + (x)

STORE w w (Acc)

LOAD y Acc (y)

DEC Acc (Acc) – 1

STORE y y (Acc)

LOAD y Mora se učitati kako bi se

proverila vrednost indikatora

BNZ L1

Zadatak 4. Napisati program koji vrši celobrojno deljenje brojeva A i B koji se nalaze na

lokacijama x i y, respektivno. Ostatak deljenja se smešta na lokaciju z, a količnik na lokaciju

w. Na raspolaganju su jednoadresne instrukcije skoka, LOAD, STORE, ADD, SUB i

bezadresne instrukcije INC i DEC.

Rešenje. Pošto nije dostupna instrukcija DIV, zadatak se rešava uzastopnim

oduzimanjem delioca od deljenika, sve dok se ne dobije 0 u slučaju da je deljiv bez ostatka, ili

negativan broj, ako je deljiv sa ostatkom. Broj koraka u kojima se kao rezultat oduzimanja

dobija pozitivan broj je rezultat deljenja, a ako se kao rezultat oduzimanja dobije negativan

broj, ostatak se dobija njegovim sabiranjem sa deliocem.

Pr.

17 : 5 = 3 i ostatak 2

17 – 5 = 12 i = 1

12 – 5 = 7 i = 2

7 – 5 = 2 i = 3

2 – 5 = -3 i = 4 -3 < 0 => količnik je i = 3

-3 + 5 = 2 Ostatak je 2

Page 14: Vezba 1 - Instrukcijska arhitektura racunara.pdf

1-14

Komentari:

- Na lokaciji w smo upisali -1, jer će broj ciklusa u kojima se vrši oduzimanje uvek biti

za 1 veći od traženog količnika. Ako bismo ostavili 0, onda bismo po izlasku iz

ciklusa morali da umanjimo sadržaj lokacije w za 1.

- Broj -1 predstavljen u komplementu dvojke u heksadecimalnom zapisu je FF.

Zadatak 5. Napisati program za deljenje dva broja A i B koji se nalaze na lokacijama x i y,

respektivno, sa zaštitom od deljenja sa nulom. Celobrojni rezultat smestiti na lokaciju z. U

slučaju deljenja sa nulom, na lokaciju w upisati 0, a u slučaju ispravnog deljenja upisati 1. Na

raspolaganju je instrukcija DIV, kao i ostale jednoadresne instrukcije i instrukcije skoka.

Labela Instrukcija Adresa Komentar

LOAD #FFh Acc -1

STORE w w -1

LOAD #00h Acc 0

STORE z z 0

L1: LOAD x Acc (x)

SUB y Acc (Acc) – (y)

STORE x x (Acc)

LOAD w Acc (w)

INC Acc (Acc) + 1

STORE w w (Acc)

LOAD x Acc (x)

BNN L1

ADD y Acc (Acc) + (y)

STORE z z (Acc)

Labela Instrukcija Adresa Komentar

LOAD y Acc (y)

BZ L1

LOAD x Acc (x)

DIV y Acc (Acc) / (y)

STORE z z (Acc)

LOAD #01h Acc 1

STORE w w (Acc)

JMP L2 preskaču se sledeće

dve naredbe

L1: LOAD #00h Acc 0

STORE w w (Acc)

L2:

Page 15: Vezba 1 - Instrukcijska arhitektura racunara.pdf

1-15

Komentar:

- Prilikom uslovnog grananja (analogno if naredbi u programskom jeziku C), samo

jedna od mogućnosti se može izvršavati (da ili ne). Ukoliko je broj B jednak 0, uslov

naredbe BZ je ispunjen i skače se na labelu L1, čime se preskače deo koda kada uslov

nije ispunjen, što je u redu. Ukoliko uslov nije ispunjen, program nastavlja sukcesivno

da izvršava instrukciju po instrukciju (LOAD, DIV, STORE,…) i da nismo stavili

JMP L2, program bi izvršio i naredbe LOAD #00h i STORE w, a to ne sme da uradi.

Zbog toga je stavljena instrukcija JMP L2, kako bi se u tom slučaju navedene dve

instrukcije preskočile.

Page 16: Vezba 1 - Instrukcijska arhitektura racunara.pdf

16

NAČINI ADRESIRANJA

Referenca operanda u instrukciji sadrži ili stvarnu vrednost operanda (neposrednu) ili

referencu na adresu operanda. U raznim skupovima instrukcija koristi se širok spektar

različitih načina adresiranja. Načini adresiranja obuhvataju direktno (adresa operanda je u

polju adrese), indirektno (polje adrese pokazuje na lokaciju koja sadrži adresu operanda),

registarsko, registarsko indirektno i razne oblike adresiranja sa pomerajem, u kojima se

vrednost u registru dodaje vrednosti adrese da bi se proizvela adresa operanda.

Format instrukcije definiše raspored polja u instrukciji. Dizajn formata instrukcije je

složen zadatak, koji obuhvata razmatranja kao što su dužina instrukcije, fiksna ili promenljiva

dužina, broj bitova dodeljenih kodu operacije i svakoj referenci operanda i kako se određuje

način adresiranja.

Adresno polje, ili polja, u tipičnom formatu instrukcije su relativno mala. Željeni cilj je

da se referencira širok opseg lokacija u glavnoj ili virtuelnoj memoriji. Da bi se postigao taj

cilj, primenjuju se razne tehnike adresiranja. Sve one podrazumevaju neki kompromis između

opsega adresa, sa jedne strane, i/ili fleksibilnosti izračunavanja adrese, sa druge strane.

Polazeći od činjenice da se pri izvršavanju programa, programski kod koji realizuje

algoritam rešenja i podaci koji se pri tome obrađuju nalaze u operativnoj memoriji koncept

adresiranja u prvom nivo se realizuje na relaciji procesor - operativna memorija. S obzirom

da se podaci koji se obrađuju mogu kod nekih arhitektura naći i u skupu registara potrebno je

definisati da li se adresa koju generiše procesor odnosi na operativnu memoriju, skup

registara ili je operand neposredno dat u instrukciji. Tako se dolazi do podele adresiranja na

osnovu značenja izvršne adrese na:

Memorijsko adresiranje;

Registarsko adresiranje;

Neposredno adresiranje.

Dalje, memorijsko i registarsko adresiranje mogu biti direktno i indirektno. Direktno

označava da se operand nalazi na lokaciji čija je adresa specificirana u instrukciji. Indirektno

adresiranje označava da se operand nalazi na adresi čija je adresa specificirana u instrukciji.

Page 17: Vezba 1 - Instrukcijska arhitektura racunara.pdf

17

Polazeći od opšteg formata instrukcije, koji sadrži sva tri adresna polja može da se uoči

problem sa prostorom u memoriji koji bi u njoj zauzeo program sastavljen od takvih

instrukcija. Tražeći moguća rešenja ovog problema dolazi se do mogućeg odgovora koji se

bazira na instrukcijama sa manjim brojem adresnih polja. Time se dolazi do druge podele

adresiranja na:

Eksplicitno adresiranje – instrukcija eksplicitno sadrži sve adrese potrebne za

identifikovanje lokacija gde se nalaze operandi i lokacije gde se pamti rezultat;

Implicitno adresiranje – instrukcija ima manji broj adresnih polja, što znači da je

neka od adresa implicitno specificirana. To podrazmeva da mora postojati

mehanizam koji ukazuje ovakve situacije i po pravilu je ugrađen u kod operacije

preko tzv. bitova modifikacije.

Implicitno adresiranje se najdirektnije uočava razmatranjem podele instrukcije prema

broju adresnih polja u formatu instrukcije.

Na osnovu načina formiranja izvršne adrese, načini adresiranja se mogu podeliti na:

Apsolutno i

Relativno.

Kod apsolutnog načina adresiranja ne postoje dodatne operacije kako bi se odredila

izvršna adresa. Kod relativnog načina adresiranja, uglavnom se moraju odraditi neke

aritmetičke operacije nad određenim poljima instrukcije i sadržajima određenih registara

kako bi se dobila izvršna adresa.

Najzastupljenije tehnike adresiranja su:

- Neposredno,

- Memorijski direktno,

- Memorijski indirektno,

- Registarsko,

- Registarsko indirektno,

- Adresiranje sa pomerajem,

- Adresiranje pomoću steka.

Ovi načini adresiranja su ilustrovani na slici 5. Notacija podrazumeva sledeće:

A – sadržaj polja adrese u instrukciji,

R – sadržaj polja adrese u instrukciji koji referencira (upućuje na) registar

EA – stvarna (efektivna) adresa lokacije koja sadrži referencirani operand,

(X) – sadržaj memorijske lokacije X ili registra X.

Page 18: Vezba 1 - Instrukcijska arhitektura racunara.pdf

18

Slika 5. Načini adresiranja

U tabeli 2 su prikazani načini dobijanja adrese operanda za svaki od načina adresiranja.

Tabela 2. Načini dobijanja adrese operanda za svaki od načina adresiranja

Način

adresiranja

Algoritam Glavna

prednost

Glavni nedostatak

Neposredno Operand = A Nema reference

memorije

Ograničena veličina

operanda

Memorijski

direktno

EA = A Jednostavno Ograničen adresni

prostor

Memorijski

indirektno

EA = (A) Veliki adresni

prostor

Višestruke reference

memorije

Registarsko

direktno

EA = R Nema reference

memorije

Ograničen adresni

prostor

Registarsko

indirektno

EA = (R) Veliki adresni

prostor

Dodatna memorijska

referenca

Sa

pomerajem

EA = A + (R) Fleksibilnost Složenost

Pomoću

steka

EA = vrh

steka

Nema reference

memorije

Ograničena

primenljivost

Page 19: Vezba 1 - Instrukcijska arhitektura racunara.pdf

19

Skoro sve arhitekture računara obezbeđuju više od jednog od tih načina adresiranja.

Postavlja se pitanje kako procesor može da odredi koji način adresiranja se koristi u određe-

noj instrukciji. Preduzima se više pristupa. Često će različiti kodovi operacije koristiti

različite načina adresiranja. Takođe, jedan ili više bitova u formatu instrukcije mogu da se

upotrebe kao polje za način adresiranja. Vrednost polja za način adresiranja određuje koji se

način koristi.

U sistemu bez virtuelne memorije, efektivna adresa će biti ili adresa u glavnoj memoriji

ili registar. Stvarno preslikavanje na fizičku adresu je funkcija mehanizma straničenja i

nevidljivo je za programera.

Način adresiranja se može specificirati kao poseban deo instrukcije, u okviru koda

operacije, ili kao zasebno polje (slika 6). Takođe, veličina prenosa (bajt, polureč, reč,…) se

može specificirati u instrukciji.

Slika 6. Specificiranje načina adresiranja kao dela instrukcije

1.3 Neposredno adresiranje

Najjednostavniji oblik adresiranja je neposredno adresiranje, u kome je vrednost

operanda prisutna u instrukciji (slika 7).

Operand = A

Slika 7. Neposredno adresiranje

Taj način može da se upotrebi da definiše i koristi konstante ili da postavlja početne

vrednosti promenljivih. Tipično, broj će biti uskladišten u obliku komplementa dvojke;

krajnji levi bit polja za operand se koristi kao bit predznaka. Kada se operand učita u registar

za podatke, bit predznaka se proširuje nalevo do potpune veličine reči podatka.

Page 20: Vezba 1 - Instrukcijska arhitektura racunara.pdf

20

Primer.

Prednost neposrednog adresiranja je što nema drugih referenci memorije sem donošenja

instrukcije koje se zahteva da bi se dobio operand, pa se prema tome štedi jedan ciklus

memorije ili keša u ciklusu instrukcije. Nedostatak je što je veličina broja ograničena

dimenzijom polja za adresu, koja je, u većini skupova instrukcija, mala u poređenju sa

dužinom reči.

1.4 Memorijski direktno adresiranje

Memorijski direktno adresiranje je veoma jednostavan oblik adresiranja, u kome polje

za adresu sadrži efektivnu adresu operanda (slika 8):

EA = A

Slika 8. Memorijski direktno adresiranje

Ta tehnika je bila uobičajena u ranijim generacijama računara, ali se ne sreće često u

savremenim arhitekturama. Zahteva samo jednu referencu memorije i nema posebnih

izračunavanja. Očigledno ograničenje je to što obezbeđuje samo ograničen adresni prostor.

Primer.

Page 21: Vezba 1 - Instrukcijska arhitektura racunara.pdf

21

1.5 Memorijski indirektno adresiranje

Kod memorijski direktnog adresiranja, dužina polja za adrese je obično manja od

dužine reči, što ograničava adresni opseg. Jedno rešenje je da se u adresnom polju referencira

na adresu reči u memoriji, koja sa svoje strane sadrži adresu operanda potpune dužine. To je

poznato kao memorijski indirektno adresiranje (slika 9):

EA = (A)

Slika 9. Memorijski indirektno adresiranje

Kao što je ranije definisano, zagrade se tumače kao značenje sadržaja. Očigledna

prednost tog pristupa je da je sada, za dužinu reči od N, na raspolaganju prostor od 2N.

Nedostatak je što izvršenje instrukcije zahteva dve reference memorije da bi se dobio

operand: jednu da se dobije njegova adresa i drugu da se dobije njegova vrednost.

Mada je broj reči koje mogu da se adresiraju sada jednak 2N, broj različitih efektivnih

adresa koje mogu da se referenciraju u bilo kom trenutku je ograničen na 2k gde je k dužina

polja za adrese. Tipično, to nije toliko neugodno ograničenje kao što bi se moglo pomisliti i

čak može da bude prednost.

Retko korišćena varijanta memorijski indirektnog adresiranja je adresiranje u više nivoa

ili kaskadno indirektno adresiranje:

EA = (...(A)...)

Page 22: Vezba 1 - Instrukcijska arhitektura racunara.pdf

22

U tom slučaju, jedan od bitova adrese pune reči je indirektni marker (I). Ako je bit I

jednak 0, onda reč sadrži EA. Ako je bit I jednak 1, onda se poziva drugi nivo indirektnosti.

Izgleda da nema neke naročite prednosti tog pristupa, a njegov nedostatak je to što bi se

zahtevalo tri ili više memorijskih referenci da bi se dobio operand.

1.6 Registarsko direktno adresiranje

Registarsko adresiranje je slično memorijski direktnom adresiranju. Jedina razlika je to

što adresno polje referencira registar, a ne adresu u glavnoj memoriji (slika 10):

EA = R

Slika 10. Registarsko direktno adresiranje

Radi razjašnjenja, ako je sadržaj registarskog adresnog polja u instrukciji 5, onda je

registar R5 nameravana adresa, a vrednost operanda se nalazi u R5. Tipično, adresno polje

koje referencira adrese imaće od 3 do 5 bitova, tako da može da se referencira od 8 do 32

registra opšte namene.

Prednosti registarskog adresiranja su što se (1) zahteva samo malo adresno polje u

instrukciji i (2) što se ne zahtevaju nikakve memorijske reference koje troše vreme. Vreme

pristupa memoriji za registar koji se nalazi unutar procesora je mnogo manje od onoga za

pristup glavnoj memoriji. Nedostatak registarskog adresiranja je što je adresni prostor veoma

ograničen.

Primer.

Ako se u skupu instrukcija mnogo koristi registarsko adresiranje, to nagoveštava da će

se mnogo koristiti registri procesora. Zbog strogog ograničenja broja registara (u poređenju

Page 23: Vezba 1 - Instrukcijska arhitektura racunara.pdf

23

sa lokacijama glavne memorije), njihova upotreba na taj način ima smisla samo ako se koriste

efikasno. Ako se svaki operand donosi u registar iz glavne memorije, jednom izvrši operacija

i zatim vraća u glavnu memoriju, tada se dodaje nepotreban međukorak. Ako, umesto toga,

operand u registru ostaje u upotrebi za više operacija, onda se postiže stvarna ušteda. Primer

je međurezultat u proračunu. Posebno, pretpostavite da algoritam za množenje u

komplementu dvojke treba da se implementira u softveru.

Na programeru je da odluči koje vrednosti bi trebalo da ostanu u registrima, a koje bi

trebalo skladištiti u glavnoj memoriji. Većina savremenih procesora ima registre opšte

namene, što teret efikasnog izvršenja prebacuje na programera u asemblerskom jeziku

(odnosno, programera kompajlera).

1.7 Registarsko indirektno adresiranje

Baš kao što je registarsko direktno adresiranje analogno memorijski direktnom

adresiranju, registarsko indirektno adresiranje je analogno memorijski indirektnom

adresiranju. U oba slučaja, jedina razlika je da li adresno polje referencira memorijsku

lokaciju ili registar. Prema tome, za registarsku indirektnu adresu (slika 11),

EA = (R)

Slika 11. Registarsko indirektno adresiranje

Prednosti i ograničenja registarskog indirektnog adresiranja su u osnovi ista kao za

indirektno adresiranje. U oba slučaja, ograničenje adresnog prostora (ograničen opseg adresa)

polja za adrese prevazilazi se poljem kojim se obraća na lokaciju dužine reči u kojoj se nalazi

adresa. Pored toga, registarsko indirektno adresiranje koristi jednu memorijsku referencu

manje od indirektnog adresiranja.

Primer.

Page 24: Vezba 1 - Instrukcijska arhitektura racunara.pdf

24

1.8 Adresiranje sa pomerajem

Veoma moćan način adresiranja kombinuje sposobnosti direktnog i registarskog indi-

rektnog adresiranja. On je poznat pod raznim nazivima koji zavise od konteksta njegove

upotrebe, ali osnovni mehanizam je isti. Mi ćemo se na njega pozivati kao na adresiranje sa

pomerajem (engl. displacement addressing, slika 12):

EA = A + (R)

Slika 12. Adresiranje sa pomerajem

Adresiranje sa pomerajem zahteva da instrukcija ima dva adresna polja, od kojih je

najmanje jedno eksplicitno. Vrednost koja se sadrži u jednom adresnom polju (vrednost A)

koristi se direktno. Drugo adresno polje, ili implicitna referenca zasnovana na kodu operacije,

odnosi se na registar čiji sadržaj se dodaje A da bi se proizvela efektivna adresa.

Primer.

Page 25: Vezba 1 - Instrukcijska arhitektura racunara.pdf

25

Opisaćemo tri najčešće upotrebe adresiranja sa pomerajem:

- relativno adresiranje;

- adresiranje sa baznim registrom;

- indeksiranje.

Relativno adresiranje. Za relativno adresiranje, koje se takođe zove i adresiranje relativno

prema PC, implicitno referencirani registar je programski brojač (PC). Odnosno, adresa

sledeće instrukcije dodaje se adresnom polju da bi se proizvela EA. Tipično, sa adresnim

poljem se za ovu operaciju postupa kao sa brojem u komplementu dvojke. Prema tome,

efektivna adresa je pomeraj relativan u odnosu na adresu instrukcije.

Relativno adresiranje koristi koncept lokalnosti. Ako je većina referenci memorije

relativno bliska instrukciji koja se izvršava, onda upotreba relativnog adresiranja štedi

adresne bitove u instrukciji.

Adresiranje sa baznim registrom. Za adresiranje sa baznim registrom postoji sledeće

tumačenje: referencirani registar sadrži adresu u glavnoj memoriji, a adresno polje sadrži

pomeraj (obično u predstavljanju neoznačenog celog broja) od te adrese. Referenca registra

može biti eksplicitna ili implicitna.

Adresiranje sa osnovnim registrom takođe koristi lokalnost memorijskih referenci. U

nekim implementacijama, koristi se jedan segmentni osnovni registar da drži osnovnu adresu

segmenta, a instrukcije moraju eksplicitno da ga referenciraju. U tom poslednjem slučaju, ako

je dužina adresnog polja K, a broj mogućih registara N, onda jedna instrukcija može da

referencira bilo koju od N oblasti od po 2K reči.

Indeksiranje. Za indeksiranje, tipično tumačenje je sledeće: adresno polje referencira adresu

u glavnoj memoriji, a referencirani registar sadrži pozitivan pomeraj od te adrese. Obratite

pažnju na to da je ta upotreba upravo suprotna od tumačenja za adresiranje sa baznim

registrom. Naravno, to je više nego samo stvar korisnikovog tumačenja. Zbog toga što se

adresno polje smatra memorijskom adresom u indeksiranju, ono obično sadrži više bitova od

adresnog polja u uporedivoj instrukciji sa osnovnim registrom. Svejedno, metoda proračuna

EA je ista i za adresiranje sa osnovnim registrom i za indeksiranje, a u oba slučaja referenca

registra je ponekad eksplicitna, a ponekad implicitna (za različite vrste procesora).

Page 26: Vezba 1 - Instrukcijska arhitektura racunara.pdf

26

Slika 13. Primena indeksiranja u radu sa nizovima

Značajna upotreba indeksiranja je da obezbedi efikasan mehanizam za izvođenje

iterativnih operacija (slika 13). Razmotrite, na primer, listu brojeva koji su uskladišteni

počevši od lokacije A. Pretpostavite da bismo želeli da dodamo 1 svakom elementu na listi.

Treba da donesemo svaku vrednost, dodamo joj 1 i opet je uskladištimo nazad. Sekvenca

efektivnih adresa koje su nam potrebne je A, A + 1, A + 2,..., sve do poslednje lokacije na

listi. Sa indeksiranjem, to se lako uradi. Vrednost A se uskladišti u adresno polje instrukcije,

a izabrani registar, koji se zove indeksni registar, inicijalizuje se na 0. Posle svake operacije,

indeksni registar se povećava za 1.

Zbog toga što se indeksni registar obično koristi za takve iterativne zadatke, tipično je

da postoji potreba za povećavanjem ili smanjivanjem indeksnog registra posle svake

reference na njega. Imajući u vidu da je to česta operacija, neki sistemi je rade automatski,

kao deo istog instrukcijskog ciklusa. To je poznato kao autoindeksiranje. Ako su izvesni

registri posvećeni isključivo indeksiranju, onda se autoindeksiranje može pozvati implicitno i

automatski. Ako se koriste registri opšte namene, može biti potrebno da se operacija

autoindeksiranja signalizira pomoću jednog bita u instrukciji. Autoindeksiranje koje koristi

povećavanje može da se opiše na sledeći način:

EA = A + (R)

(R) ← (R) + 1

U nekim mašinama, obezbeđeni su i indirektno adresiranje i indeksiranje, a moguće je

primeniti i oba u istoj instrukciji. Postoje dve mogućnosti: indeksiranje se izvodi pre ili posle

indirekcije.

Ako se indeksiranje izvodi posle indirekcije, to se zove postindeksiranje:

EA = (A) + (R)

Page 27: Vezba 1 - Instrukcijska arhitektura racunara.pdf

27

Prvo se koristi sadržaj adresnog polja da bi se pristupilo memorijskoj lokaciji koja

sadrži direktnu adresu. Ta adresa se onda indeksira vrednošću registra. Ta tehnika je korisna

za pristupanje jednom od izvesnog broja blokova podataka fiksnog formata. Operacije koje se

izvode su iste, bez obzira na to kojim blokom se manipuliše. Prema tome, adrese instrukcija

koje referenciraju blok bi mogle da pokažu na lokaciju (vrednost A) koja sadrži promenljivi

pokazivač na početak bloka za upravljanje procesom. Indeksni registar sadrži pomeraj unutar

bloka.

Kod preindeksiranja, indeksiranje se izvodi pre indirekcije:

EA = (A + (R))

Adresa se proračunava kao kod jednostavnog indeksiranja. Međutim, u ovom slučaju,

izračunata adresa ne sadrži operand, nego adresu operanda. Primer upotrebe te tehnike je

kada se konstruiše tabela grananja na više putanja. U određenoj tački u programu, može

postojati grananje na jednu od nekoliko lokacija, zavisno od uslova. Može da se uspostavi

tabela koja počinje na lokaciji A. Indeksiranjem u toj tabeli, može da se pronađe zahtevana

lokacija.

Skup instrukcija tipično ne sadrži i preindeksiranje i postindeksiranje.

1.9 Adresiranje pomoću steka

Poslednji način adresiranja koji razmatramo je adresiranje pomoću steka. Stek je

rezervisan blok lokacija. Stavke se dodaju na vrh steka tako da je, u svakom datom trenutku,

blok delimično popunjen. Steku je pridružen pokazivač, čija vrednost je adresa vrha steka.

Alternativno, dva gornja elementa steka mogu da budu u registrima procesora, u kom slučaju

pokazivač steka referencira treći element steka. Pokazivač steka se održava u registru. Prema

tome, reference na lokacije steka u memoriji su, ustvari, registarske indirektne adrese.

Način adresiranja pomoću steka je oblik implicitnog adresiranja. Mašinske instrukcije

ne uključuju memorijsku referencu, nego implicitno rade na vrhu steka.

Zadatak 6. Na slici je prikazan sadržaj registara procesora i dela memorije neposredno

pre izvršavanja neke instrukcije. Odrediti sadržaj registara i memorije posle sukcesivnog

izvršavanja tri instrukcije. Instrukcije su jednoadresne i dužine dva bajta, gde prvi bajt

označava kod operacije i način adresiranja, dok drugi bajt predstavlja operand, osim

instrukcije POP koja je bezadresna i dužine jedan bajt. Adrese i operandi su osmobitni i

prikazani u heksadecimalnom formatu u komplementu dvojke. Pokazivač steka SP pokazuje

Page 28: Vezba 1 - Instrukcijska arhitektura racunara.pdf

28

na adresu memorijske lokacije koja se nalazi na vrhu steka. Čitanjem podatka sa steka SP se

inkrementira, a upisom na stek SP se dekrementira.

Procesor

PC 4A

Acc 07

SP 8B

Adresa Sadržaj memorije

48 LOAD Memorijski indirektno

49 6A

4A POP Bezadresna

4B SUB Neposredno

4C 2F

4D STORE Memorijski direktno

4E 69

…………………

69 3F

6A 78

…………………

8B 1C

Instrukcija Komentar Sadržaj registara procesora

nakon instrukcije

Sadržaj memorije

nakon instrukcije

POP (Acc) 1C (PC) = 4B (uvećava se za

jedan bajt)

(Acc) = 1C

(SP) = 8C

Isti (kod operacija

prenosa, podaci se

uglavnom ne brišu, već

se kopiraju)

SUB #2F (Acc) (Acc)

– 2F = ED

(PC) = 4D (uvećava se za dva

bajta)

(Acc) = ED

(SP) = 8C

Isti

STORE 69 (Mem:69) =

(Acc) = ED

(PC) = 4F

(Acc) = ED

(SP) = 8C

Sadržaj lokacije 69 je ED

Zadatak 7. Na slici je prikazan sadržaj registara procesora i dela memorije neposredno

pre izvršavanja neke instrukcije. Odrediti sadržaj registara i memorije posle sukcesivnog

izvršavanja četiri instrukcije. Instrukcije su jednoadresne i dužine dva bajta, gde prvi bajt

označava kod operacije i način adresiranja, dok drugi bajt predstavlja operand, osim

instrukcija PUSH i POP koje su bezadresne i dužine jedan bajt. Adrese i operandi su

Page 29: Vezba 1 - Instrukcijska arhitektura racunara.pdf

29

osmobitni i prikazani u heksadecimalnom formatu u komplementu dvojke. Pokazivač steka

SP pokazuje na adresu memorijske lokacije koja se nalazi na vrhu steka. Čitanjem podatka sa

steka SP se dekrementira, a upisom na stek SP se inkrementira.

Procesor

PC 48

Acc 07

SP 8B

R1 A4

BR 69

Instrukcija Komentar Sadržaj registara

procesora nakon

instrukcije

Sadržaj

memorije nakon

instrukcije

LOAD [6A] (Acc) 25 (PC) = 4A

(Acc) = 25

(SP) = 8B

Isti

ADD R1 (Acc) (Acc) + A4 = C9 (PC) = 4C

(Acc) = C9

(SP) = 8B

Isti

PUSH (stek) (Acc) = C9 (PC) = 4D

(Acc) = C9

(SP) = 8C

Sadržaj lokacije

8C je C9

STORE 02[BR] (Mem:69 + 02) = (Mem:6B) =

(Acc) = C9

(PC) = 4F

(Acc) = C9

(SP) = 8C

Sadržaj lokacije

8C je C9

Sadržaj lokacije

6B je C9

Adresa Sadržaj memorije

48 LOAD Memorijski indirektno

49 6A

4A ADD Registarsko direktno

4B R1

4C PUSH Bezadresna

4D STORE Bazno sa pomerajem

4E 02

4F POP Bezadresna

…………………

69 3F

6A 78

6B 4C

…………………

78 25

…………………

8B 1C

8C 23