Obravnava težav

Pri izvajanju ukazov lahko pride do različnih težav. Napišite metode (v razredu Machine), ki obravnavajo morebitne težave. V primeru težave naj se na standardni izhod za napake izpiše ustrezno obvestilo.

Primeri metod:

// Ni ravno težava stroja, bolj težava programerja. :)
void notImplemented(String mnemonic)

// Izvajalnik je naletel na operacijsko kodo ukaza, ki ni veljavna.
void invalidOpcode(int opcode)

// Neveljavno naslavljanje.
void invalidAddressing()

Po potrebi boste podobne metod kasneje še dodali za obravno drugih težav.

Izvajalnik

Napišite metodo

int fetch()

ki naloži in vrne en bajt z naslova v PC ter ga poveča za ena.

Napišite metodo

void execute()

ki dekodira ukaz in morebitne operande z naslova v PC ter ga izvede.

Potrebovali bomo metode za izvajalnike ukazov posameznih formatov:

boolean execF1(int opcode)
boolean execF2(int opcode, int operand)
boolean execSICF3F4(int opcode, int ni, int operand)

Vse tri metode prejmejo operacijsko kodo (angl. opcode) ukaza, morebitni operand, zadnja pa še bita ni, da lahko ugotovimo vrsto naslavljanja.

Simulacija procesorjeve ure

Dodajte podpora za simulacijo procesorjeve ure, t.j. za samodejno izvajanje ukazov. Pri tem lahko uporabite Javin razred Timer. Napišite metode

// Zažene oz. nadaljuje samodejno izvajanje.
void start() 

// Zaustavi samodejno izvajanje.
void stop()

// Pove, ali je samodejno izvajanje trenutno v teku.
boolean isRunning()

Timer nastavite na npr. eno milisekundo. Razmislite, koliko kHz to pravzaprav predstavlja. Da pohitrite izvajanje, lahko uporabite naslednji preprosti trik.

Ob vsaki aktivaciji časovnika, izvedete npr. deset ukazov namesto enega. Podprite branje in nastavljanje hitrosti z metodama

void getSpeed()
void setSpeed(int kHz)
Последнее изменение: вторник, 16 ноября 2021, 11:07