Vaje - Stroj SIC/XE izvajalnik ukazov

Vaje - Stroj SIC/XE izvajalnik ukazov

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:

  • notImplemented(String mnemonic)
    • Ni ravno težava stroja, bolj težava programerja :)
  • invalidOpcode(int opcode)
    • Izvajalnik je naletel na operacijsko kodo ukaza, ki ni veljavna.
  • invalidAddressing()
    • Neveljavno naslavljanje.

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

Nalaganje enega bajta iz naslova PC

Napišite metodo

  • int fetch()

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

Izvajalnik

Napiši metodo

  • void execute()

ki dekodira ukaz in morebitne operande z naslova PC in 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 opcode ukaza, morebitni operand, zadnja pa še bita ni, da lahko ugotovimo vrsto naslavljanja.

Simulacija procesorjeve ure

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

  • start() - zažene oz. nadaljuje avtomatsko izvajanje;
  • stop() - zaustavi avtomatsko izvajanje;
  • isRunning() - pove ali je avtomatsko izvajanje trenutno v teku.

Timer nastavite na npr. 1 milisekundo. Razmislite koliko kHz pravzaprav to predstavlja.

b) Pohitritev izvajalnika.

Da pohitrite izvajanje, lahko uporabite naslednji preprosti trik. Ob vsaki aktivaciji časovnika, izvedete npr. 10 ukazov namesto enega.

c) Podprite branje in nastavljanje hitrosti z metodama

  • getSpeed()
  • setSpeed(int kHz)
Last modified: Tuesday, 20 November 2012, 6:04 PM