Dokumentácia k simulátoru SimulAnt
Úvod
Stavebné prvky počítača na úrovni RTL
Na úrovni RTL sú hlavnými stavebnými prvkami počítača registre, funkčné
jednotky a ďalšie prvky, napr. multiplexory, zbernice a počítadlá. Všeobecná schéma
jednoduchého počítača obyčajne znázorňuje tieto jeho jednotlivé súčasti: riadiacu
jednotku, operačnú časť a okolie počítača, ktoré tvorí pamäť a externé registre.
Zjednodušená schéma počítača s pamäťou je znázornená na obrázku 1. V praxi
všetky komponenty počítača majú vstup pre hodinový signál, čím je zabezpečená
synchronizácia.
1
Obr.1.: Schéma znázorňujúca stavbu jednoduchého počítača
Riadiaca jednotka
Riadiaca jednotka (RJ, Control Unit) zabezpečuje dekódovanie inštrukcie a na
základe výsledku komunikuje s operačnou časťou počítača. Vysiela signály, podľa
ktorých počítač pristupuje do hlavnej pamäti, k registrom alebo na štandardný
vstup/výstup. Vstupmi do riadiacej jednotky môžu byť niektoré signály operačnej
časti, ktorú na obr.1 reprezentujú ALU a registre. Výstupmi sú signály, ktoré posiela
v komunikačných slovách - mikroinštrukciách a sú reprezentované binárne. Každý
bit, alebo skupina bitov predstavuje v danej mikroinštrukcii nastavenie niektorého
z komponentov operačnej časti, čím im dáva signál na povolenie vstupu alebo
výstupu údajov (napr. signál OE - output enable - na príslušnom registri umožní
zápis jeho obsahu na zbernicu, LE - latch enable - povolí zápis do registra, a pod.).
Signály riadiacej jednotky pre operačnú časť a registre nie sú na obrázku 1
znázornené, zo vstupov riadiacej jednotky je znázornený len vstup z registra IR.
Operačná časť a registre
Operačná časť (OČ) pozostáva z jednej alebo viacerých funkčných jednotiek,
z registrov a prepojení. Funkčnou jednotkou býva ALU – aritmeticko-logická jednotka.
Ako prepojenia môžu byť použité zbernice a/alebo multiplexory.
ALU - je určená pre aritmetické a logické operácie s údajmi. V jednoduchších
mikroprocesoroch poskytuje minimálne operácie sčítania a negácie, na ktoré sa
ostatné operácie - násobenie, celočíselné delenie a odčítanie - dajú previesť. Druhá
časť ALU umožňuje základné logické operácie - logický súčet, súčin a neekvivalenciu
(AND, OR a XOR). Súčasťou jednotky je aj posunovač, ktorý vykonáva bitové posuvy
vľavo a vpravo. ALU má dva dátové vstupy, jeden dátový výstup a vstup, určujúci
operáciu, ktorá sa má vykonať. Tento na obrázku 1 nie je znázornený.
K štandardnej výbave operačnej časti patria registre:
IR (instruction register) – obsahuje práve vykonávanú inštrukciu. Bity, ktoré
reprezentujú operačný kód sú poskytnuté riadiacej jednotke na dekódovanie.
V prípade skokových inštrukcií sprístupňuje operand ako adresu skoku.
PC (program counter) – obsahuje adresu nasledujúcej inštrukcie. Môže mať
vlastnosť inicializácie (na adresu 0), prípadne v sebe môže obsahovať
mechanizmus na inkrementáciu vlastného obsahu, hoci vo väčšine zdrojov sa
2
uvažuje inkrementácia PC pomocou ALU. Príklad vnútornej štruktúry registra
PC s možnosťou zápisu údaja, inkrementáciou, riadením výstupu a nulovaním,
je na obr. 2, spolu s opisom jeho správania sa.
ACC (accumulator) – slúži na uloženie medzivýsledku výpočtov, alebo
jedného z operandov.
MAR (memory address register) – uchováva adresu pamäťového miesta, do
ktorého sa bude zapisovať, alebo z ktorého sa bude čítať.
MBR (memory buffer register) – uchováva obsah bunky pamäti na danej
adrese, alebo dáta, ktoré sa majú zapísať do pamäti.
Registre MBR a MAR sú označované aj ako vyrovnávacie registre, pretože slúžia
ako medzistupeň medzi pamäťou a registrami počítača z dôvodu väčšej rýchlosti
registrových operácií v porovnaní s dobou prístupu do pamäti.
Registre vo všeobecnosti slúžia ako dočasné úložisko údajov. Z hľadiska koncepcie
sú registre podobné ako miesta v pamäti, rozdiel je, že fyzicky tvoria súčasť
procesora. Vďaka tomu umožňujú rýchlejšie čítanie a zápis údajov, ako je to pri
prístupe do pamäti, ktorá nie je na čipe. Register charakterizuje počet bitov, ktoré je
do neho možné zapísať. Proces čítania z registra neovplyvňuje jeho obsah, iba ho
skopíruje do cieľovej lokácie.
Počítače vo všeobecnosti obsahujú ľubovoľný počet registrov. Zväčša bývajú troch
typov: univerzálne, stavové a ukazovacie.
Zbernice
Sú využívané na prenos elektronických signálov (digitálnych informácií) medzi
jednotlivými časťami počítača. Fyzicky je to sada vodičov, ktoré paralelne prenášajú
signály. Používajú sa práve kvôli výhode jednorázového paralelného prenosu oproti
sériovému. Zbernice môžu byť jednosmerné a obojsmerné. Pri jednosmerných sa
prenos môže uskutočniť iba jedným smerom, napr. keď je jeden register vždy
zdrojový a druhý cieľový (prenos z PC do MAR po adresnej zbernici). Pri
obojsmerných je prenos údajov možný oboma smermi, ale nie súčasne. Príkladom je
dátová zbernica, kde môže nastať prenos z MBR aj do MBR.
Podľa druhu prenášaných údajov teda rozlišujeme v jednoduchom počítači tieto
druhy zberníc:
3
adresnú ( address bus)
dátovú (data bus)
riadiacu (control bus)
Môžeme ich ešte rozlišovať aj na
internú – prenos údajov medzi vnútornými registrami
externú – prenos údajov medzi hlavnou pamäťou
Pamäť
Program pozostávajúci z inštrukcií býva uložený v pamäti. Pre výber inštrukcie
počítač na adresnú zbernicu umiestni adresu pamäťového miesta a nastaví riadiaci
signál čítania RD. Obsah pamäťového miesta z danej adresy sa skopíruje na dátovú
zbernicu. Podobne je to pri zápise. Nastaví sa signál WR a údaje z dátovej zbernice
sa zapíšu do pamäti. Alternatívne k signálom RD a WR sa používa aj signál žiadosti
o prístup do pamäti (MREQ) a signál RW, ktorého hodnota rozhoduje, či sa vykoná
čítanie alebo zápis. Bolo už spomenuté, že prístup do pamäti reálne trvá dlhšie ako
vykonanie súvisiacich mikrooperácií. Preto sa používajú registre MAR a MBR ako
medzikrok prístupu do pamäti, aby boli na zberniciach nastavené vždy správne údaje.
-
Spracovanie inštrukcií
Vykonáva sa postupne v troch základných krokoch:
1) výber inštrukcie z pamäti (fetch)
2) dekódovanie inštrukcie (decoding)
3) vykonanie inštrukcie (execution) – ktoré pozostáva z
načítania operandov
vlastného výkonu operácie
zápisu výsledkov
4
Číslo Mikrooperácia Popis
1 ACC => MBR Presun celého obsahu ACC do MBR
2 MBR => ACC Presun celého obsahu MBR do ACC
3 PC => MAR Presun celého obsahu (adresy) z PC do MAR
4 IR.adr => PC Presun obsahu poľa adresy z IR do PC
5 IR => MAR Presun obsahu poľa adresy z IR do MAR
6 MBR => IR Presun celého obsahu MBR do IR
7 HALT Nastavenie preklápacieho obvodu na 1 (true)
8 READ MEM Prístup do pamäti - čítanie
9 WRITE MEM Prístup do pamäti - zápis
10 mADD Spočítanie obsahu ACC a MBR, výsledok do ACC
11 INCREMENT PC Zvýšenie obsahu PC o 1, vykonáva sa paralelne
12 TEST ACC Vráti logickú 1, ak obsah ACC = 0
13 NOT ACC Negácia obsahu ACC bit po bite
14 RSHIFT ACC Bitový posun obsahu ACC o jeden bit vpravo
15 DECODE Dekódovanie OP_CODE z IR
16 MBR.adr => MAR Presun obsahu adresových bitov z MBR do MAR
17 IR.adr => MBR Presun obsahu adresových bitov z IR do MBR
18 mMUL Vynásobenie obsahu ACC a MBR, výsledok do ACC
19 mDIV Vydelenie obsahu ACC s MBR, výsledok do ACC
20 LSHIFT ACC Bitový posun obsahu ACC o jeden bit vľavo
21 mAND Logický súčin obsahu ACC a MBR, výsledok do ACC
22 mOR Logický súčet obsahu ACC a MBR, výsledok do ACC
23 mXOR Exkl.log.súčet obsahu ACC a MBR, výsledok do ACC
24 CMP porovnanie obsahu ACC a MBR, výsledok do ACC
25 MBR.adr => PC Presun obsahu adresových bitov z MBR do PC
Mikrooperácie implementované v simulátore SimulAnt
Inštrukcia(adres.) Krok 1 2 3 4 5
HALT 7
LOAD (priame) 5 8 2
LOAD (nepriame) 5 8 16 8 2
STORE (priame) 5 1 9
STORE (nepriame) 5 8 16 1 9
ADD (bezprostredné) 17 10
ADD (priame) 5 8 10
ADD (nepriame) 5 8 16 8 10
JMP (priame) 4
JMP (nepriame) 5 8 25
JMPZ (priame) 12 4
JMPZ (nepriame) 12 5 8 25
ROR 14
NOT 13
CMP (bezprostredné) 17 24
5
CMP (priame) 5 8 24
CMP (nepriame) 5 8 16 8 24
MUL (bezprostredné) 17 18
MUL (priame) 5 8 18
MUL (nepriame) 5 8 16 8 18
DIV (bezprostredné) 17 19
DIV (priame) 5 8 19
DIV (nepriame) 5 8 16 8 19
ROL 20
AND (bezprostredné) 17 21
AND (priame) 5 8 21
AND (nepriame) 5 8 16 8 21
OR (bezprostredné) 17 22
OR (priame) 5 8 22
OR (nepriame) 5 8 16 8 22
XOR (bezprostredné) 17 23
XOR (priame) 5 8 23
XOR (nepriame) 5 8 16 8 23
Instruction FETCH* 3 8 6 11 15
Tabuľka postupností mikrooperácií pre jednotlivé inštrukcie
Formát inštrukcie pozostáva zo 16 bitov, rovnako, ako operandy. Ak si
označíme jednotlivé bity od 0 do 15 začínajúc zľava, ich význam je ako v tabuľke:
Bity Význam
[0] znamienko operandu v pamäti údajov
znamienko operandu v inštrukcii pri bezprostrednom adresovaní
[1-9] operand v inštrukcii pri bezprostrednom adresovaní
[1-15] operand v pamäti údajov
[0-9] adresa v inštrukcii
[10-11] adresovací režim inštrukcie
[12-15] operačný kód inštrukcie
Význam bitov v inštrukcii
Popis inštrukcií
Pomocou tabuľky inštrukcií som doimplementoval 11 inštrukcií, ktoré boli
vymenované tab.6:
JMP (jump) - vykonáva v programe nepodmienený skok, nastavením adresy
v PC na cieľovú adresu skoku.
6
JMPZ (jump-if-zero) - vykonáva podmienený skok. Podmienkou je, že
vyhodnotenie obsahu akumulátora ACC musí vrátiť TRUE (pravdivé) v prípade,
že je hodnota obsahu 0. Potom sa správa ako JMP. Ak je návratová hodnota
FALSE, pokračuje sa ďalšou inštrukciou, skok sa nevykoná.
ROR (rotate right) - pravý bitový posun. V tomto prípade sa vykonáva v rámci
binárnej reprezentácie čísla posunutie bit po bite doprava, bit najviac vpravo sa
nezachováva, na začiatok binárneho reťazca (najviac vľavo) sa pridá 0.
NOT (negation) - negácia bit po bite. Všetky výskyty 0 a 1 sa v binárnej
reprezentácii čísla nahradia za opačnú hodnotu.
CMP (compare) - porovnanie obsahu MBR vzhľadom na obsah ACC. Návratová
hodnota je 0 - ak sa obsahy rovnajú, (-1) - ak hodnota v ACC je menšia, 1 - ak
hodnota v ACC je väčšia
MUL (multiply) - vykoná násobenie hodnôt v ACC a MBR, výsledok uloží do ACC.
Ak dojde k pretečeniu, teda že hodnota výsledku sa nedá binárne zobraziť 15
bitmi a znamienkom, do akumulátora sa uloží len spodných 15 bitov výsledku,
spolu so znamienkom, zvyšné bity sa zahodia a simulátor bude signalizovať, že
došlo k pretečeniu.
DIV (divide) - vykoná celočíselné delenie hodnoty v ACC hodnotou v MBR,
výsledok uloží do ACC. Ak nastane delenie nulou, operácia sa nevykoná,
a hodnota v ACC zostáva pôvodná. Simulátor bude signalizovať delenie nulou
a reštartuje simuláciu.
ROL (rotate left) - ľavý bitový posun. V tomto prípade sa vykonáva v rámci
binárnej reprezentácie čísla posunutie bit po bite doľava, bit najviac vpravo sa
nastaví na 0, bit najviac vľavo sa nezachováva.
AND - vykoná logický súčin binárnej hodnoty v ACC s hodnotou v MBR,
výsledok uloží do ACC
OR - vykoná logický súčet binárnej hodnoty v ACC s hodnotou v MBR, výsledok
uloží do ACC
7
Používateľské prostredie a práca so simulátorom
Popis používateľského prostredia simulátora
Používateľské prostredie je tvorené hlavným dialógovým oknom aplikácie
a vedľajšími oknami, ktoré sa zobrazia po aktivovaní príslušného ovládacieho prvku
hlavného okna. Prvky v jednotlivých oknách sú označené menom, čiže by nemal byť
problém ich identifikovať.
Hlavné okno
Obsahuje schému počítača, ovládacie prvky a informačné okná.
Schému počítača tvoria:
Registre - v hornom boxe zobrazujú údaje v symbolickom/dekadickom tvare,
v dolnom boxe v binárnom tvare. Register IR má box pre symbolický tvar rozdelený
na časti pre operand a meno inštrukcie a box pre binárny tvar na časti pre operand,
adresovací režim a operačný kód.
- PC a MAR (šírka binárnej adresy)
- IR, MBR, ACC (šírka binárnej inštrukcie)
Riadiaca jednotka (Control unit) - zobrazuje postupnosť dekódovaných mikrooperácií,
alebo postupnosť pre fetch, aktuálne vykonávaná mikrooperácia býva vyznačená.
Pamäť (Memory) - horný box znázorňuje pamäť programu, dolný box znázorňuje
pamäť údajov. V oboch oknách sú 3 stĺpce: adresa, symbolický tvar a binárny tvar
(inštrukcií/údajov v pamäti).
Zbernice a ALU - sú vykreslené červenými čiarami. Pri aktivovaní počas simulácie sa
farba aktívnej zbernice alebo ALU zmení na zelenú a šípka na jednom z koncov
zbernice určuje smer prenosu. Pri aktivovaní sa vždy vyfarbí celá zbernica (dátová -
Data, adresná - Address, riadiaca - Control).
Informačné okná sú:
Okno operácií (Operation window) - zobrazuje operácie ALU
Okno informácií (Information window) - zobrazuje informácie o testovaní pamäti,
pretečení registrov a pod.
Ovládacie prvky sú:
Tlačidlá - sú umiestnené pozdĺž pravej strany hlavného okna.
- Help - otvorí nápovedu
- Open - načíta súbor s uloženým programom pre simulátor
8
- Save - uloží program, ktorý je práve v pamäti simulátora, do súboru
s príponou .ant
- Run - spustí jeden krok simulácie
- RunTo - spustí beh simulácie po označenú inštrukciu z pamäti, alebo celý
- Restart - reštartuje simuláciu, obsah pamäti zostáva ako na začiatku
- Reset - zruší celú simuláciu, vymaže obsah pamäti
- DEL (2x) - vymaže označenú položku z pamäti
Menu - sa nachádza v pravom hornom rohu hlavného okna. Okrem odkazov na
všetky spomenuté tlačidlá okrem DEL, obsahuje položku Instruction:
- New - otvorí dialógové okno pre definovanie novej inštrukcie
- Load - načíta používateľom vytvorenú inštrukciu zo súboru
- Save - uloží používateľom vytvorenú inštrukciu do súboru s príponou .anx
a Memory - Usage - otvorí dialógové okno nastavenia pamäti
Počiatočný stav okna po spustení:
PC - okno pre desiatkové zobrazenie: 0, binárne zobrazenie: 0000000000
ACC - okno pre desiatkové zobrazenie: 0, binárne zobrazenie: 0000000000000000
Control Unit - postupnosť mikrooperácií pre Fetch
Memory - všetky polia v oboch oknách sú prázdne (číslo poľa a reťazec znakov ‘-’)
Tlačidlá Run, RunTo a Restart nie sú momentálne funkčné. Ostatné tlačidlá sú
funkčné.
Okno na vloženie inštrukcie
Otvorí sa po dvojkliknutí na ľubovoľné pole pamäti programu. Ak pole nie je prázdne,
obsah okna sa inicializuje podľa jeho obsahu.
Instruction - padajúci zoznam, po kliknutí zobrazí dostupné inštrukcie. Výberom
jednej z nich sa aktivujú ostatné prvky okna
Addressing mode - obsahuje gombíky na určenie adresovacieho režimu (Immediate -
bezprostredný, Direct - priamy, Indirect - nepriamy). Sú aktívne/neaktívne podľa
typu zvolenej inštrukcie.
Address - slúži na vloženie adresy, ak je nastavený mód Direct alebo Indirect
Operand - slúži na vloženie operandu, ak je nastavený mód Immediate
Tri statické okná v dolnej časti zobrazujú binárny tvar vytváranej inštrukcie, v poradí:
operand, adresovací režim, operačný kód.
Tlačidlá - sa nachádzajú na spodnom okraji okna:
9
- OK - vloženie zvolenej inštrukcie do pamäti programu
- Cancel - zatvorenie okna bez uloženia zmien
- Reset - zrušenie nastavených volieb
Okno na vloženie operandu
Otvorí sa po dvojkliknutí na ľubovoľné pole pamäti údajov. Operand je možné zadať
ako celé desiatkové číslo, z rozsahu , alebo ako binárnu 16-bitovú
hodnotu. Po zaškrtnutí políčka Value is address sa predpokladá, že operand bude
adresou pre nepriamy adresovací režim.
Tlačidlá - sa nachádzajú na spodnom okraji okna:
- OK - vloženie zadaného operandu do pamäti údajov
- Cancel - zatvorenie okna bez uloženia zmien
Okno nastavenia pamäti
Otvorí sa po kliknutí na položku menu Memory > Usage. Do editovacieho boxu sa
načíta súčasné rozdelenie pamäti v percentách. Dá sa meniť s krokom 1, klikaním na
šípky na pravej strane, alebo priamym editovaním. Povolený rozsah hodnôt je
. Na ľavej strane okna sa zakaždým zobrazí aktuálne prislúchajúci počet
pamäťových miest a percentuálne rozdelenie.
Okno pre vytvorenie novej inštrukcie
Otvorí sa po kliknutí na položku menu Instruction > New. Na ľavej strane je
očíslovaný zoznam dostupných mikrooperácií, pravá strana slúži na definovanie
vlastností novej inštrukcie.
Instruction name - meno inštrukcie, vyžaduje sa, môže mať najviac 5 znakov.
Operand - špecifikuje, či inštrukcia bude pracovať s operandom. Po kliknutí sa
aktivujú ďalšie prvky, ktoré majú význam, iba ak je označená voľba operandu.
Access to data memory - špecifikuje, či inštrukcia má pristupovať do pamäti údajov.
[Immediate | Direct | Indirect] addressing mode - špecifikuje, či inštrukcia má daný
adresovací režim, aktivuje/deaktivuje box pre sekvenciu mikrooperácií
prislúchajúceho režimu
[Immediate | Direct | Indirect] mode operation sequence boxy - slúžia na
definovanie postupnosti mikrooperácií príslušného adresovacieho režimu. Ak nie je
10
aktivovaný žiadny režim, aktívny je box Direct. Postupnosť pozostáva z čísel
mikrooperácií podľa zoznamu na ľavej strane okna, oddelených čiarkou.
Tlačidlá - sa nachádzajú na spodnom okraji okna:
- OK - uloženie novej inštrukcie do tabuľky inštrukcií
- Cancel - zatvorenie okna bez uloženia zmien
Príprava simulácie
Pri opise postupu sa v zátvorkách nachádzajú príklady zadanej hodnoty.
Vloženie programu do pamäti
Je možné postupovať dvoma spôsobmi:
a) po jednotlivých inštrukciách a operandoch - vložením inštrukcií a operandov na
zvolené miesta v pamäti
b) načítaním programu zo súboru, do ktorého sme si ho predtým uložili. Je možné
vytvoriť program aj priamo do textového súboru a načítať ho, nakoľko však simulátor
nevykonáva kontrolu syntaxe, ani neobsahuje mechanizmus podobný kompilátoru,
tento spôsob sa neodporúča.
Vloženie inštrukcie
1) dvojkliknutím vyberieme pamäťové miesto z horného okna pamäti (programu),
kam chceme inštrukciu vložiť, otvorí sa dialóg pre vloženie inštrukcie, v ňom:
2) vyberieme inštrukciu, ktorú chceme vložiť (napr. ADD)
3) zvolíme jeden z dostupných adresovacích režimov (napr. Direct)
4) zadáme adresu do aktívneho okna adresy (napr. 257)
5) potvrdíme tlačidlom OK. Ak sú zadané vstupy správne, dialóg sa zatvorí
a inštrukcia sa zobrazí v pamäti programu. Ak nastala pri zadávaní vstupov
chyba, zobrazí sa správa o chybe.
Vloženie operandu
1) dvojkliknutím vyberieme pamäťové miesto z dolného okna pamäti (údajov),
kam chceme operand vložiť (napr. 257), otvorí sa dialóg pre vloženie operandu,
v ňom:
2) vyberieme formát, v ako chceme operand vložiť, kliknutím na gombík vľavo od
príslušného boxu - prednastavený je desiatkový (môžeme ponechať)
11
3) zadáme hodnotu operandu (napr. 5)
4) pole Value is address môžeme nechať nezaškrtnuté
5) potvrdíme tlačidlom OK. Ak sú zadané vstupy správne, dialóg sa zatvorí
a operand sa zobrazí v pamäti programu. Ak nastala pri zadávaní vstupov
chyba, zobrazí sa správa o chybe.
Po vložení všetkých požadovaných inštrukcií treba vložiť ešte inštrukciu HALT. Až
potom je možné pokračovať so spustením simulácie. Predpokladá sa, že na adresách,
na ktoré inštrukcie odkazujú boli vložené operandy.
Uloženie hotového programu do súboru
1) stlačením tlačidla Save v pravom hornom rohu okna, zobrazí sa štandardný
dialóg pre uloženie súboru
2) treba zadať názov súboru a stlačiť Save. Vytvorenému súboru sa priradí
prípona .ant. Ak je pamäť prázdna, zobrazí sa hlásenie o chybe
Načítanie hotového programu zo súboru
Ak chceme program načítať zo súboru, je potrebné, aby sme si predtým nejaký
program uložili, takže prvý krát je potrebné vytvoriť program vložením jednotlivých
inštrukcií a potom ho uložiť. Potom ho načítame zo súboru:
1) stlačením tlačidla Open v pravom hornom rohu okna, zobrazí sa štandardný
dialóg pre výber súboru na otvorenie
2) vyznačíme zvolený súbor a otvoríme ho stlačením Open. Ak bol súbor uložený
správne, mal by sa program, ktorý obsahuje, zobraziť v okne pamäti
Nastavenie pamäti
Ak je simulácia spustená, je potrebné ju najprv zastaviť tlačidlom Restart alebo
zrušiť tlačidlom Reset. Po zmene nastavenia pamäti sa jej aktuálny obsah vymaže.
1) klikneme na položku menu Memory > Usage, otvorí sa dialógové okno
nastavenia pamäti
2) zmeníme aktuálnu percentuálnu hodnotu v boxe podľa potreby, použitím šípok,
alebo priamym editovaním
3) potvrdíme tlačidlom OK, pamäť sa nainicializuje na zvolené rozdelenie
12
Definovanie novej inštrukcie
Ak je simulácia spustená, je potrebné ju najprv zastaviť tlačidlom Restart alebo
zrušiť tlačidlom Reset.
Vytvorenie novej inštrukcie
1) klikneme na položku menu Instruction > New, otvorí sa dialógové okno
vytvorenia inštrukcie
2) zadáme meno inštrukcie (napr. XYZ)
3) ak chceme, aby inštrukcia mala operand, zaškrtneme políčko Operand
(zaškrtneme ho), po jeho zaškrtnutí sa automaticky zaškrtne aj Access to data
memory. Ak nechceme, aby inštrukcia pristupovala do pamäti údajov, môžeme
políčko odškrtnúť. (môžeme ponechať)
4) zaškrtneme požadované adresovacie režimy (napr. Direct a Indirect)
5) do aktívnych boxov pre režimy zadáme postupnosti mikrooperácií, podľa ich
zoznamu na ľavej strane (reťazec /bez zátvoriek/ napr. pre Direct:
/5,8,2,13,14/ a pre Indirect: /5,8,16,8,13,14/)
6) potvrdíme tlačidlom OK, inštrukcia sa uloží do tabuľky inštrukcií pod kódom 15.
7) správne vytvorenie môžeme overiť vložením novej inštrukcie do pamäti podľa
postupu „Vloženie inštrukcie“
Uloženie novej inštrukcie do súboru
1) klikneme na položku menu Instruction > Save, zobrazí sa štandardný dialóg
pre uloženie súboru
2) treba zadať názov súboru a stlačiť Save. Vytvorenému súboru sa priradí
prípona .anx. Ak používateľ ešte nevytvoril žiadnu inštrukciu, zobrazí sa
hlásenie o chybe
Načítanie novej inštrukcie zo súboru
Ak chceme inštrukciu načítať zo súboru, je potrebné, aby sme si predtým nejakú
inštrukciu uložili, takže najprv je potrebné vytvoriť inštrukciu podľa postupu
„Vytvorenie novej inštrukcie“. Potom ju načítame zo súboru:
1) klikneme na položku menu Instruction > Load, zobrazí sa štandardný dialóg
pre výber súboru na otvorenie
13
2) vyznačíme zvolený súbor a otvoríme ho stlačením Open. Ak bol súbor uložený
správne, môžeme načítanú inštrukciu pridať do programu podľa postupu
„Vloženie inštrukcie“
B.4 Spustenie simulácie
Simuláciu môžeme spustiť dvoma spôsobmi:
- tlačidlom Run
- označením inštrukcie v pamäti programu a tlačidlom RunTo
Predpokladajme, že sme do pamäti načítali program „test1.ant“ z adresára \tst. Je to
jednoduchý program pre oboznámenie sa so simulátorom. Obsah pamäti bude
vyzerať nasledovne:
Obsah pamäti pred spustením programu
Adresa Inštrukcia Operand/konštanta
0 LOAD [256]
1 ADD [257]
2 STORE [258]
3 HALT
256 -4
257 12
258
Spustíme program pomocou Run.
1) Aktuálne sa vykonáva sekvencia Fetch: Na základe toho sa obsah registra PC
pošle do registra MAR a zobrazí sa v okne pre MAR. V okne Control Unit sa
vysvieti text „PC -> MAR“, ktorý reprezentuje tento prenos. Hlavička PC je
vyfarbená oranžovou farbou a hlavička MAR zelenou, čo zvýrazňuje, ktorý
register je zdrojový, a ktorý cieľový. Adresná zbernica sa zvýrazní zelenou
farbou a šípka ukazuje smer prenosu po nej.
2) Pri ďalšom stlačení Run sa podľa adresy v MAR vyberie obsah príslušného poľa
pamäti, ktoré sa vyznačí modrou farbou a zobrazí sa v MBR. Všimnime si aj
teraz farebné označenie hlavičiek registrov zapojených do prenosu, aktívne
zbernice pripojené k pamäti a smer ich prenosu.
3) Ďalším stlačením Run sa obsah MBR prenesie do IR, kde sa zobrazí názov
inštrukcie, adresovací režim a operand v oddelených oknách. Paralelne s tým
sa vykoná inkrementovanie PC. V tomto prípade je aktívna dátová zbernica.
4) Posledným stlačením Run v rámci sekvencie Fetch sa dekóduje inštrukcia v IR,
čo je symbolizované prenosom po riadiacej zbernici (Control) a v okne Control
14
Unit sa zobrazí nová postupnosť mikroinštrukcií pre jej vykonanie. Postup pri
ďalšom vykonávaní inštrukcií je analogický.
5) Po vykonaní všetkých inštrukcií sa zobrazí správa o úspešnom skončení
simulácie. Stav pamäti by sa mal zmeniť iba na adrese 258, kam sa zapísal
výsledok:
Obsah pamäti po skončení programu
Adresa Inštrukcia Operand/konštanta
0 LOAD [256]
1 ADD [257]
2 STORE [258]
3 HALT
256 -4
257 12
258 8
Spustenie simulácie spôsobí zároveň aktivovanie tlačidla Restart
a deaktivovanie tlačidiel DEL. Niektoré ďalšie možnosti menu budú počas behu
simulácie tiež zamedzené, ich spustenie vyvolá informáciu o bežiacej simulácii.
Tlačidlo Restart je možné použiť po spustení simulácie na jej opätovné začatie
s programom, ktorý je práve v pamäti. Stlačením tohto tlačidla sa inicializuje celý
simulátor okrem pamäti, ktorá ostáva naplnená programom. Okrem toho sa vymaže
aktuálny súbor s výstupným záznamom a nahradí sa novým prázdnym.
Tlačidlo Reset - slúži na úplne zrušenie simulácie aj s obsahom pamäti. Je potrebné
po jeho stlačení vložiť program nanovo. Súbor s výstupným záznamom sa nemaže,
len sa doňho poznačí, že nastal Reset a uzavrie sa.
15
Overenie priebehu a výsledkov simulácie
Na overenie priebehu a výsledkov simulácie slúži súbor „logfileX.txt“, kde X je
poradové číslo. Presné meno log-súboru sa objaví v informačnom okne po spustení
simulácie. Tento súbor s výstupným záznamom môžeme nájsť v podadresári \logs.
Pre náš jednoduchý príklad bol vytvorený takýto záznam, z ktorého je vidieť obsah
registrov a pamäti po každom kroku simulácie:
***Simulation started***
MEMORY:
Instructions on addresses: 0|1|2|3|
Operands on addresses: 256(-4)|257(12)|
REGISTERS:
PC: 0
MAR: 0
MBR: 0
ACC: 0
IR: 0
-------------------
Instruction LOAD fetched from address 0
REGISTERS:
PC: 1
MAR: 0
MBR: LOAD [256]
ACC: 0
IR: LOAD [256]
>>Instruction executed!>Instruction executed!>Instruction executed!>Instruction executed!<<
MEMORY(check for update...):
Operands on addresses: 256(-4)|257(12)|258(8)|
REGISTERS:
PC: 4
MAR: 3
MBR: HALT
ACC: 8
IR: HALT
**Simulation finished!**
17