jednostavna sekvencijalna procesorska jedinicaes.elfak.ni.ac.rs/files/addresssim.doc · web view6)...
TRANSCRIPT
UNIVERZITET U NIŠU ELEKTRONSKI FAKULTET
KATEDRA ZA ELEKTRONIKU
MIKROPROCESORSKI SISTEMI
AdressSim
Mentor:Prof. dr Mile Stojčev
Na projektu radili:
Vesić Dejan 10112Mitov Vladan 10737 Jakovljević Predrag 9930Božić Vladan 9865Milenović Darko 9990
MAJ 2006Sadržaj
1
Uvod ………………………………………………………………………………………..3
1.1 Definicija skupa instrukcija .......................................................................................... 61.1.1 Format mašinske instrukcije................................................................................ 61.1.2 Skup instrukcija .................................................................................................. 7
1.1.2.1 Instrukcije sabiranja ..................................................................................... 71.1.2.2 Instrukcije oduzimanja ................................................................................. 81.1.2.3 Logičke instrukcije ....................................................................................... 91.1.2.4 Instrukcije za manipulaciju magacinom (stack) ………………………….. 101.1.2.5 Instrukcije za manipulaciju mem lokacijama …………………………….. 101.1.2.6 Instrukcije grananja....................................................................................... 11
1.1.2.6.1 Instrukcija bezuslovnog grananja………………………………... 111.1.2.6.2 Instrukcije uslovnog grananja ……………………………………11
1.1.2.7 Instrukcija za manipulaciju flegom ……………………………………….. 13
1.1.3 Faze izvršavanja instrukcije................................................................................. 14
1.1.3.1 Instrukcije kod kojih faza izvršenja EX traje jedan taktni interval............. 151.1.3.2 Instrukcije kod kojih faza izvršenja EX traje dva taktna intervala.............. 161.1.3.3 Instrukcije kod kojih faza izvršenja EX traje tri taktna intervala……........ 22
1.2 Struktura AdressSima-a……………………………………………………………… 23
1.3 Adresni načini rada........................................................................................................251.3.1 Direktno adresiranje............................................................................................. 251.3.2 Neposredno adresiranje........................................................................................ 271.3.3 Registarsko adresiranje.........................................................................................291.3.4 Implicitno adresiranje.......................................................................................... 311.3.5 Indirektni načini adresiranja................................................................................ 32
1.3.5.1 Indirektno memorijsko adresiranje preko registra............................ 321.3.5.2 Indirektno memorijsko adresiranje preko memorije......................... 34
1.3.6 PC relativno......................................................................................................... 371.3.7 Indeksno................................................................................................................391.3.8 Magacinsko.......................................................................................................... 42
2 Instalacija i pokretanje programa…………………………………………………………442.1 Text Eitor…………………………………………………………………….. 442.2. Asembliranje………………………………………………………………….. 462.3 Praćenje toka izvršavanja programa…………………………………............... 48
2.3.1 Processor Graph prozor……………………………………………… 482.3.2 Register prozor i Register Edit prozor………………………………. 502.3.3 Memory i Memory Edit prozor…………………………………...... 512.3.4 Trace Prozor…………………………………………………………..51
3 Priprema za laboratorijsku vežbu…………………………………………………………533.1 Pokazni primer …………………………………………………………………533.2 Test sekvence sa odovarajućim zadacima ……………………………………. 603.3 Pitanja …………………………………………………………………………. 64
4 Literatura ………………………………………………………………………………....65Uvod
2
Istorija procesora opšte namene
1950 Rani dizajni
Svaki od dizajna kompjutera u ranim 50-im bio je priča za sebe. Programi pisani na jednoj mašini nisu se izvršavali na drugoj, nebitno da li su proizašli iz iste kompanije. U to vreme to nije predstavljalo značajan nedostatak jer je bilo malo softvera a jos manje ljudi koji su ga pisali.
Sloboda dizajna bila je vrlo značajna u to vreme jer su dizajneri bili vrlo ograničeni elektronskim komponentama koje su postojale u to vreme. Neke od značajnih inovacija u to vreme su indeksni registri (Ferranti Mark I - jednoadresna) , instrukcija čuvanja povratne adrese (UNIVAC I), trenutni operandi (IBM 704) i detekcija netačnih operacija (IBM 650- troadresna mašina).
Kako se bližio kraj 50-ih proizvodjači su na tržište izbacivali fabrički proizvedene kompjutere koji su mogli da se isporučuju putem kamiona i prikolica. Najprodavaniji kompjuter tog doba definitvno je IBM 650 koji je koristio bubanj memoriju (papirna traka i kartice na bušenje). Neke mašine posedovale su i operativnu memoriju koja je znatno ubrzavala rad tih mašina. Takođe su počeli da se prave i hard diskovi.
U to vreme kompjuteri su bili ne više od automatskih mašina za računanje. Uglavnom su se pravili za specifične namene i uglavnom su koristili decimalni kod za razliku od današnjih koji koriste binarni. U principu, te mašine su imale 10 cevi po cifri u svakom registru. Ruski naučnici u to vreme su razvijali tehnologiju koja je koristila 3 cifre 1,0,-1.Takodje, paralelno sa Rusima, američka avijacija je razvijala binarni kod za potrebe ultra- malih (za to vreme) kompjutera.
Kod nula adresnih mašina praktično 'ne postoje' operandi, već samo operatori. To znači da su operandi negde ipak smešteni. Najčešće se oni nalaze na steku. Primer nulaadresnih mašina su FP procesori (procesori za rad u pokretnom zarezu) i digitroni (džepni kalkulatori).
U vreme 50-ih, Groshov zakon je dominirao kompjuterskim dizajnom. Cena kompjutera se povećavala na kvadrat u zavisnosti od brzine.
1960 Kompjuterska revolucija i CISC
Jedan od glavnih problema sa ranim kompjuterima, kao sto smo već gore rekli, je da programi pisani na jednom nisu radili na drugom iz raznih razloga. Kompjuterske kompanije su uvidele da kupci neće ostati verni proizvodjaču ukoliko na tržište izadje bolji i brži kompjuter druge marke. U ovo vreme cena i performanse su bila jedina dva faktora pri odluci koji kompjuter kupiti.
IBM je 1962. zato probao novi prilaz dizajnu kompjutera. Plan je bio da cela familija kompjutera može da radi na istom softveru a da svaki kompjuter ima razlicite performanse i cenu.Da bi uradili ovako nešto dizajnirali su System 360 (single reference computer). IBM je izabrao da set instrukcija bude vrlo kompleksan i vrlo veliki da bi se pokrilo što je moguće više operacija. Iako je kompjuter bio vrlo kompleksan, kontrolna jedinica koja je sadržala mikroprocesor ostala bi vrlo mala i mogla bi se praviti sa vrlo brzom memorijom. Još jedna bitna činjenica je da je jedna instrukcija mogla da opiše vrlo kompleksnu sekvencu operacija.
3
S360 je bio naslednik mašina kao što su 7090 i 1401 koje su uglavnom korišćene u naučne svrhe. S obzirom da je set instrukcija bio dizajniran da radi ne samo proste binarne operacije, već je mogao da obradjuje tekst, i binarnu decimalnu aritmetiku mogao je da se primeni i kod računovodstva.
Skoro svi kompjuteri, kasnije izašli, sadržali su ove inovacije u nekom obliku. Osnovni set instrukcija sada se zove COMPLEX INSTRUCTION SET ili CISC.
U mnogim CISC procesorima instrukcija je mogla da ili pristupi registru ili memoriji na nekoliko načina. Ovo je načinilo CISC procesore lakšim za programiranje, jer je programer mogao da popamti od 30 do 100 instrukcija i set od 3 do 10 tipa adresiranja, a ne 1000 različitih instrukcija kao ranije. Ovo se zove ortogonalni set instrukcija. PDP 11 i Motorola 68000 arhitektura su klasični primeri skoro ortogonalnog seta instrukcija.U to vreme i BUNCH je dominirao sa IBM-om .
Burrougs Corporacija (kasnije Unisys) ponudila je alternativu S360 sa njihovom serijom B5000. B5000 je imala virtuelnu memoriju, multi-programibilni operativni sistem (MCP pisan u ALGOL 60) i prvi industrijski kompajler 1963 godine.
1970 Velika skala integracije.
Na pocetku 70-ih godina prvi čip za kalkulator i sat pokazali su da je proizvodnja vrlo malih kompjutera moguća. Prvi mikroprocesor bio je 4004 dizaniran 1971. za potrebe kalkulatora od strane kompanije Buscom. 4004 je direktni potomak Intel-ove serije 80386 procesora. Nekoliko godina kasnije dužina reči 4004 bila je duplirana i proizašao je 8008.
Već sredinom 70-ih upotreba integrisanih kola u proizvodnji kompjutera bila je uobičajena pojava. Cela decenija bila je posvećena smanjivanju cene tranzsistora iz ovih potreba.
Minikompjuteri uglavnom sa 16-bitnom reči i sa 4K do 64K memorije postali su normalna pojava posle uspeha da se ceo CPU smesti na jednu stampanu ploču.
CISC kompjuteri su u to vreme smatrani za najjače kompjutere zbog njihovog mikrokoda koji je bio mali i mogao se smestiti u memoriju velike brzine. U ovo vreme pravili su se i specifično namenski čipovi kao npr. AMD 2900 sa specifičnim mikrokodom.
U ranim 1970-im je razvijen PDP 11 i u to vreme definitivno je predstavljao jedan od najjačih kompjutera. Odmah posle toga su predstavljeni 32-bitni VAX i 36-bitni PDP 10. Takođe za kontrolu krstarećih projektila srednjeg dometa Intel je razvio najjaču verziju 8008 procesora, 8080.
IBM 370 bio je verzija 360 samo modifikovana da radi sa virtuelnim okruženjem. Virtuelno okruženje služilo je za detekciju softverske greške.
Definitvno najprodavaniji kompjuter u to vreme bio je Burroughs B5000. B6000 I B7000 serija bila je najprodavanija. Programiranje se vršilo u dialektu Algola. Koristili su 64- bitnu fiksnu aritmetiku, a ne floating point.
1980. Počeci RISC-a
Istraživači u UC Berkliju u ranim 1980-im i IBM-ovi istraživači otkrili su da uglavnom svi kompajleri koriste mali podset instrukcija CISC procesora. Veći deo snage CPU je prosto stajao neiskorišćen u realnom radu. Shvatili su da pravljenje prostijeg i manje ortogonalnog procesora rezultira da kompjuteri mogu da rade brže i da budu jeftiniji.
4
U isto vreme razni proizvodjači eksperimentisali su sa velikim setom internih registara. Ideja je bila da se “keširaju” trenutni rezultati koje kontroliše kompajler. Ovo bi takođe smanjilo broj adresiranja i smanjilo ortogonalnost procesora. Kompjuteri bazirani na ovoj teoriji zvali su se Reduced Instruction Set Computers (kompjuteri sa smanjenim setom instrukcija) ili RISC. RISC su uglavnom imali veliki broj registara kojima su pristupale prostije instrukcije. Odredjeni broj instrukcija služio je da se podaci direktno učitavaju i stoje u memoriji. Rezultat je bio procesor sa vrlo ogoljenim jezgrom koji je radio na velikoj brzini i podržavao odredjen broj operacija koje je podržavao kompajler.
Jedan od nedostataka RISC dizajna bio je taj da su programi koji su se izvršavali na njima bili veliki. Ovo je posledica kompajlera koji su morali da generišu duže sekvence od prostijih instrukcija da postignu iste rezultate kao CISC. Današnji računari su prividno (interno) dvoadresni, a eksterno jednoadresni, jer asemblerske instrukcije imaju samo jedan memorijski argument, a ostalo su konstante i lokalni registri. Kada nemate troadresnu mašinu, treba vam puno registara! To je imperativ kom se povinuju svi današnji 64 RISC procesori, ali kod CISC-a je ovo bio problem. AMD je ovo prevazišao uz zadržavanje kompatibilnosti sa postojećom bazom programa.
Pošto ove instrukcije uglavnom treba učitati iz memorije potrebno je bilo dizajnirati brže upravljanje memorijom.
5
1.1 Definicija skupa instrukcija
AdressSim je jednoadresna 16-bitna mašina koja podržava osam načina adresiranja. Obim adresne magistrale je 16 bitova (može da se adresira do 216 memorijskih lokacija) s tim što polje operanda ima 9 bitova pa se direktnim adresiranjem može pokriti 512 memorijskih lokacija.
1.1.1 Format mašinske instrukcije
Format mašinske instrukcije AdressSim-a je prikazan na Slici 1:
opkod modifikator operandX X X X Y Y Y A A A A A A A A Ad15 d12 d11 d10 d9 8 d0
Slika 1. Format instrukcije
gde su: d15 ÷ d12 – četiri bita koja označavaju kôd instrukcije ( opkôd ) d11 ÷ d9 – tri bita koja se odnose na načine adesiranja ( modifikator M ) d8 ÷ d0 – devet bitova koji predstavljaju polje operand
instrukcija opkôd polje opis instrukcije
NOP 0000 No OperationJMP 0001 bezuslovno grananje (skok)JX 0010 uslovno grananje
PUSH 0011 stavi u magacinPOP 0100 izvadi iz magacinaST 0101 smesti na lokacijuLD 0110 pribaci sa lokacije
CLC 0111 obriši keriINC 1000 inkremetntiranje akumulatoraDEC 1001 dekrementitanje akumulatoraNOT 1010 logička ne operacijaNEG 1011 komplementiranjeOR 1100 logička or operacija
AND 1101 logička AND operacijaADD 1110 aritmetička operacija sabiranjaSUB 1111 aritmetička operacija oduzimanja
Tabela 1. Instrukcije procesora sa definisanim opkôd poljem
Tabela 2. se odnosi na definiciju polja modifikatora M.
6
Modifikator M Način adresiranja000 direktno001 neposredno010 registarsko011 implicitno100 indirektno adresiranje101 PC relativno110 indeksno111 magacinsko
Tabela 2. Značenje polja modifikatora M
1.1.2. Skup instrukcija
NOP
Opkod – 0000Operacija – nema operacije
NOP je operacija bez efekta, inkrementira se sadržaj programskog brojača, a program nastavlja sa izvršenjem.
Izvršenje ove instrukcije nema efekat na postavljanje statusnih markera.
1.1.2.1 Instrukcije sabiranja
ADD D (eng. add - saberi)
Opkod – 1110Operacija – operand + akumulator → akumulator
Instrukcija Način adresiranja tokADD 5 Direktno AC←AC+MEM[5]ADD #22 Neposredno AC←AC+22ADD R6 Registarsko AC←AC+R6ADD @R1 Indirektno preko registara AC←AC+MEM[R1]ADD @12 Indirektno preko memorije AC←AC+MEM[12]ADD $15h PC relativno AC←AC+MEM[PC+21]ADD %20 Indeksno AC←AC+MEM[IND+20]
INC D (eng. inerement - inkrementiraj, uvećaj za 1) - D+1 D
7
Opkod – 1000Operacija – akumulator + 1 → akumulator
Instrukcijom INC inkrementiramo sadržaj akumulatora. CARRY – postavlja se na 1 ako se nakon izvršavanja operacije javio bit prenosa,SIGN – postavlja se na 1 ako je MS bit rezultata jednak 1, inače ako je MS bit
rezultata operacije OR jednak 0 ovaj marker se postavlja na vrednost 0.ZERO – postavlja se na 1 ako je rezultat 0, inače se postavlja na 0.
1.1.2.2 Instrukcije oduzimanja
SUB D (eng. subtract - oduzmi)
Opkod – 1111Operacija –akumulator - operand → akumulator
Instrukcija Način adresiranja tokSUB 5 Direktno AC←AC-MEM[5]SUB #22 Neposredno AC←AC-22SUB R6 Registarsko AC←AC-R6SUB @R1 Indirektno preko registara AC←AC-MEM[R1]SUB @15 Indirektno preko memorije AC←AC-MEM[15]SUB $15h PC relativno AC←AC-MEM[PC+21]SUB %20 Indeksno AC←AC-MEM[IND+20]
DEC (eng. decrement - dekrementiraj, umanji za 1)
Opkod – 1001Operacija – akumulator - 1 → akumulator
Instrukcijom DEC dekrementiramo sadržaj akumulatora. CARRY – postavlja se na 1 ako se nakon izvršavanja operacije javio bit prenosa,SIGN – postavlja se na 1 ako je MS bit rezultata jednak 1, inače ako je MS bit
rezultata operacije OR jednak 0 ovaj marker se postavlja na vrednost 0.ZERO – postavlja se na 1 ako je rezultat 0, inače se postavlja na 0.
NEG D (eng. negate - negiraj, promeni znak) -
Opkod – 1011
Intrukcija NEG vrši promenu znaka operanda. Instrukcija u odredišni operand smešta potpuni komplement broja.
8
Početno stanje:al: 0 0 0 0 0 1 0 1 = 5
NEG ALal: 1 1 1 1 1 0 1 0 = -5
1.1.2.3 Logičke instrukcije
Ova grupa instrukcija izvodi logičke operacije nad parovima odgovarajućih bitova operanada, a rezultat se smešta u odredišni operand.
AND D (eng. and - i)
Opkod – 1100 Operacija – operand i akumulator → akumulator
Instrukcijom AND se izvršava logička I operacija nad izvorišnim operandom specificiranim instrukcijom i odredišnim operandom AC, a rezultat se smešta u AC. U zavisnosti od načina adresiranja sreću se sledeće varijante:
Instrukcija Način adresiranja TokAND 5 Direktno AC←AC and MEM[5]AND #22 Neposredno AC←AC and 22AND R6 Registarsko AC←AC and R6AND @R1 Indirektno preko reg. AC←AC and MEM[R1]AND @24 Indirektno preko mem. AC←AC and MEM[24]AND $15h PC relativno AC←AC and MEM[PC+21]AND %20 Indeksno AC←AC and MEM[IND+20]
OR D, (eng. or - ili) .
Opkod – 1100 Operacija – operand ili akumulator → akumulator
Instrukcijom OR se izvršava logička ILI operacija nad izvorišnim operandom specificiranim instrukcijom i odredišnim operandom AC, a rezultat se smešta u AC. U zavisnosti od načina adresiranja sreću se sledeće varijante:
Instrukcija Način adresiranja TokOR 5 Direktno AC←AC or MEM [5]OR #1Fh Neposredno AC←AC or 31OR R3 Registarsko AC←AC or R3OR @R7 Indirektno preko reg. AC←AC or MEM[R7]OR @4 Indirektno preko mem. AC←AC or MEM[4]OR $15h PC relativno AC←AC or MEM[PC+21]OR %20 Indeksno AC←AC or MEM[IND+20]
9
NOT D (eng. not - ne)
Opkod – 1010Operacija – akumulator → akumulator
Instrukcijom NOT se izvršava logička operacija negacije nad sadržajem AC, a rezultat se smešta u AC.
1.1.2.4 Instrukcije za manipulaciju sa magacinom (stack)
PUSH S (eng. push - gurni) - S stek. Izvorni operand se smešta na stek.
Opkod – 0011Operacija – akumulator → Memorija
POP D (eng. pop - skini) - stek D. Vrednost sa vrha steka se smešta u odredišni operand.
Opkod – 0100Operacija – Memorija → akumulator
1.1.2.5 Instrukcije za manipulaciju memorijskim lokacijama
ST D (eng. store- smesti). Instrukcijom za prenos podataka ST se izvršava operacija učitavanja sadržaja akumulatora u memorijsku lokaciju specificiranu instrukcijom. Izvršenje ove instrukcije nema uticaj na postavaljanje statusnih markera.
Opkod – 0101Operacija – akumulator → Memorija
LD D (eng. load – učitaj). Instrukcijom za prenos podataka LD se izvršava operacija upisivanja sadržaja izvorišnog operanda specificiranog instrukcijom u akumulator .
Instrukcija Način adresiranja TokST 1 Direktno AC→MEM[1]ST R0 Registarsko AC→R0ST @R0 Indirektno preko reg. AC→MEM[R0]ST @65 Indirektno preko mem. AC→MEM[65]ST $1 PC relativno AC→MEM[PC+1]ST %0Ch Indeksno AC→MEM[IND+12]
10
Opkod – 0110Operacija – Memorija → akumulator
U zavisnosti od načina adresiranja srećemo sledeće varijante:
1.1.2.6 Instrukcije grananja
Instrukcije grananja omogućavaju grananje toka izvršenja programa u zavisnosti od uslova koji je postavljen u samoj naredbi. Postoje naredbe bezuslovnog i uslovnog skoka.
1.1.2.6.1 Instrukcija bezuslovnog skoka
JMP D (eng. jump - skok) - Instrukcijom JMP se izvršava operacija bezuslovnog grananja (skoka) na memorijsku lokaciju speificiranu operandom.
Izvršenje ove instrukcije nema efekat na postavljanje statusnih markera.
Opkod – 0001
1.1.2.6.2 Instrukcije uslovnog skoka
JX predstavlja naredbe uslovnog skoka. U zavisnosti od operanda moguće je realizovati sledeće naredbe:
Naredba Opkod ModifikatorJZ (jump if zero) 0010 000JNZ (jump if not zero) 0010 001JC (jump if carry) 0010 010JNC (jump if not carry) 0010 011JS (jump if sign) 0010 100JNS (jump if not sign) 0010 101
JZ (jump if zero)
Instrukcija Način adresiranja TokLD 0Ah Direktno MEM[10]→ACLD #12 Neposredno 12→ACLD R4 Registarsko R4→ACLD @R4 Indirektno preko reg. MEM[R4]→ACLD @556 Indirektno preko mem. MEM[556]→ACLD $20 PC relativno MEM[PC+20]→ACLD %12 Indeksno MEM[IND+12]→AC
11
Opkod – 0010Modifikator - 000 if ZERO = {1} then (operand) → PC else continue
Instrukcijom JZ se izvršava operacija uslovnog grananja (skoka) na memorijsku lokaciju specificiranu instrukcijom ako je marker ZERO postavljen na {1}.
Izvršenje ove instrukcije nema efekat na postavljanje statusnih markera.
JNZ (jump if not zero)
Opkod – 0010Modifikator - 001 if ZERO = {0} then (operand) → PC else continue
Instrukcijom JNZ se izvršava operacija uslovnog grananja (skoka) na memorijsku lokaciju specificiranu instrukcijom ako je marker ZERO postavljen na {0}.
Izvršenje ove instrukcije nema efekat na postavljanje statusnih markera.
JC (jump if carry)
Opkod – 0010Modifikator - 010 if CARRY = {1} then (operand) → PC else continue
Instrukcijom JC se izvršava operacija uslovnog grananja (skoka) na memorijsku lokaciju specificiranu instrukcijom ako je marker CARRY postavljen na {1}.
Izvršenje ove instrukcije nema efekat na postavljanje statusnih markera.
JNC (jump if not carry)
Opkod – 0010Modifikator - 011 if CARRY = {0} then (operand) → PC else continue
Instrukcijom JNC se izvršava operacija uslovnog grananja (skoka) na memorijsku lokaciju specificiranu instrukcijom ako je marker CARRY postavljen na {0}.
Izvršenje ove instrukcije nema efekat na postavljanje statusnih markera.
JS (jump sign)
Opkod – 0010Modifikator - 100 if SIGN = {1} then (operand) → PC else continue
12
Instrukcijom JS se izvršava operacija uslovnog grananja (skoka) na memorijsku lokaciju specificiranu instrukcijom ako je marker SIGN postavljen na {1}.
Izvršenje ove instrukcije nema efekat na postavljanje statusnih markera.
JNS (jump not sign)
Opkod – 0010Modifikator - 101 if SIGN = {0} then (operand) → PC else continue
Instrukcijom JNS se izvršava operacija uslovnog grananja (skoka) na memorijsku lokaciju specificiranu instrukcijom ako je marker SIGN postavljen na {0}.
Izvršenje ove instrukcije nema efekat na postavljanje statusnih markera.
1.1.2.7 Instrukcija za manipulaciju flegom
Opkod - 0111
CLC (eng. Clear carry – poništi carry fleg) - Instrukcijom za manipulaciju sa flegovima se fleg prenosa (carry flag) postavlja na 0.
13
1.1.3 Faze izvršavanja instrukcije
Kao što je prikazano na Slici 2 program koji izvršava procesor čini skup instrukcija (1 < I < N). U opštem slučaju izvršenje instrukcije može se podeliti na dve faze, fazu pribavljanja, FETCH, koja uključuje ciklus pribavljanja i dekodiranja instrukcije, i fazu izvršenja, EX. Svaku od faza čini veći broj koraka koji mogu da uključe paralelno izvršenje većeg broja mikrooperacija. Mikrooperacije su atomizirane akcije, tj. elementarne operacije koje se ne mogu dalje razbijati.
Faza pribavljanja, FETCH, je identična za sve instrukcije. Faza dekodiranja se odnosi na određivanje tipa instrukcije i smatra se da je to aktivnost tipa višestruko-grananje (multi-way branch), i obavlja se trenutno (zbog toga je na Slici 1 njeno vreme trajanja nula). Faza EX je različita za sve tipove instrukcija.
Slika 2. Nivoi izvršavanja programa
U konkretnom slučaju fazu FETCH čine sledeća tri koraka:
FETCH1 : MAR ← PCFETCH2 : MDR ← M , PC ← PC + 1FETCH3 : IR ← MDR[15:10] , MAR ← MDR[9:0]
gde su FETCH1, FETCH2 i FETCH3 koraci, a aktivnosti tipa MAR ← PC , PC ← PC + 1, itd. predstavljaju mikrooperacije.
U koraku FETCH1 sadržaj programskog brojača, PC, se upisuje u memorijsko adresni registar, MAR. Adresira se memorija MEM i generiše signal Read .
U koraku FETCH2 čita se sadržaj adresirane memorijske lokacije i upisuje u registar MDR. Istovremeno se sadržaj PC-a inkrementira sa ciljem da ukaže na narednu lokaciju u memoriji kojoj treba pristupiti.
PROGRAM
INSTRUKCIJA NINSTRUKCIJA 2INSTRUKCIJA 1nivo
instrukcija
nivoprograma
nivofaze FETCH EX FETCH EX FETCH EX
nivomikrooperacija
14
U koraku FETCH3 delimični sadržaj registra MDR, bitovi d15 ÷ d10 se upisuju u instrukcioni registar, IR, dok se LS bitovi d9 ÷ d0 registra MDR upisuju u MAR.
Radi pojednostavljenja usvaja se da se svaki od koraka FETCH1, FETCH2 i FETCH3 obavlja za jedan taktni interval što znači da se faza pribavljanja izvršava za tri taktna intervala.
Aktivnost dekodiranje instrukcije smatraćemo da se za sve instrukcije izvršava trenutno.
Broj mikrooperacija u fazi izvršenja, EX, zavisi od tipa instrukcija i adresnog načina rada.
Radi bolje ilustracije principa rada procesora, u daljem tekstu, slikovito ćemo ukazati na načine izvršenja različitih tipova instrukcija polazeći od broja taktnih intervala potrebnih da se obavi faza izvršenja instrukcije EX.
1.1.3.1 Instrukcije kod kojih faza izvršenja EX traje jedan taktni interval
Skup instrukcija kod kojih faza izvršenja EX traje jedan taktni interval (jedan korak) prikazan je na Slici 3 a). Broj mikrooperacija u okviru faze EX u zavisnosti od tipa instrukcije može biti različit (vidi Sliku 3 b)).
a) Aktivnosti kod izvršenja instrukcija
NOT AC ← not AC NEG AC ← - AC JMP PC ← MAR JX if (zero, sign, carry) = (0,1) then PC ← MAR else
continue INC AC ← AC + 1 ST M[MAR] ← AC NOP no operation
b) Mikrooperacije kod različitih tipova instrukcija
Slika 3. Aktivnosti u toku faza FETCH i EX kod instrukcija kada faza EX traje jedan korak
JX INCJMPNOT ST
FETCH2
FETCH1
IR = 0010 IR = 0110 IR = 0111 IR = 0010 IR = 1000 IR = 0101 IR = 0000
NEG
cikluspribavljanja
ciklusdekodiranja
ciklusizvršenja EX!
NOP
FETCH3
15
1.1.3.2 Instrukcije kod kojih faza izvršenja EX traje dva taktna intervala
Na Slici 4 prikazana je grupa instrukcija čija faza izvršenja traje dva taktna intervala. Slika 4 a) se odnosi na aktivnosti instrukcija koje koriste neposredni način adresiranja, a Slika 4 b) na mikrooperacije u fazi EX za ovaj način adresiranja.
a) Aktivnosti kod izvršenja instrukcija
OR1# MAR ← PC OR2# AC ← AC or MDR AND1# MAR ← PC AND2# AC ← AC and MDR ADD1# MDR ← PC ADD2# AC ← AC + MDR SUB1# MDR ← PC SUB2# AC ← AC - MDR LD1# MDR ← PC LD2# AC ← MDR
b) Mikrooperacije kod različitih tipova instrukcija
Slika 4. Aktivnosti u toku faza FETCH i EX kod instrukcija kada faza EX traje dva koraka
FETCH 3
ADD1# SUB1#AND1# LD1#
FETCH 2
FETCH 1
IR = 1100 IR = 1101 IR = 1110 IR = 1111 IR = 0110
OR1#
cikluspribavljanja
ciklusdekodiranja
ciklusizvršenjaOR2# AND2# ADD2# SUB2# LD2#
16
Slika 5 a) se odnosi na aktivnosti instrukcija koje koriste direktni način adresiranja, a Slika 5 b) na mikrooperacije u fazi EX za direktno memorijski način adresiranja.
a) Aktivnosti kod izvršenja instrukcija
OR1 MDR ← M[operand] OR2 AC ← AC or MDR AND1 MDR ← M[operand] AND2 AC ← AC and MDR ADD1 MDR ← M[operand] ADD2 AC ← AC + MDR SUB1 MDR ← M[operand] SUB2 AC ← AC - MDR LD1 MDR ← M[operand] LD2 AC ← MDR
b) Mikrooperacije kod različitih tipova instrukcija
Slika 5. Aktivnosti u toku faza FETCH i EX kod instrukcija kada faza EX traje dva koraka
FETCH 3
ADD1 SUB1AND1 LD1
FETCH 2
FETCH 1
IR = 1100 IR = 1101 IR = 1110 IR = 1111 IR = 0110
OR1
cikluspribavljanja
ciklusdekodiranja
ciklusizvršenjaOR2 AND2 ADD2 SUB2 LD2
17
Slika 6 a) se odnosi na aktivnosti instrukcija koje koriste registarski način adresiranja, a Slika 6 b) na mikrooperacije u fazi EX za registarski način adresiranja.
a) Aktivnosti kod izvršenja instrukcija
OR1R MDR ← REG[operand[1:0]] OR2R AC ← AC or MDR AND1R MDR ← REG[operand[1:0]] AND2R AC ← AC and MDR ADD1R MDR ← REG[operand[1:0]] ADD2R AC ← AC + MDR SUB1R MDR ← REG[operand[1:0]] SUB2R AC ← AC - MDR LD1R MDR ← REG[operand[1:0]] LD2R AC ← MDR
b) Mikrooperacije kod različitih tipova instrukcija
Slika 6. Aktivnosti u toku faza FETCH i EX kod instrukcija kada faza EX traje dva koraka
Na Slici 7 prikazana je grupa instrukcija čija faza izvršenja traje dva taktna intervala. Slika 7 a) se odnosi na aktivnosti instrukcija koje koriste PC relativan način adresiranja, a Slika 7 b) na mikrooperacije u fazi EX za ovaj način adresiranja.
FETCH 3
ADD1R SUB1RAND1R LD1R
FETCH 2
FETCH 1
IR = 1100 IR = 1101 IR = 1110 IR = 1111 IR = 0110
OR1R
cikluspribavljanja
ciklusdekodiranja
ciklusizvršenjaOR2R AND2R ADD2R SUB2R LD2R
18
a) Aktivnosti kod izvršenja instrukcija
OR1$ MAR ← PC + IR[9:0] OR2$ AC ← AC or M[MAR] AND1$ MAR ← PC + IR[9:0] AND2$ AC ← AC and M[MAR] ADD1$ MAR ← PC + IR[9:0] ADD2$ AC ← AC + M[MAR] SUB1$ MAR ← PC + IR[9:0] SUB2$ AC ← AC - M[MAR] LD1$ MAR ← PC + IR[9:0] LD2$ AC ← M[MAR]
b) Mikrooperacije kod različitih tipova instrukcija
Slika 7. Aktivnosti u toku faza FETCH i EX kod instrukcija kada faza EX traje dva koraka
Na Slici 8 prikazana je grupa instrukcija čija faza izvršenja traje dva taktna intervala. Slika 8 a) se odnosi na aktivnosti instrukcija koje koriste indeksni način adresiranja, a Slika 8 b) na mikrooperacije u fazi EX za ovaj način adresiranja.
FETCH 3
ADD2$ SUB2$AND2$ LD2$
FETCH 2
FETCH 1
IR = 1100 IR = 1101 IR = 1110 IR = 1111 IR = 0110
OR2$
cikluspribavljanja
ciklusdekodiranja
ciklusizvršenja
OR1$ AND1$ ADD1$ SUB1$ LD1$
19
a) Aktivnosti kod izvršenja instrukcija
OR1% : MAR ← IND + IR[9:0] OR2% : AC ← AC or M[MAR] AND1% : MAR ← IND + IR[9:0] AND2% : AC ← AC and M[MAR] ADD1% : MAR ← IND + IR[9:0] ADD2% : AC ← AC + M[MAR] SUB1% : MAR ← IND + IR[9:0] SUB2% : AC ← AC - M[MAR] LD1% : MAR ← PC + IR[9:0]
LD2% : AC ← M[MAR]
b) Mikrooperacije kod različitih tipova instrukcija
Slika 8. Aktivnosti u toku faza FETCH i EX kod instrukcija kada faza EX traje dva koraka
Na Slici 9 prikazana je grupa instrukcija čija faza izvršenja traje tri taktna intervala. Slika 9 a) se odnosi na aktivnosti instrukcija koje koriste indirektno memorijski način adresiranja preko registra, a Slika 9 b) na mikrooperacije u fazi EX za ovaj način adresiranja.
FETCH 3
ADD2% SUB2%AND2% LD2%
FETCH 2
FETCH 1
IR = 1100 IR = 1101 IR = 1110 IR = 1111 IR = 0110
OR2%
cikluspribavljanja
ciklusdekodiranja
ciklusizvršenja
OR1% AND1% ADD1% SUB1% LD1%
20
a) Aktivnosti kod izvršenja instrukcija
OR1@R MAR ← R[operand[1:0]] OR2@R AC ← AC or MDR AND1@R MAR ← R[operand[1:0]] AND2@R AC ← AC and MDR ADD1@R MAR ← R[operand[1:0]] ADD2@R AC ← AC + MDR SUB1@R MAR ← R[operand[1:0]] SUB2@R AC ← AC - MDR LD1@R MAR ← R[operand[1:0]] LD2@R AC ← MDR
b) Mikrooperacije kod različitih tipova instrukciji
Slika 9. Aktivnosti u toku faza FETCH i EX kod instrukcija kada faza EX traje dva koraka
FETCH 3
ADD2@R SUB2@RAND2@R LD2@R
FETCH 2
FETCH 1
IR = 1100 IR = 1101 IR = 1110 IR = 1111 IR = 0110
OR2@R
cikluspribavljanja
ciklusdekodiranja
ciklusizvršenja
OR1@R AND1@R ADD1@R SUB1@R LD1@R
21
1.1.3.3 Instrukcije kod kojih faza izvršenja EX traje tri taktna intervala
Na Slici 10 prikazana je grupa instrukcija čija faza izvršenja traje tri taktna intervala. Slika 10 a) se odnosi na aktivnosti instrukcija koje koriste indirektno memorijski način adresiranja preko memorije, a Slika 10 b) na mikrooperacije u fazi EX za ovaj način adresiranja.
a) Aktivnosti kod izvršenja instrukcija
OR1@M MAR ← R[operand[1:0]] OR2@M MDR ← MEM[MAR] OR3@M AC ← AC or MDR AND1@M MAR ← R[operand[1:0]] AND2@M MDR ← MEM[MAR] AND3@M AC ← AC and MDR
ADD1@M MAR ← R[operand[1:0]] ADD2@M MDR ← MEM[MAR] ADD3@M AC ← AC + MDR SUB1@M MAR ← R[operand[1:0]] SUB2@M MDR ← MEM[MAR] SUB3@M AC ← AC - MDR LD1@M MAR ← R[operand[1:0]] LD2@M MDR ← MEM[MAR] LD3@M AC ← MDR
b) Mikrooperacije kod različitih tipova instrukciji
Slika 10. Aktivnosti u toku faza FETCH i EX kod instrukcija kada faza EX traje tri koraka
FETCH 3
ADD2@M SUB2@MAND2@M LD2@M
FETCH 2
FETCH 1
IR = 1100 IR = 1101 IR = 1110 IR = 1111 IR = 0110
OR2@M
cikluspribavljanja
ciklusdekodiranja
ciklusizvršenja
OR3@M AND3@M ADD3@M SUB3@M LD3@M
OR1@M AND1@M ADD1@M SUB1@M LD1@M
22
1.2 Struktura AdressSima-a
Struktura sistema AdressSim prikazana je na Slici 11. Kao što se vidi sa slike šema predstavlja jednoadresni procesor sa neophodnim registrima. Ceo sistem je povezan 16-bitnim magistralama (A i B).
Slika 11
Registri su sastavni delovi AdressSim -a. U zavisnosti od namene mogu se podeliti u sledeće dve grupe:
1) Korisničko vidljivi registri, u ovu grupu spadaju sledeći registri:AC – 16-bitni registar nazvan akumulator (Accumulator – AC),
R0, R1, … R7 – osam 16-bitnih registara opšte namene (General Purpose Registers - Rx)
IND - 16-bitni indeksni registar
SP – Stek pointer ili pokazivač magacina
2) Upravljački i statusni registri, u ovu grupu spadaju sledeći registri:
23
PC – 16-bitni programski brojač (Program Counter – PC): čuva adresu naredne instrukcije koja treba da se pribavi iz memorije;
MAR – 16-bitni adresni registar (Memory Address Register – MAR): predaje adrese memoriji preko adresnih linija;
MDR – 16-bitni registar podataka (Memory Data Register – MDR): predstavlja privremeni dvosmerni bafer podataka preko koga se prenose svi podaci iz/ka MEM ka/iz AdressSim -a.
PSW – trobitni statusni registar (Program Status Word – PSW): čine ga sledeći markeri koji se uvek postavljaju na logičku {0} ili {1}, nakon izvršenja aritmetičkih ili logičkih operacija:
CARRY (prenos) – postavlja se na logičku {1} ako se izvršenjem operacije javio prenos kod operacije sabiranja, ili je došlo do pozajmljivanja kod operacije oduzimanja, na mestu bita najveće težine,
SIGN (znak) – odgovara bitu znaka rezultata dobijen zadnjom operacijom,
ZERO (nula) – postavlja se na logičku {1} kada je rezultat operacije jednak 0,
IR – 16-bitni instrukcioni registar (Instruction Register – IR): čuva opkôd polje koje je deo kôda instrukcije, kao i polje modifikator M koji ukazuje na način adresiranja.
24
1.3 Adresni načini rada
Svakom operandu instrukcije pridružuje se podatak. Podatak može biti lociran u memoriji, AdressSim-ovim registrima (R0, .. R7) ili da predstavlja deo instrukcije (neposredni operand). Da bi izvršio instrukciju, procesor treba da pribavi tekuću vrednost podatka. Lokacija na kojoj se nalazi podatak može se specifirati na nekoliko načina. Specifikaciju lokacije operanda nazivamo način adresiranja. U zavisnosti od toga na koji način se obavlja specifikacija kažemo da postoje nekoliko različitih načina adresiranja. Za konkretni slučaj, AdressSim podržava sledeće načine adresiranja:
1. direktno;2. neposredno;3. implicitno;4. registarsko;5. indrektno memorijsko (preko registara i preko memorije);6. PC relativno;7. indeksno;8. magacinsko.
1.3.1 Direktno adresiranje
Kod direktnog načina adresiranja polje operand (vidi Sliku.12) specificira adresu memorijske lokacije koja odgovara podatku kome se pristupa. Naime, adresni deo instrukcije predstavlja adresu na osnovu koje se vrši obraćanje memoriji, pa se zbog toga ova adresa naziva direktna adresa. U konkretnom slučaju polje operanda je 9-bitno što znači da se može adresirati memorija kapaciteta 512 lokacija.
Prednost ovakvog načina adresiranja je jednostavnost izvođenja, a nedostatak ograničeni adresni opseg.
Kod direktnog adresiranja modifikator M ima vrednost 000.
opkod M operandX X X X 0 0 0 A A A A A A A A A
Slika 12. Format instrukcije kod direktnog adresiranja
Primenljivo je na operacije LD, ST, ADD, SUB, AND, OR.
Primeri: Ako je početna vrednost akumulatora AC = 10, memorijske lokacije M[12] = 25, sadržaj akumulatora AC i markera statusa (CARRY, SIGN, ZERO) nakon pojedinačnog izvršenja svake od sledećih instrukcija je:
LD 12
M[12] → AC
M[12] = (25)dec = (0000 0000 0001 1001)bin
AC = (10)dec = (0000 0000 0000 1010)bin
25
AC = 0000 0000 0001 1001CARRY = 0 SIGN = 0ZERO = 0
ST 12
AC → M[12]
M[12] = (25)dec = (0000 0000 0001 1001)bin
AC = (10)dec = (0000 0000 0000 1010)bin
M[12] = 0000 0000 0000 1010CARRY = 0 SIGN = 0ZERO = 0
ADD 12
AC + M[12] → AC
M[12] = (25)dec = (0000 0000 0001 1001)bin
AC = (10)dec = (0000 0000 0000 1010)bin
0000 0000 0000 1010 + 0000 0000 0001 1001 = 0000 0000 0010 0011
AC = 0000 0000 0010 0011CARRY = 0 SIGN = 0ZERO = 0
SUB 12
AC - M[12] → AC
M[12] = (25)dec = (0000 0000 0001 1001)bin
AC = (10)dec = (0000 0000 0000 1010)bin
0000 0000 0000 1010 - 0000 0000 0001 1001 = 1111 1111 1111 0001
AC = 1111 1111 1111 0001CARRY = 1 SIGN = 1ZERO = 0
AND 12
AC M[12] → AC
M[12] = (25)dec = (0000 0000 0001 1001)bin
26
AC = (10)dec = (0000 0000 0000 1010)bin
0000 0000 0000 1010 0000 0000 0001 1001 = 0000 0000 0000 1000
AC = 0000 0000 0000 1000CARRY = 0SIGN = 0ZERO = 0
OR 12
AC M[12] → AC
M[12] = (25)dec = (0000 0000 0001 1001)bin
AC = (10)dec = (0000 0000 0000 1010)bin
0000 0000 0000 1010 0000 0000 0001 1001 = 0000 0000 0001 1011
AC = 0000 0000 0001 1011CARRY = 0SIGN = 0ZERO = 0
1.3.2 Neposredno adresiranje
Kod neposrednog adresiranja adresni deo instrukcije (polje operand – vidi Sliku 13) specificira vrednost operanda, tj. operand je konstanta i sastavni je deo instrukcije. Osnovne karakteristike neposrednog načina adresiranja su:
Koristi se da definiše konstante, ili da postavi na inicijalne vrednosti promenljive u programu. Obično, brojevi se memorišu u prezentaciji dvoičnog komplementa. Bit najveće težine u polju operanda se koristi kao bit znaka. Kada se operand puni u registar, vrši se znakovno proširenje do obima koji odgovara punoj reči.
Operand se pribavlja u CPU u trenutku kada se pribavlja i instrukcija; na ovaj način se štedi jedan memorijski ili keš ciklus po instrukciji.
Kod neposrednog adresiranja polje modifikator M ima vrednost 001.
opkod M operandX X X X 0 0 1 A A A A A A A A A
Slika 13. Format instrukcije kod neposrednog adresiranja
Primenljivo je na operacijama: LD, OR, AND, ADD, SUB,
Primeri: Ako je početna vrednost akumulatora AC = 10, sadržaj akumulatora AC i markera statusa (CARRY, SIGN, ZERO) nakon pojedinačnog izvršenja svake od sledećih instrukcija je:
27
LD #15
15 → AC
(15)dec = (0000 0000 0000 1111)bin
AC: (10)dec = (0000 0000 0000 1010)bin
AC = 0000 0000 0000 1111CARRY = 0 SIGN = 0ZERO = 0
OR #15
15 AC → AC
(15)dec = (0000 0000 0000 1111)bin
AC: (10)dec = (0000 0000 0000 1010)bin
0000 0000 0000 1111 0000 0000 0000 1010 = 0000 0000 0000 1111
AC = 0000 0000 0000 1111CARRY = 0 SIGN = 0ZERO = 0
AND #15
15 AC → AC
(15)dec = (0000 0000 0000 1111)bin
AC: (10)dec = (0000 0000 0000 1010)bin
0000 0000 0000 1111 0000 0000 0000 1010 = 0000 0000 0001 1001
AC = 0000 0000 0001 1001CARRY = 0 SIGN = 0ZERO = 0
ADD #15
15 + AC → AC
(15)dec = (0000 0000 0000 1111)bin
AC: (10)dec = (0000 0000 0000 1010)bin
0000 0000 0000 1111 + 0000 0000 0000 1010 = 0000 0000 0001 1001
AC = 0000 0000 0001 1001CARRY = 0 SIGN = 0
28
ZERO = 0
SUB #15
AC - 15 → AC
(15)dec = (0000 0000 0000 1111)bin
AC: (10)dec = (0000 0000 0000 1010)bin
0000 0000 0000 1010 - 0000 0000 0000 1111 = 1111 1111 1111 1011
AC = 1111 1111 1111 1011CARRY = 1 SIGN = 1ZERO = 0
1.3.3 Registarsko adresiranje
Kod registarskog adresiranja, odgovarajućim poljem operanda (vidi Sliku 14 ) se specificira registar u kome je smešten operand.
Prednosti registarskog adresiranja su: Adresno polje instrukcije kojim se specificira registar je malo i obima je nekoliko
bitova. U konkretnom slučaju u polju operand od važnosti su samo tri (četiri) LS bita. Bitovi polja operand označeni sa “-“ nisu od važnosti. Dekodiranjem zadnja tri LS bita vrši se selekcija registara shodno sledećoj tabeli:
AAA Selekcija registra000 R0001 R1...
111 R7
1000 INDEKSNI REGISTAR
Tabela 3
Ne vrši se obraćanje memoriji; Instrukcije koje manipulišu sa sadržajem registra brzo se izvršavaju.
Kod registarskog adresiranja modifikator M ima vrednost 010.
Opkod M operandX X X X 0 1 0 - - - - - A A A A
29
Slika 14
Primenljivo je na naredbe ST, LD, OR, AND, ADD, SUB
Primer: Ako je početna vrednost akumulatora AC = 30h, registra opšte namene R3 = 100, sadržaj akumulatora AC i markera statusa (CARRY, SIGN, ZERO) nakon pojedinačnog izvršenja svake od sledećih instrukcija je:
ST R3
AC → R3
AC: (30)hex = (0000 0000 0011 0000)bin
R3: (100)dec=(0000 0000 0110 0100)bin
AC = 0000 0000 0011 0000CARRY = 0SIGN = 0ZERO = 0
LD R3
R3 → ACAC: (30)hex = (0000 0000 0011 0000)bin
R3: (100)dec=(0000 0000 0110 0100)bin
AC = 0000 0000 0110 0100CARRY = 0SIGN = 0ZERO = 0
OR R3
R3 AC → AC
AC: (30)hex = (0000 0000 0011 0000)bin
R3: (100)dec = (0000 0000 0110 0100)bin
0000 0000 0011 0000 0000 0000 0110 0100 = 0000 0000 0111 0100
AC = 0000 0000 0111 0100CARRY = 0 SIGN = 0ZERO = 0
AND R3
R3 AC → AC
AC: (30)hex = (0000 0000 0011 0000)bin
R3: (100)dec = (0000 0000 0110 0100)bin
30
0000 0000 0011 0000 0000 0000 0110 0100= 0000 0000 0010 0000
AC = 0000 0000 0010 0000CARRY = 0 SIGN = 0ZERO = 0
ADD R3
R3 + AC → AC
AC: (30)hex = (0000 0000 0011 0000)bin
R3: (100)dec = (0000 0000 0110 0100)bin
0000 0000 0011 0000 + 0000 0000 0110 0100= 0000 0000 1001 0100
AC = 0000 0000 1001 0100CARRY = 0 SIGN = 0ZERO = 0
SUB R3
AC – R3 → AC
AC: (30)hex = (0000 0000 0011 0000)bin
R3: (100)dec = (0000 0000 0110 0100)bin
0000 0000 0011 0000 - 0000 0000 0110 0100 = 1111 1111 1100 1100
AC = 1111 1111 1100 1100CARRY = 1 SIGN = 1ZERO = 0
1.3.4 Implicitno adresiranje
Kod implicitnog adresiranja imlicitna adresa se ne specifira posebno, mesto operanda je unapred poznato i zavisi samo od opkod polja naredbe (Slika 15).
opkod M operandX X X X 0 1 1 A A A A A A A A A
Slika 15
Primenljivo na neredbi CLC.
31
1.3.5 Indirektni načini adresiranja
Kod indirektnog načina adresiranja polje modifikatora proširujemo za jos jedan bit na račun operanda. U zavisnosti da li je bit najmanje težine modifikatora postavljen na 0 ili 1 vrši se indirektno adresiranje preko registra ili memorije. U slučaju da je postavljena 0 vrši se adresiranje preko registra, a ako je postavljena 1 preko memorije.
1.3.5.1 Indirektno memorijsko adresiranje preko registra
Kod indirektnog adresiranja preko registra, odgovarajućim poljem operand (vidi Sliku 16) se specificira registar u kome se čuva adresa operanda.
Osnovna prednost ove tehnike adresiranja je mogućnost pristupa većem adresnom prostoru, a nedostatak veći broj obraćanja memoriji.
Kod indirektnog adresiranja modifikator M ima vrednost 1000.
Opkod M operandX X X X 1 0 0 0 A A A A A A A A
Slika 16. Format instrukcije kod indirektnog adresiranja
Primenljivo na naredbe ST, LD, OR, AND, ADD, SUB
Primeri: Ako je početna vrednost akumulatora AC = 20, memorijskih lokacija M[30] = 40 i registra opšte namene R1 = 30, sadržaj akumulatora AC i markera statusa (CARRY, SIGN, ZERO) nakon pojedinačnog izvršenja svake od sledećih instrukcija je:
ST @R1
R1 →AC → M[30]
AC: (20)dec = (0000 0000 0001 0100)bin
R1: (30)dec = (0000 0000 0001 1110)bin
M[30]: (40)dec = (0000 0000 0010 1000)bin
AC = 0000 0000 0011 0000CARRY = 0SIGN = 0ZERO = 0
LD @R1
M[R1[30]] → AC
AC: (20)dec = (0000 0000 0001 0100)bin
32
R1: (30)dec = (0000 0000 0001 1110)bin
M[30]: (40)dec = (0000 0000 0010 1000)bin
AC = 0000 0000 0010 1000CARRY = 0SIGN = 0ZERO = 0
OR @R1
M[R1[30]] AC → AC
AC: (20)dec = (0000 0000 0001 0100)bin
R1: (30)dec = (0000 0000 0001 1110)bin
M[30]: (40)dec = (0000 0000 0010 1000)bin
0000 0000 0010 1000 0000 0000 0001 0100 = 0000 0000 0011 1100 AC = 0000 0000 0011 1100CARRY = 0SIGN = 0ZERO = 0
AND @R1
M[R1[30]] AC → AC
AC: (20)dec = (0000 0000 0001 0100)bin
R1: (30)dec = (0000 0000 0001 1110)bin
M[30]: (40)dec = (0000 0000 0010 1000)bin
0000 0000 0010 1000 0000 0000 0001 0100 = 0000 0000 0000 0000 AC = 0000 0000 0000 0000CARRY = 0SIGN = 0ZERO = 1
ADD @R1
M[R1[30]] + AC → AC
AC: (20)dec = (0000 0000 0001 0100)bin
R1: (30)dec = (0000 0000 0001 1110)bin
M[30]: (40)dec = (0000 0000 0010 1000)bin
0000 0000 0010 1000 + 0000 0000 0001 0100 = 0000 0000 0011 1100 AC = 0000 0000 0011 1100CARRY = 0SIGN = 0ZERO = 0
SUB @R1
AC - M[R1[30]] → AC
AC: (20)dec = (0000 0000 0001 0100)bin
33
R1: (30)dec = (0000 0000 0001 1110)bin
M[30]: (40)dec = (0000 0000 0010 1000)bin
0000 0000 0001 0100 - 0000 0000 0010 1000 = 1111 1111 1110 1100 AC = 0000 0000 0000 0000CARRY =1SIGN = 1ZERO = 0
1.3.5.1 Indirektno memorijsko adresiranje preko memorije
Kod indirektnog adresiranja preko memorije, odgovarajućim poljem operand (vidi Sliku 17) se specificira memorijska lokacija u kojoj se čuva adresa operanda.
Kod indirektnog adresiranja modifikator M ima vrednost 1001.
Opkod M operandX X X X 1 0 0 1 A A A A A A A A
Slika 17. Format instrukcije kod indirektnog adresiranja
Primenljivo na naredbe ST, LD, OR, AND, ADD, SUB
Primeri: Ako je početna vrednost akumulatora AC = 20, memorijskih lokacija M[30] = 40 i operanda 30, sadržaj akumulatora AC i markera statusa (CARRY, SIGN, ZERO) nakon pojedinačnog izvršenja svake od sledećih instrukcija je:
ST @30
AC → M[30]
AC: (20)dec = (0000 0000 0001 0100)bin
oper: (30)dec = (0000 0000 0001 1110)bin
M[30]: (40)dec = (0000 0000 0010 1000)bin
AC = 0000 0000 0011 0000CARRY = 0SIGN = 0ZERO = 0
LD @30
M[30]] → AC
AC: (20)dec = (0000 0000 0001 0100)bin
oper: (30)dec = (0000 0000 0001 1110)bin
M[30]: (40)dec = (0000 0000 0010 1000)bin
AC = 0000 0000 0010 1000CARRY = 0SIGN = 0ZERO = 0
34
OR @30
M[30]] AC → AC
AC: (20)dec = (0000 0000 0001 0100)bin
oper: (30)dec = (0000 0000 0001 1110)bin
M[30]: (40)dec = (0000 0000 0010 1000)bin
0000 0000 0010 1000 0000 0000 0001 0100 = 0000 0000 0011 1100 AC = 0000 0000 0011 1100CARRY = 0SIGN = 0ZERO = 0
AND @30
M[30]] AC → AC
AC: (20)dec = (0000 0000 0001 0100)bin
oper: (30)dec = (0000 0000 0001 1110)bin
M[30]: (40)dec = (0000 0000 0010 1000)bin
0000 0000 0010 1000 0000 0000 0001 0100 = 0000 0000 0000 0000 AC = 0000 0000 0000 0000CARRY = 0SIGN = 0ZERO = 1
ADD @30
M[30]] + AC → AC
AC: (20)dec = (0000 0000 0001 0100)bin
oper: (30)dec = (0000 0000 0001 1110)bin
M[30]: (40)dec = (0000 0000 0010 1000)bin
0000 0000 0010 1000 + 0000 0000 0001 0100 = 0000 0000 0011 1100 AC = 0000 0000 0011 1100CARRY = 0SIGN = 0ZERO = 0
SUB @R1
AC - M[30]] → AC
AC: (20)dec = (0000 0000 0001 0100)bin
oper: (30)dec = (0000 0000 0001 1110)bin
M[30]: (40)dec = (0000 0000 0010 1000)bin
0000 0000 0001 0100 - 0000 0000 0010 1000 = 1111 1111 1110 1100 AC = 0000 0000 0000 0000CARRY =1SIGN = 1ZERO = 0
35
36
1.3.6 PC relativno
Kod ovog adresiranja registar kome se implicitno obraćamo je programski brojač (PC- program counter). To znači da se tekuća adresa instrukcije sabira sa operandom i na taj način formira efektivna adresa (EA). (slika 18)
EA = PC + operand – predstavlja relativni razmestaj u odnosu na adresu instrukcije.
Najveći broj obraćanja memoriji je relativno blizu instrukciji koja se tekuće izvršava, što znači da se ovim načinom adresiranja štede bitovi u instrukciji.
Opkod M operandX X X X 1 0 1 A A A A A A A A A
Slika 18 Format instrukcije kod PC relativnog adresiranja
Primenljivo je na naredbe ST, LD, OR, AND, ADD, SUB.
Primeri: Ako je početna vrednost akumulatora AC = 18h, memorijske lokacije M[9] = 4, sadržaj akumulatora AC i markera statusa (CARRY, SIGN, ZERO) nakon pojedinačnog izvršenja svake od sledećih instrukcija je:
ST $8h
Operand + PC = EA AC → M[EA]
PC: (1)dec= (0000 0000 0000 0001)bin
AC: (18)hex = (0000 0000 0001 1000)bin
op: (8)hex = (0000 0000 0000 1000)bin
0000 0000 0000 1000 + 0000 0000 0000 0001 = 0000 0000 0000 1001 = EAAC = 0000 0000 0001 1000M[9] = 0000 0000 0001 1000
CARRY = 0SIGN = 0ZERO = 0
LD $8h
Operand + PC = EA M[EA] → AC
PC: (1)dec = (0000 0000 0000 0001)bin
M[9]: (4)dec = (0000 0000 0000 0100)bin
op: (8)hex = (0000 0000 0000 1000)bin
EA = 0000 0000 0000 1000 + 0000 0000 0000 0001 = 0000 0000 0000 1001
37
M[9] = 0000 0000 0001 1000AC= 0000 0000 0000 0100
CARRY = 0SIGN = 0ZERO = 0
OR $8h
Operand + PC = EA M[EA] AC → AC
AC: (18)hex= (0000 0000 0001 1000)bin
PC: (1)dec = (0000 0000 0000 0001)bin
M[9]: (4)dec = (0000 0000 0000 0100)bin
op: (8)hex = (0000 0000 0000 1000)bin
EA = 0000 0000 0000 1000 + 0000 0000 0000 0001 = 0000 0000 0000 1001M[9] = 0000 0000 0000 0100
0000 0000 0000 0100 0000 0000 0001 1000 = 0000 0000 0001 1100
AC = 0000 0000 0001 1100CARRY = 0SIGN = 0ZERO = 0
AND $8h
Operand + PC = EA M[EA] AC → AC
AC: (18)hex= (0000 0000 0001 1000)bin
PC: (1)dec = (0000 0000 0000 0001)bin
M[9]: (4)dec = (0000 0000 0000 0100)bin
op: (8)hex = (0000 0000 0000 1000)bin
EA = 0000 0000 0000 1000 + 0000 0000 0000 0001 = 0000 0000 0000 1001M[9] = 0000 0000 0000 0100
0000 0000 0000 0100 0000 0000 0001 1000 = 0000 0000 0000 0000
AC = 0000 0000 0000 0000CARRY = 0SIGN = 0ZERO = 1
ADD $8h
Operand + PC = EA M[EA] + AC → AC
AC: (18)hex= (0000 0000 0001 1000)bin
38
PC: (1)dec = (0000 0000 0000 0001)bin
M[9]: (4)dec = (0000 0000 0000 0100)bin
op: (8)hex = (0000 0000 0000 1000)bin
EA = 0000 0000 0000 1000 + 0000 0000 0000 0001 = 0000 0000 0000 1001M[9] = 0000 0000 0000 0100
0000 0000 0000 0100 + 0000 0000 0001 1000 = 0000 0000 0001 1100
AC = 0000 0000 0001 1100CARRY = 0SIGN = 0ZERO = 0
SUB $8h
Operand + PC = EA AC - M[EA] → AC
AC: (18)hex= (0000 0000 0001 1000)bin
PC: (1)dec = (0000 0000 0000 0001)bin
M[9]: (4)dec = (0000 0000 0000 0100)bin
op: (8)hex = (0000 0000 0000 1000)bin
EA = 0000 0000 0000 1000 + 0000 0000 0000 0001 = 0000 0000 0000 1001M[9] = 0000 0000 0000 0100
0000 0000 0001 1000 - 0000 0000 0000 0100 = 0000 0000 0001 0100
AC = 0000 0000 0001 0100CARRY = 0SIGN = 0ZERO = 0
1.3.7 Indeksno
Kod ovog adresiranja polje operanda predstavlja memorijsku lokaciju glavne memorije slika 19, dok je u indeksnom registru IND smešten pozitivan razmeštaj u odnosu na tu adresu. Efektivna adresa se formira kao zbir razmeštaja (vrednosti) iz indeksnog registra (IND) i vrednosti operanda (tj. rednog broja memorijske lokacije glavne memorije).
EA = R + IND
Opkod M operandX X X X 1 1 0 A A A A A A A A A
Slika 19. Format instrukcije kod indeksnog adresiranja
Primenljivo je na naredbe ST, LD, OR, AND, ADD, SUB.
39
Primeri: Ako je početna vrednost akumulatora AC = 37, memorijskih lokacija M[3] = 20, M[10] = 56, indeksnog registra IND = 7, sadržaj akumulatora AC i markera statusa (CARRY, SIGN, ZERO) nakon pojedinačnog izvršenja svake od sledećih instrukcija je:
ST %3
Operand + IND = EA AC → M[EA]
IND: (7)dec= (0000 0000 0000 0111)bin
AC: (37)dec = (0000 0000 0010 0101)bin
op: (3)dec = (0000 0000 0000 0011)bin
M[3]: (20)dec = (0000 0000 0001 0100)bin
M[10]: (56)dec = (0000 0000 0011 1000)bin 0000 0000 0000 0011 + 0000 0000 0000 0111 = 0000 0000 0000 1010 = EAAC = 0000 0000 0010 0101M[10] = 0000 0000 0010 0101
CARRY = 0SIGN = 0ZERO = 0
LD %3
Operand + IND = EA M[EA] → AC
IND: (7)dec= (0000 0000 0000 0111)bin
AC: (37)dec = (0000 0000 0010 0101)bin
op: (3)dec = (0000 0000 0000 0011)bin
M[3]: (20)dec = (0000 0000 0001 0100)bin
M[10]: (56)dec = (0000 0000 0011 1000)bin 0000 0000 0000 0011 + 0000 0000 0000 0111 = 0000 0000 0000 1010 = EA
M[10] = 0000 0000 0011 1000AC = 0000 0000 0011 1000
CARRY = 0SIGN = 0ZERO = 0
OR %3
Operand + IND = EA M[EA] AC → AC
IND: (7)dec= (0000 0000 0000 0111)bin
AC: (37)dec = (0000 0000 0010 0101)bin
op: (3)dec = (0000 0000 0000 0011)bin
40
M[3]: (20)dec = (0000 0000 0001 0100)bin
M[10]: (56)dec = (0000 0000 0011 1000)bin 0000 0000 0000 0011 + 0000 0000 0000 0111 = 0000 0000 0000 1010 = EA0000 0000 0011 1000 0000 0000 0010 0101 = 0000 0000 0011 1101
AC = 0000 0000 0011 1101
CARRY = 0SIGN = 0ZERO = 0
AND %3
Operand + IND = EA M[EA] AC → AC
IND: (7)dec= (0000 0000 0000 0111)bin
AC: (37)dec = (0000 0000 0010 0101)bin
op: (3)dec = (0000 0000 0000 0011)bin
M[3]: (20)dec = (0000 0000 0001 0100)bin
M[10]: (56)dec = (0000 0000 0011 1000)bin 0000 0000 0000 0011 + 0000 0000 0000 0111 = 0000 0000 0000 1010 = EA0000 0000 0011 1000 0000 0000 0010 0101 = 0000 0000 0010 0000
AC = 0000 0000 0010 0000
CARRY = 0SIGN = 0ZERO = 0
ADD %3
Operand + IND = EA M[EA] + AC → AC
IND: (7)dec= (0000 0000 0000 0111)bin
AC: (37)dec = (0000 0000 0010 0101)bin
op: (3)dec = (0000 0000 0000 0011)bin
M[3]: (20)dec = (0000 0000 0001 0100)bin
M[10]: (56)dec = (0000 0000 0011 1000)bin 0000 0000 0000 0011 + 0000 0000 0000 0111 = 0000 0000 0000 1010 = EA0000 0000 0011 1000 + 0000 0000 0010 0101 = 0000 0000 0101 1101
AC = 0000 0000 0101 1101
CARRY = 0SIGN = 0ZERO = 0
SUB %3
41
Operand + IND = EA AC - M[EA] → AC
IND: (7)dec= (0000 0000 0000 0111)bin
AC: (37)dec = (0000 0000 0010 0101)bin
op: (3)dec = (0000 0000 0000 0011)bin
M[3]: (20)dec = (0000 0000 0001 0100)bin
M[10]: (56)dec = (0000 0000 0011 1000)bin 0000 0000 0000 0011 + 0000 0000 0000 0111 = 0000 0000 0000 1010 = EA0000 0000 0010 0101 - 0000 0000 0011 1000 = 1111 1111 1110 1101
AC = 1111 1111 1110 1101
CARRY = 1SIGN = 1ZERO = 0
1.3.8 Magacinsko
Magacin (stack) je linearno polje lokacija (rezervisan blok lokacija glavne memorije). Magacinu je moguće pristupiti samo sa jedne strane koja se naziva vrh magacina (stack).
Operacija upisivanja u magacin se obavlja naredbom PUSH, tako što se stavka postavlja na vrh magacina (Slika 20).
Opkod M operand0 0 1 1 1 1 1 A A A A A A A A A
Slika 20. Format PUSH instrukcije kod magacinskog adresiranja
Čitanje iz magacina realizuje se naredbom POP, tako što se stavka izbavlja sa vrha magacina (Slika 21).
Opkod M operand0 1 1 0 1 1 1 A A A A A A A A A
Slika 21. Format POP instrukcije kod magacinskog adresiranja
Položaj vrha magacina menja se operacijama PUSI i POP za odgovarajuću dužinu operanda koji se smešta/izbavlja u/iz magacina. Pristup magacinu reguliše se pokazivačem magacina (stack pointer) SP. U SP se čuva adresa zadnjeg operanda koji je smešten u magacin. Adresa na koju pokazuje SP se automatski reguliše posle svake PUSH ili POP naredbe tako da uvek pokazuje na vrh magacina.
Autoindeksiranje se može uspešno primeniti kod adresiranja magacina. Većina procesora ima ugradjen specijalni autoindeksirani adresni registar SP koji se koristi kao pokazivač.
42
2. Instalacija i pokretanje programa
Postupak pokretanja programa AdressSim je sledeći:
1. Izabrati programsku ikonu AdressSim for Windows lociranu na Desktop-u.
43
2. Aktivirati AdressSim – aktiviranje se izvodi dvostrukim klikom levim tasterom miša na odabranu ikonu AdressSim
3. Startovanjem AdressSim -a na ekranu se pojavljuje aplikacioni prozor pod nazivom AdressSim – untiled.asm (vidi Sliku 1)
4. U oblasti aktivne površine Editor-a pozicionirati kursor u krajnje gornjoj levoj poziciji. Kada je kursor pozicioniran u krajnje gornjoj levoj poziciji, vrednost linijskog brojača je 0, tj. prikazuje se broj linije 0.
5. U svakoj liniji aktivne površine unosi se po jedna instrukcija. Prelazak na novu liniju se vrši pritiskom na dirku Enter. Nakon svakog unosa instrukcije vrednost linijskog brojača inkrementira se za 1.
2.1 Text Eitor Nakon pokretanja programa AMSim pojavljuje se glavni aplikacioni prozor koji predstavlja Text Editor u kome se pripremaju sekvence programa. On se satoji iz 3 dela prikazanih na slici 1.
1. Menu-bar2. Text editor3. Pokazivač linije u kojoj se nalazi kursor
Slika 1 – Prozor text editora
1. Sekcija na vrhu se odnosi na polje Menu-bar. Menu-bar omogućava selekciju File, Edit, View, Assemble i Help operacije.
File – selekcijom ove operacije otvara se padajući meni koji sadrži sledeće opcije (vidi Sliku 2):
■ New – (selekcijom ove operacije) kreira se nova programska sekvenca ■ Open – učitava se fajl izvornog programa nazvan ime-prezime.asm■ Save – pamti fajl koji se tekuće koriguje ili ažurira na mestu gde je bio prethodno zapamćen■ Save as... – dodeljuje ime fajlu (ime-prezime.asm) koji se tekuće kreira, bira lokaciju gde će se taj fajl zapamtiti
44
■ Exit - izlazak iz Text editora.
Slika 2
Edit – selekcijom ove operacije otvara se padajući meni (vidi Sliku 3) koji sadrži sledeće opcije:
■ Cut – kopiranje selektovanog sadržaja. Kopiranjem, selektovani sadržaj se briše iz izvornog fajla.■ Copy - kopiranje selektovanog sadržaja. Kopiranjem, selektovani sadržaj se ne briše iz izvornog fajla.■ Paste – lepljenje prethodno kopiranog selektovanog sadržaja iz izvornog fajla.■ Delete – brisanje selektovanog sadržaja iz izvornog fajla.■ Select All – selektovanje celokupnog (integralnog) sadržaja izvornog fajla.
Slika 3Assemble – koristi se za asembliranje sadržaja izvornog programa izvornog fajla sa
ekstenzijom .asm koji se unosi preko Text-editor-a. Aktiviranje izvršenja programa na displeju prati generisanje prozora Assembler.
Ovaj prozor biće opisan kasnije.
Help – opcija služi za dobijanje pomoćnih informacija o programu.
45
2. Sekcija Text editor aktivira se klikom levog tastera miša. Kao efekat pojavljuje se kursor pozicioniran na krajnje gornjoj levoj poziciji aktivne površine Editor-a koja se koristi za unos izvornog programa.
Unešeni tekst se u realnom vremenu (odmah po unosu) "boji" u odgovarujuću boju kao što je to prikazano u sledećem primeru:
Primer:
Ako nema teksta koji je obojen u crvenu boju znači da je unešeni tekst sintaksno ispravan i da se može asemblirati u protivnom je potrebno ispraviti crveno obojeni tekst jer postoji sitaksna greška.
3. Sekcija Pokazivač kursora – predstavlja linijski brojač, brojna vrednost ukazuje na liniju u kojoj se unosi asemblerski kôd i broj karaktera u tekućoj liniji.
2.2. Asembliranje
Izborom opcije Assemble iz glavnog menija tekst editora otvra se prozor Assembler prikazan na Slici 4
Slika 4 – Prozor Assembler
46
lsc - nepravilano napisan tekst (crveno); komentar - komentar počinje sa znakom ;
(plavo)add 0ah ;komentar u liniji koda - pravilno napisana komanda add 12 - pravilno napisan numerički
operand (zeleno)sub ah - pravilno napisan operand registar (teget)and r0 - pravilno napisan specijalni zank (braon)add #23
U ovom prozoru se može videti izveštaj o toku procesa asembliranja kao i izveštaj o eventualnim greškama. U donjem delu se nalazi poruka o tome kako je završen proces asembliranja da li uspešno ili koliko grešaka postoji.
Izveštaj o procesu asembliranja ima seledeću formu:
Memory[0]=1110000000001010: ADD AHMemory[1]=1110000000001100: ADD 12Memory[2]=1111000000001010: SUB 0AHMemory[3]=1101010000000000: AND R0Memory[4]=1110001000000000: ADD #23Memory[5]=0000000000010111
U izveštaju za svaku uspešno asembliranu instrukciju imamo označenu memorijsku lokaciju na koju se upisuje mašinski kod te instrukcije, mašinski kod je prikazan sa označenim delom za opkod (plava boja) modifikator (zelena boja) i operand, i na kraju asemblerski kod instrukcije.
U slučaju da postoji greška, prikazuje se poruka o grešci koja se satoji iz broja linije u kojoj se greška nalazi, koda greške i objašnjenja greške. Asembeler ume da prepozna sledeće tipove grešaka:
kod greške Objašnenje
0 nepostojeća naredba2 neprhvatljiv način adresiranje za tu naredbu4 postoji nešto iza operanda u liniji5 naredba ne treba da ima operand6 prekoračena vrednost operanda
7 registar SP se ne koristi za aritmetičke i logičke operacije
Tabela – greške koje asembler prepoznaje
Nakon uspešnog asembliranja mogu se izabrati dve opcije OK ili Start CPU. Izborom opcije OK zatvara se prozor asembelra otvaraju se tri nova prozora Processor Graph, Memory i Register prozor ali se ne startuje izvršavanje programa dok se izborom opcije Start CPU otvaraju ova tri nova prozora i počinje izvršavanje programa.
2.3 Praćenje toka izvršavanja programa
Processor Graph, Register, Memory i Trace prozori
Posle asembliranja programa otvaraju nam se tri nova prozora koja treba da posluže za praćenje toka izvršavanja programa i to su Processor Graph (slika 5) na kome je prikazana blok šema procesora, Register prozor (slika 6) u kome su date tekuće vrednosti registara procesora i Memory prozor (slika 7) u kome su prikazane tekuće vrednosti u meoriji koja je grupisana po memorijskim lokacijama dužine mašinske reči od 2 bajta (16 bita). Pored ovih postoji i prozor Trace (slika 8) u kome se mogu pratiti vrednosti registara PC, AC, IR, IND posle svake faze izvršenja instrikcije.
47
2.3.1 Processor Graph prozor
Slika 5 – Processor Graph prozor
U ovom prozoru prikazna je blok-šema procesora na kojoj se prikazuje tok izvršavanja isntrukcija. U okviru blok šeme prikazani su registri procesora, Aritmetičko-logička jedinica, Memorija, magistrale koje ih povezuju i kontrolni signali koji kontrolišu rad procesora.
Registri su na blok šemi prikazani pravougaonikom u kome se nalazi ime registra, a sa strane su prikazani konrolni ulazi koji su označeni kontrolnim signalima i to mogu biti sledeći signali:
- En – enabale signal dozvole upisa u registar;- Inc – signal inkrementrianja sadržaja registra;- Dec – signal dekrementrianja sadržaja registra;- S0, S1, S2 – selektorsku ulazi za registre opšte namena R0 ... R7.Signali su označeni crnim slovima kada su neaktivni, a crvenim kada su aktivni.
Na blok-šemi označeni su sledeći registri- PC – program counter – 16 bitni registar programskog brojača. Ima dva kontrolna
ulza En i Inc;
48
- AC – akumulator – 16 bitni registar akumulator. Ima tri kontrolna ulaza En, Inc i Dec;
- IR – Instruction Register – 16-bitni instrukcioni registar koji ima tri izlaza i to 9-bitni izlaz za operand, ovaj izlaz se priključuje na 16-bitnu magistralu, 3-bitni izlaz za modifikator i 4-bitni izlaz za opcode;
- IND - index register – 16-bitni indesni registar;- SP – Stack Pointer – 16-bitni registar pokazivač steka;- R0..R7 – 16-bitni registri opšte namene;- Leč A, Leč B pomoćni registri za držanje vrednosti;- MAR, MDR – pomoćni registri za pristup memoriji;- PSW – program status word – je trobitni registar koji sadrži bitove kojima se oči-
tava stanje tri markera CARRY, SIGN i ZERO.
Crnim linijama na blok-šemi prikazana je 16-bitna magistrala, a stelicama je prikazan smer toka signala kroz magistralu. Aktivni deo magistrale u toku izvršenja instrukcije označava se plavom bojom.
Za kontrolu rada magistrale koriščeni su 16-bitni trostatički baferi koji su prikazani simbolom:
Kada je ovaj simbol prikazan crnom bojom bafer je neaktivan, a na njegovom izlazu je stanje visoke impendanse. Kada je simbol prikazan crvenom bojom, bafer se nalazi u aktivnom stanju i na njegovom izlazu se preslikava stanje sa ulaza.
Pored trostatičkih bafera za kontrolu rada magistale koriste se i dva multipleksera koja su na šemi označena simbolom:
i u zavisnosti od kontorolnog signala multipleksera na izlazu se propušta odgovarajući ulazni signal multipleksera.
Na vrhu prozora nalazi se Menu bar u kome se nalaze opcije za konrolu rada procesora i to su sledeće opcije:
- Start CPU - ovom opcijom pokreće se rad procesora, počinje animacija kojom se prikazje protok informacije crvenim tačkama koje se kreću duž magistrale i aktivni kontrolni signali se prikazini crvenom bojom.
- STOP – ovom opcijom se zaustavlja rad procesora. Po izboru ove opcije treba sačekati da se završi animacija kojom se prikazuje tekuća faza izvršavanja instrukcije.
- Reset - ovom opcijom procesor se dovodi u početno stanje, vrednost registara se postavlja na 0.
- STEP_FWD – kada je procesor zaustavljen opcijom STOP ovom opcijom se može narediti izvršenje sledeće faze izvršenja instrukcije posle čega se procesor ponovo zaustavlja.
Pored opcija za kontrolu rada procesora u Menu bar-u nalazi se još i podmeni View u kome se mogu izbrai sledeće opcije:
- Register - Register Edit- Memory- Memory Edit
49
- Trace
2.3.2 Register prozor i Register Edit prozor
Slika 6 – Registers i Register Edit prozor
Prozor Register se otvara istovremno sa prozorom Processor Graph i u njemu se prikazuju trenutne vrednosti registara procesora u binarnom brojnom sitemu. Ovom prozoru se može pristupiti i iz menija przora Processor Graph izborom opcije View| Register.
Na vrhu ovog prozora nalazi se Menu bar u kome se nalazi opcija Reister Edit kojom se poziva istoimeni prozor u kome se mogu psotaviti vrednosti registara. Vrednosti registara se unose u decimalnom brojnom sitemu. Ovom prozoru se može pristupiti i iz menija prozora Processor Graph izborom opcije View| Register Edit.
2.3.3 Memory i Memory Editor prozor
50
Slika 7 – Memory i Memory Edit prozor
Prozor Memory se otvara istovremeno sa prozorom Processor Grpah i služi za prikaz sadržaja memorije. Ovom prozoru se može pristupiti i iz menija prozora Processor Graph izborom opcije View| Memory.
Sadržaj memorije prikazan je u formi tabele sa dve kolone prva kolona označava memorijsku lokaciju a druga vrednost koja je upisana na toj memorijskoj lokaciji u binarnom brojnom sitemu. Žuto označeno polje predstavlja memorijsku lokaciju koja je trenutno selektovana na adresnom ulazu memorije. Crvenom bojom označene su memorijske lokacije na kojima su upisne instrukcije programa koji se izvršava.
Na vrhu ovog prozora nalazi se Menu bar koji ima opciju Memory Edit kojom se poziva prozor Memory Edit.
U prozoru Memory Edit se nalazi slična tabela ali se u njoj mogu uneti vrednosti na odgovarajućim memorijskim lokacijama u memoriji u decimalnom brojnom sistemu. Ovom prozoru se može pristupiti i iz menija prozora Processor Graph izborom opcije View| Memory Edit.
2.3.4 Trace Prozor
Slika 8 - Trace prozor
Trace prozoru se pristupa iz menija prozora Processor Graph izborom opcije View| Trace. U prozoru Trace u formi liste prkazana je aktivnost procesora po fazama izvršavanja instrukcija kao i vrednosti registara PC, IR, AC i IND posle svake izvršene faze.
51
3. Lab. Vežba AdressSim
52
Za pokretanje programa AdressSim za Windows potrebno je preduzeti aktivnosti koje su opisane u koraku 2 ove laboratorijske vežbe.
Postupak pokretanja programa AdressSim je sledeći:
1. Izabrati programsku ikonu AdressSim for Windows lociranu na Desktop-u.2. Aktivirati AdressSim – aktiviranje se izvodi dvostrukim klikom levim tasterom
miša na odabranu ikonu AdressSim
3. Startovanjem AdressSim -a na ekranu se pojavljuje aplikacioni prozor pod nazivom AdressSim – untiled.asm (vidi Sliku 1)
4. U oblasti aktivne površine Editor-a pozicionirati kursor u krajnje gornjoj levoj poziciji. Kada je kursor pozicioniran u krajnje gornjoj levoj poziciji, vrednost linijskog brojača je 0, tj. prikazuje se broj linije 0.
5. U svakoj liniji aktivne površine unosi se po jedna instrukcija. Prelazak na novu liniju se vrši pritiskom na dirku Enter. Nakon svakog unosa instrukcije vred-nost linijskog brojača inkrementira se za 1.
Slika 1 – Prozor Text editora
3.1. Pokazni primer
Kroz reprezentativni primer od četiri naredbe prikazaćemo sve korake izvršenja test sekvence.
Primer: ADD 23LD R2SUB #23 AND $15
U Text editor se unosi sledeca sekvenca :
53
ADD 23LD R2SUB #23 AND $15
Prelazak na sledeću liniju test sekvence se vrši pritiskom na taster Enter.Klikom levog tastera miša na polje Assemble (1) vrši se asembliranje unete sekvence.
(slika 2).
Slika 2
Otvara se prozor Assembler u kome možemo da vidimo da li je asembliranje uspešno (3) i izgled instrukcije u asemblerskom jeziku (Slika 3). Sadržaji memorijskih lokacija koje je asembler dodelio instukcijama su:
Memory[0]=1110000000010111: ADD 23Memory[1]=0110010000000010: LD R2Memory[2]=1111001000000000: SUB #23Memory[3]=0000000000010111Memory[4]=1101101000001111: AND $15
54
1
3 Slika. 3 2
Asemblerska instrukcija se sastoji od 16 bitova od kojih prva četiri predstavljaju instrukciju (bitovi plave boje), naredna tri bita, način adresiranja ( bitovi zelene boje), a ostalih devet bitova operand, koji u ovom slučaju, predstavlja memorijsku lokaciju na kojoj se nalazi podatak nad kojim se izvršava zadata instrukcija (bitovi ljubičaste boje).
Startujemo AdressSim, klikom levog tastera miša na polje OK (2), program počinje sa izvršavanjem. Da bismo uočili pravilan rad programa i proverili ispravnost pratićemo izvršenje unete test sekvence tako što ćemo uneti u AC i R2 neku proizvoljnu vrednost klikom na Register edit (Slika 4) (npr. 5 u AC i 30 u R2, ukucamo broj zatim kliknemo na ) (Slika. 6) i proizvoljne vrednost u memorijske lokacije levim klikom na Memory edit (Slika 5) (u našem slučaju u 19-tu memorijsku lokaciju npr.11 i u 23 memorijsku lokaciju vrednost npr.12 (slika 7) ) .
U oba editora unose se isključivo decimalne vrendosti.
Slika. 4 Slika. 5
55
Slika. 6 Slika.7
Klikom levog tastera miša na polje Start počinje izvršavanje simulacije.
Početne vrednosti registara i memorijskih lokacija su:
PC = 0000000000000000 IR = 0000000000000000
AC = 0000000000000000 IND = 0000000000000000
R2 = 0000000000011110 M[23] =0000000000001100
M[19] = 0000000000001011 Početak testne sekvence:
Prva instrukcija
ADD 23 Fetch 1: PC -> MAR
PC= 0000000000000000 IR= 0000000000000000 AC= 0000000000000101 IND= 0000000000000000
Fetch 2: M[MAR] -> IR
PC= 0000000000000000 IR= 1110000000010111 AC= 0000000000000101 IND= 0000000000000000
56
Fetch 3: INC PC - Decoding Instr.
PC= 0000000000000001 IR= 1110000000010111 AC= 0000000000000101 IND= 0000000000000000
F1: IR[operand] -> MAR
PC= 0000000000000001 IR= 1110000000010111 AC= 0000000000000101 IND= 0000000000000000
Flags carry=0 zero=0 sign=0
F2: AC + M[MAR] -> AC
PC= 0000000000000001 IR= 1110000000010111 AC= 0000000000010001 IND= 0000000000000000
Druga instrukcija LD R2 Fetch 1: PC -> MAR
PC= 0000000000000001 IR= 1110000000010111 AC= 0000000000010001 IND= 0000000000000000
Fetch 2: M[MAR] -> IR
PC= 0000000000000001 IR= 0110010000000010 AC= 0000000000010001 IND= 0000000000000000
Fetch 3: INC PC - Decoding Instr.
PC= 0000000000000010 IR= 0110010000000010 AC= 0000000000010001 IND= 0000000000000000
R2 -> AC
PC= 0000000000000010 IR= 0110010000000010 AC= 0000000000011110 IND= 0000000000000000
Treća instrukcija: SUB #23 Fetch 1: PC -> MAR
57
PC= 0000000000000010 IR= 0110010000000010 AC= 0000000000011110 IND= 0000000000000000
Fetch 2: M[MAR] -> IR
PC= 0000000000000010 IR= 1111001000000000 AC= 0000000000011110 IND= 0000000000000000
Fetch 3: INC PC - Decoding Instr.
PC= 0000000000000011 IR= 1111001000000000 AC= 0000000000011110 IND= 0000000000000000
F1: PC -> MAR
PC= 0000000000000011 IR= 1111001000000000 AC= 0000000000011110 IND= 0000000000000000
Flags carry=0 zero=0 sign=0
F2: AC - M[PC] -> AC INC PC
PC= 0000000000000100 IR= 1111001000000000 AC= 0000000000000111 IND= 0000000000000000
Četvrta instrukcija:
AND $15 Fetch 1: PC -> MAR
PC= 0000000000000011 IR= 1111001000010111 AC= 0000000000000111 IND= 0000000000000000
Fetch 2: M[MAR] -> IR
PC= 0000000000000011 IR= 1101101000001111 AC= 0000000000000111 IND= 0000000000000000
Fetch 3: INC PC - Decoding Instr.
PC= 0000000000000100 IR= 1101101000001111 AC= 0000000000000111 IND= 0000000000000000
F1: PC + IR[operand] -> MAR
PC= 0000000000000100 IR= 1101101000001111
58
AC= 0000000000000111 IND= 0000000000000000
Flags carry=0 zero=0 sign=0
Tabela stanja test sekvence izgleda ovako:
59
3.2 Test sekvence sa odovarajućim zadacima
Upoznati se sa načinaima adresiranja pomoću jednoadresnog simulatora AdressSim-a, koristeći test sekvence Grupa 1,..., Grupa 15.
Postupak čine sledeći koraci:a) Nakon unošenja test sekvence u TEXT editor prozora AMSim.untitled.asm klikom
levog tastera miša na opciju Assemble vrši se asembliranje unete instrukcije i otvara novi prozor Assembler kome se vidi asemblirana sekvenca. Nako toga se klikom levim tasterom miša na polje Start CPU pokreće se simulacija programa.
b) Pre startovanja programa se u memoriju i registre opšte namene unose se vrednosti zadate uz datu test sekvencu, klikom levim tasterom miša na polje Memory edit (ukoliko upisujemo podatak u memoriju), ili na polje Register edit (ukoliko upisujemo podatak u registre). Klikom levog tastera miša na polje podatak će biti upisan u memorijsku lokaciju ili registar na unetoj adresi, respektivno.
c) Nakon upisivanja podataka klikom levog tastera miša na polje Start pokrenuti simulator. Da bi se program izvršavao korak po korak kliknuti na polje STOP koje se nalazi u Meni bar-u, a u suprotnom, program će se izvršavati kontinualno od početka do kraja.
Uočiti i ispisati scenarij svih koraka navedenih instrucija u okviru test sekvence.Korake instrukcija test sekvence izvršavati pomoću opcije STEP FWD. Nakon svakog koraka upisati stanja odgovarajućih registara na naznačenim mestima u
tabeli .Dobijeni rezultat proveriti analitičkim putem. Student sam treba da se odluči koju ce
naredbu uslovnog skoka upotrebiti. Student sam treba da odredi u koji registar i na koju memorijsku lokaciju treba da unese proizvoljnu decimalnu vrednost, u zavisnosti od date test sekvence.
Grupa 1.
ADD 3 direktnoLD #15 neposrednoCLC implicitnoST R3 registarskoOR @R1 indirektno memorijsko preko registaraSUB $15h PC relativnoAND %20 indeksnoPUSH magacinskoJX neposredno
Grupa 2.
AND 6 direktnoSUB #4 neposrednoCLC implicitnoOR R1 registarskoJX neposrednoADD @23 indirektno memorijsko preko memorijeST $10h PC relativnoLD %7 indeksnoPOP magacinsko
60
Grupa 3.
OR 9 direktnoADD #5 neposrednoCLC implicitnoLD R5 registarskoSUB @R2 indirektno memorijsko preko registaraJX neposrednoAND $9h PC relativnoADD %13 indeksnoPUSH magacinsko
Grupa 4.
SUB 10 direktnoOR #8 neposrednoCLC implicitnoAND R2 registarskoJX neposrednoST @23 indirektno memorijsko preko memorijeLD $6h PC relativnoSUB %7 indeksnoPOP magacinsko
Grupa 5.
ST 8 direktnoAND #6 neposrednoCLC implicitnoADD R5 registarskoLD @R1 indirektno memorijsko preko registaraOR $ 4h PC relativnoSUB %18 indeksnoJX neposrednoPUSH magacinsko
Grupa 6.
LD 12 direktnoAND #7 neposrednoCLC implicitnoSUB R2 registaarskoAND @23 indirektno memorijsko preko memorijeJX neposrednoADD $11h PC relativnoOR %11 indeksnoPOP magacinsko
61
Grupa 7.
ADD 45 direktnoSUB #4 neposrednoCLC implicitnoST R1 registarskoOR @R6 indirektno memorijsko preko registaraJX neposrednoLD $23h PC relativnoAND %14 indeksnoPUSH magacinsko
Grupa 8.
SUB 34 direktnoAND #11 neposrednoJX neposrednoCLC implicitnoLD R5 registarskoST @23 indirektno memorijsko preko memorijeOR $11 PC relativnoADD %10 indeksnoPOP magacinsko
Grupa 9.
AND 8 direktnoOR #6 neposrednoCLC implicitnoADD R2 registarskoJX neposrednoSUB @R4 indirektno memorijsko preko registaraST $10 PC relativnoLD %22 indeksnoPUSH magacinsko
Grupa 10.
OR 11 direktnoLD #11 neposrednoCLC implicitnoAND R5 registarskoADD @12 indirektno memorijsko preko memorijeSUB $2 PC relativnoJX neposrednoST %13 indeksnoPOP magacinsko
62
Grupa 11.
ST 11 direktnoADD #15 neposrednoCLC implicitnoSUB R5 registarskoLD @R6 indirektno memorijsko preko registaraAND $4 PC relativnoJX neposrednoSUB %1 indeksnoPUSH magacinsko
Grupa 12.
LD 7 direktnoSUB #22 neposrednoCLC implicitnoJX neposrednoOR R4 registarskoAND @10 indirektno memorijsko preko memorijeADD $32 PC relativnoOR %12 indeksnoPOP magacinsko
Grupa 13.
OR 9 direktnoAND #16 neposrednoCLC implicitnoADD R6 registarskoST @R1 indirektno memorijsko preko registaraLD $12 PC relativnoJX neposrednoADD %43 indeksnoPOP magacinsko
Grupa 14.
ADD 21 direktnoOR #8 neposrednoCLC imlicitnoST R3 registarskoJX neposrednoOR @15 indirektno memorijsko preko memorijeAND $6 PC relativnoAND %16 indeksnoPUSH magacinsko
63
Grupa 15.
SUB 18 direktnoADD #5 neposrednoCLC implicitnoLD R4 registarskoAND @R2 indirektno memorijsko preko registaraJX neposrednoST $2 PC relativnoLD %23 indeksnoPOP magacinsko
Grupa 16.
ADD 43 direktnoSUB #4 neposrednoCLC implicitnoOR R3 registarskoLD @3 indirektno memorijsko preko memorije SUB $44 PC relativnoOR%11 indeksnoPUSH magacinskoJX neposredno
3.3 Pitanja:
1. Koja je razlika između direktnog i registarskog načina adresiranja?2. Koja je razlika između neposrednog i PC relativnog načina adresiranja?3. Koje su mikrooperacije potpuno iste za sve načine adresiranja?4. Koliko bitova ima na raspolaganju operand u zavisnosti od načina adresiranja?5. Gde se smešta rezultat nakon izvršenja instrukcije OR?6. Koji načini adresiranja su mogući za instrukciju SUB,JZ,POP,LD?
64
Literatura
Dr. Prof. Mile Stojčev RISC, CISC i DSP Procesori
65
Instruk-cija
TokMikro-operacije PC AC IR IND MAR R__ R__ M[__] M[__]
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
66
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
____________________________________________________________
67
68