MIC-1: razlika između inačica
mNema sažetka uređivanja |
|||
| Nije prikazano 11 međuinačica | |||
| Redak 3: | Redak 3: | ||
==Povijest i razvoj== | ==Povijest i razvoj== | ||
Razvoj mikroarhitekture MIC‑1 usko je povezan s nastankom udžbenika Structured Computer Organization američkog računalnog znanstvenika [[Andrewa S. Tanenbauma]]. Tijekom 1970‑ih i ranih 1980‑ih Tanenbaum je uočio da se studenti računalnih znanosti često susreću s velikim jazom između apstraktnih programskih koncepata i stvarnog funkcioniranja procesora na razini mikroinstrukcija. Kako bi premostio taj jaz, osmislio je jednostavan, ali potpuno funkcionalan model mikroprogramiranog procesora — MIC‑1. | Razvoj mikroarhitekture MIC‑1 usko je povezan s nastankom udžbenika '''Structured Computer Organization''' američkog računalnog znanstvenika [[Andrewa S. Tanenbauma]]. Tijekom 1970‑ih i ranih 1980‑ih Tanenbaum je uočio da se studenti računalnih znanosti često susreću s velikim jazom između apstraktnih programskih koncepata i stvarnog funkcioniranja procesora na razini mikroinstrukcija. Kako bi premostio taj jaz, osmislio je jednostavan, ali potpuno funkcionalan model mikroprogramiranog procesora — MIC‑1. | ||
=== Prvo izdanje=== | === Prvo izdanje=== | ||
| Redak 13: | Redak 13: | ||
Kako je nastava arhitekture računala evoluirala, MIC‑1 je dobio i svoje proširenje — MIC‑2, model s dvostrukom sabirnicom koji omogućuje paralelniji tok podataka. Paralelno s time Tanenbaum je razvio i [[IJVM]], pojednostavljeni instrukcijski skup inspiriran [[Java Virtual Machine]]om, kako bi studenti mogli vidjeti kako se virtualne instrukcije prevode u mikroinstrukcije MIC‑1 procesora. | Kako je nastava arhitekture računala evoluirala, MIC‑1 je dobio i svoje proširenje — MIC‑2, model s dvostrukom sabirnicom koji omogućuje paralelniji tok podataka. Paralelno s time Tanenbaum je razvio i [[IJVM]], pojednostavljeni instrukcijski skup inspiriran [[Java Virtual Machine]]om, kako bi studenti mogli vidjeti kako se virtualne instrukcije prevode u mikroinstrukcije MIC‑1 procesora. | ||
Tijekom 1990‑ih i 2000‑ih MIC‑1 je postao standardni dio sveučilišnih kolegija diljem svijeta. Brojni simulacijski alati, vizualizatori mikroinstrukcija i studentski projekti dodatno su učvrstili njegov status kao jednog od najuspješnijih didaktičkih modela u povijesti računalne arhitekture. Unatoč jednostavnosti, MIC‑1 i danas služi kao referentni primjer mikroprogramiranog procesora, posebno u kontekstu usporedbe s modernim RISC arhitekturama koje se oslanjaju na hardverski upravljane kontrolne jedinice. | Tijekom 1990‑ih i 2000‑ih MIC‑1 je postao standardni dio sveučilišnih kolegija diljem svijeta. Brojni simulacijski alati, vizualizatori mikroinstrukcija i studentski projekti dodatno su učvrstili njegov status kao jednog od najuspješnijih didaktičkih modela u povijesti računalne arhitekture. Unatoč jednostavnosti, MIC‑1 i danas služi kao referentni primjer mikroprogramiranog procesora, posebno u kontekstu usporedbe s modernim [[RISC]] arhitekturama koje se oslanjaju na hardverski upravljane kontrolne jedinice. | ||
==Opis== | ==Opis== | ||
| Redak 21: | Redak 20: | ||
==Arhitektura== | ==Arhitektura== | ||
MIC‑1 se sastoji od nekoliko ključnih komponenti: | MIC‑1 se sastoji od nekoliko ključnih komponenti<ref>https://docs.racket-lang.org/mic1/index.html</ref>: | ||
* [[Sabirnica]]] (bus) — jedinstvena interna sabirnica preko koje se prenose podaci između registara i ALU‑a. | * [[Sabirnica]]] (bus) — jedinstvena interna sabirnica preko koje se prenose podaci između registara i ALU‑a. | ||
* Registri — uključuju PC, MAR, MDR, IR, H | * Registri — ukupno 16 x 16 bitnih registara uključuju PC, MAR, MDR, IR, H, 5 x registara s fiksnim vrijednostima te skup od 6 općih registara (A,B,C,D,E,F). | ||
* ALU — jednostka za aritmetičko‑logičke operacije, s podrškom za osnovne operacije poput zbrajanja, oduzimanja i logičkih funkcija. | * ALU — jednostka za aritmetičko‑logičke operacije, s podrškom za osnovne operacije poput zbrajanja, oduzimanja i logičkih funkcija. | ||
* Upravljačka jedinica — mikroprogramirana; mikroinstrukcije se čuvaju u kontrolnoj memoriji i određuju tok podataka i aktivaciju kontrolnih signala. | * Upravljačka jedinica — mikroprogramirana; mikroinstrukcije se čuvaju u kontrolnoj memoriji i određuju tok podataka i aktivaciju kontrolnih signala. | ||
| Redak 38: | Redak 37: | ||
* adrese sljedeće mikroinstrukcije (sekvenciranje) | * adrese sljedeće mikroinstrukcije (sekvenciranje) | ||
Ovaj format omogućuje studentima da jasno vide kako se složene instrukcije strojnog jezika razlažu na niz mikrooperacija. | Ovaj format omogućuje studentima da jasno vide kako se složene instrukcije strojnog jezika razlažu na niz mikrooperacija. Za mikroinstrukcije Tanenbaum je razvio posebni assemblerski jezik MAL, s kojim se mogao uređivati mikroprogram za MIC-1. U sebi je sadržavao sve osnovne narebe s kojim se moglo upravljati s mikrosekvencerom.<ref>https://docs.racket-lang.org/mic1/index.html#%28part._mal%29</ref> | ||
==Instrukcijski skup== | ==Instrukcijski skup== | ||
{| class="wikitable sortable" | |||
|+ '''Instrukcijski skup MIC‑1 (kategorizirano i obojano)''' | |||
! Mnemonic | |||
! Encoding | |||
! Instruction | |||
! Semantics | |||
! Kategorija | |||
|- | |||
| style="background:#d1fae5" | LODD ‹Arg› | |||
| 0000xxxxxxxxxxxx | |||
| Load Direct | |||
| AC := Mem[X] | |||
| style="background:#d1fae5" | Memorija | |||
|- | |||
| style="background:#d1fae5" | STOD ‹Arg› | |||
| 0001xxxxxxxxxxxx | |||
| Store Direct | |||
| Mem[X] := AC | |||
| style="background:#d1fae5" | Memorija | |||
|- | |||
| style="background:#bfdbfe" | ADDD ‹Arg› | |||
| 0010xxxxxxxxxxxx | |||
| Add Direct | |||
| AC := AC + Mem[X] | |||
| style="background:#bfdbfe" | Aritmetika | |||
|- | |||
| style="background:#bfdbfe" | SUBD ‹Arg› | |||
| 0011xxxxxxxxxxxx | |||
| Subtract Direct | |||
| AC := AC - Mem[X] | |||
| style="background:#bfdbfe" | Aritmetika | |||
|- | |||
| style="background:#fef9c3" | JPOS ‹Arg› | |||
| 0100xxxxxxxxxxxx | |||
| Jump on non-negative | |||
| If AC ≥ 0, PC := X | |||
| style="background:#fef9c3" | Skok | |||
|- | |||
| style="background:#fef9c3" | JZER ‹Arg› | |||
| 0101xxxxxxxxxxxx | |||
| Jump on zero | |||
| If AC = 0, PC := X | |||
| style="background:#fef9c3" | Skok | |||
|- | |||
| style="background:#fef9c3" | JUMP ‹Arg› | |||
| 0110xxxxxxxxxxxx | |||
| Jump | |||
| PC := X | |||
| style="background:#fef9c3" | Skok | |||
|- | |||
| style="background:#bfdbfe" | LOCO ‹Arg› | |||
| 0111xxxxxxxxxxxx | |||
| Load Constant | |||
| AC := X | |||
| style="background:#bfdbfe" | Aritmetika | |||
|- | |||
| style="background:#d1fae5" | LODL ‹Arg› | |||
| 1000xxxxxxxxxxxx | |||
| Load Local | |||
| AC := Mem[SP + X] | |||
| style="background:#d1fae5" | Memorija | |||
|- | |||
| style="background:#d1fae5" | STOL ‹Arg› | |||
| 1001xxxxxxxxxxxx | |||
| Store Local | |||
| Mem[SP + X] := AC | |||
| style="background:#d1fae5" | Memorija | |||
|- | |||
| style="background:#bfdbfe" | ADDL ‹Arg› | |||
| 1010xxxxxxxxxxxx | |||
| Add Local | |||
| AC := AC + Mem[SP + X] | |||
| style="background:#bfdbfe" | Aritmetika | |||
|- | |||
| style="background:#bfdbfe" | SUBL ‹Arg› | |||
| 1011xxxxxxxxxxxx | |||
| Subtract Local | |||
| AC := AC - Mem[SP + X] | |||
| style="background:#bfdbfe" | Aritmetika | |||
|- | |||
| style="background:#fef9c3" | JNEG ‹Arg› | |||
| 1100xxxxxxxxxxxx | |||
| Jump on negative | |||
| If AC < 0, PC := X | |||
| style="background:#fef9c3" | Skok | |||
|- | |||
| style="background:#fef9c3" | JNZE ‹Arg› | |||
| 1101xxxxxxxxxxxx | |||
| Jump unless zero | |||
| If AC ≠ 0, PC := X | |||
| style="background:#fef9c3" | Skok | |||
|- | |||
| style="background:#fecaca" | CALL ‹Arg› | |||
| 1110xxxxxxxxxxxx | |||
| Call | |||
| SP := SP - 1; Mem[SP] := PC; PC := X | |||
| style="background:#fecaca" | Kontrola | |||
|- | |||
| style="background:#fed7aa" | PSHI | |||
| 1111000000000000 | |||
| Push Indirect | |||
| SP := SP - 1; Mem[SP] := Mem[AC] | |||
| style="background:#fed7aa" | Stog | |||
|- | |||
| style="background:#fed7aa" | POPI | |||
| 1111001000000000 | |||
| Pop Indirect | |||
| Mem[AC] := Mem[SP]; SP := SP + 1 | |||
| style="background:#fed7aa" | Stog | |||
|- | |||
| style="background:#fed7aa" | PUSH | |||
| 1111010000000000 | |||
| Push | |||
| SP := SP - 1; Mem[SP] := AC | |||
| style="background:#fed7aa" | Stog | |||
|- | |||
| style="background:#fed7aa" | POP | |||
| 1111011000000000 | |||
| Pop | |||
| AC := Mem[SP]; SP := SP + 1 | |||
| style="background:#fed7aa" | Stog | |||
|- | |||
| style="background:#fecaca" | RETN | |||
| 1111100000000000 | |||
| Return | |||
| PC := Mem[SP]; SP := SP + 1 | |||
| style="background:#fecaca" | Kontrola | |||
|- | |||
| style="background:#bfdbfe" | SWAP | |||
| 1111101000000000 | |||
| Swap AC & SP | |||
| AC :=: SP | |||
| style="background:#bfdbfe" | Aritmetika | |||
|- | |||
| style="background:#fed7aa" | INSP ‹Arg› | |||
| 11111100yyyyyyyy | |||
| Increment SP | |||
| SP := SP + Y | |||
| style="background:#fed7aa" | Stog | |||
|- | |||
| style="background:#fed7aa" | DESP ‹Arg› | |||
| 11111110yyyyyyyy | |||
| Decrement SP | |||
| SP := SP - Y | |||
| style="background:#fed7aa" | Stog | |||
|- | |||
| style="background:#fecaca" | HALT | |||
| 1111111100000000 | |||
| Halt | |||
| Halt processor | |||
| style="background:#fecaca" | Kontrola | |||
|} | |||
MIC‑1 se često koristi zajedno s jednostavnim modelom strojnog jezika nazvanim IJVM (Integer Java Virtual Machine). IJVM je podskup JVM‑a, prilagođen za obrazovne svrhe, a MIC‑1 služi kao njegova hardverska implementacija. | MIC‑1 se često koristi zajedno s jednostavnim modelom strojnog jezika nazvanim IJVM (Integer Java Virtual Machine). IJVM je podskup JVM‑a, prilagođen za obrazovne svrhe, a MIC‑1 služi kao njegova hardverska implementacija. | ||
Instrukcije poput IADD, ILOAD, ISTORE, GOTO i INVOKEVIRTUAL demonstriraju kako se visokonivojske operacije prevode u mikroinstrukcije. | Instrukcije poput IADD, ILOAD, ISTORE, GOTO i INVOKEVIRTUAL demonstriraju kako se visokonivojske operacije prevode u mikroinstrukcije. | ||
==Vanjske poveznice== | |||
* [https://www.cs.oberlin.edu/~rms/mic1/ Simulator za MIC-1] | |||
* [https://www.dmi.unict.it/barba/Architetture.html/SIMULATORS/emuIJVM/ Simulator MIC-1 napisano u jeziku Java]] | |||
==Izvori== | ==Izvori== | ||
{{izvori}} | {{izvori}} | ||
[[Kategorija:Mikroprocesori]] | [[Kategorija:Mikroprocesori]] | ||
Posljednja izmjena od 13. srpanj 2026. u 11:25
MIC‑1 je mikroarhitektura koju je Andrew S. Tanenbaum osmislio i predstavio u svojoj knjizi Structured Computer Organization (prvo izdanje 1976., kasnije brojna proširena izdanja).
Povijest i razvoj
Razvoj mikroarhitekture MIC‑1 usko je povezan s nastankom udžbenika Structured Computer Organization američkog računalnog znanstvenika Andrewa S. Tanenbauma. Tijekom 1970‑ih i ranih 1980‑ih Tanenbaum je uočio da se studenti računalnih znanosti često susreću s velikim jazom između apstraktnih programskih koncepata i stvarnog funkcioniranja procesora na razini mikroinstrukcija. Kako bi premostio taj jaz, osmislio je jednostavan, ali potpuno funkcionalan model mikroprogramiranog procesora — MIC‑1.
Prvo izdanje
Prvo izdanje knjige, objavljeno 1976., predstavilo je MIC‑1 kao temeljni obrazovni alat za razumijevanje mikroprogramiranja. U kasnijim izdanjima Tanenbaum je model dodatno usavršavao, ali je zadržao njegovu izvorno zamišljenu jednostavnost: jedinstvena sabirnica, mali skup registara, osnovni ALU i mikroprogramska upravljačka jedinica. Time je MIC‑1 postao idealan za demonstraciju kako se instrukcije višeg nivoa razlažu u mikrooperacije.
MIC-2
Kako je nastava arhitekture računala evoluirala, MIC‑1 je dobio i svoje proširenje — MIC‑2, model s dvostrukom sabirnicom koji omogućuje paralelniji tok podataka. Paralelno s time Tanenbaum je razvio i IJVM, pojednostavljeni instrukcijski skup inspiriran Java Virtual Machineom, kako bi studenti mogli vidjeti kako se virtualne instrukcije prevode u mikroinstrukcije MIC‑1 procesora.
Tijekom 1990‑ih i 2000‑ih MIC‑1 je postao standardni dio sveučilišnih kolegija diljem svijeta. Brojni simulacijski alati, vizualizatori mikroinstrukcija i studentski projekti dodatno su učvrstili njegov status kao jednog od najuspješnijih didaktičkih modela u povijesti računalne arhitekture. Unatoč jednostavnosti, MIC‑1 i danas služi kao referentni primjer mikroprogramiranog procesora, posebno u kontekstu usporedbe s modernim RISC arhitekturama koje se oslanjaju na hardverski upravljane kontrolne jedinice.
Opis
MIC‑1 je jednostavan, mikroprogramirani procesor čija je glavna svrha didaktička: omogućiti studentima da prate kako se instrukcije višeg nivoa razlažu u mikrooperacije i kako se one izvršavaju nad internim registrima i sabirnicama.
Arhitektura
MIC‑1 se sastoji od nekoliko ključnih komponenti[1]:
- Sabirnica] (bus) — jedinstvena interna sabirnica preko koje se prenose podaci između registara i ALU‑a.
- Registri — ukupno 16 x 16 bitnih registara uključuju PC, MAR, MDR, IR, H, 5 x registara s fiksnim vrijednostima te skup od 6 općih registara (A,B,C,D,E,F).
- ALU — jednostka za aritmetičko‑logičke operacije, s podrškom za osnovne operacije poput zbrajanja, oduzimanja i logičkih funkcija.
- Upravljačka jedinica — mikroprogramirana; mikroinstrukcije se čuvaju u kontrolnoj memoriji i određuju tok podataka i aktivaciju kontrolnih signala.
- Memorija — modelirana kao jednostavna RAM jedinica dostupna preko MAR/MDR sklopova.
Mikroinstrukcije
Svaka mikroinstrukcija MIC‑1 procesora sastoji se od:
- polja za odabir izvora podataka na sabirnici
- polja za odabir odredišnog registra
- ALU kontrolnih bitova
- kontrolnih signala za memoriju
- adrese sljedeće mikroinstrukcije (sekvenciranje)
Ovaj format omogućuje studentima da jasno vide kako se složene instrukcije strojnog jezika razlažu na niz mikrooperacija. Za mikroinstrukcije Tanenbaum je razvio posebni assemblerski jezik MAL, s kojim se mogao uređivati mikroprogram za MIC-1. U sebi je sadržavao sve osnovne narebe s kojim se moglo upravljati s mikrosekvencerom.[2]
Instrukcijski skup
| Mnemonic | Encoding | Instruction | Semantics | Kategorija |
|---|---|---|---|---|
| LODD ‹Arg› | 0000xxxxxxxxxxxx | Load Direct | AC := Mem[X] | Memorija |
| STOD ‹Arg› | 0001xxxxxxxxxxxx | Store Direct | Mem[X] := AC | Memorija |
| ADDD ‹Arg› | 0010xxxxxxxxxxxx | Add Direct | AC := AC + Mem[X] | Aritmetika |
| SUBD ‹Arg› | 0011xxxxxxxxxxxx | Subtract Direct | AC := AC - Mem[X] | Aritmetika |
| JPOS ‹Arg› | 0100xxxxxxxxxxxx | Jump on non-negative | If AC ≥ 0, PC := X | Skok |
| JZER ‹Arg› | 0101xxxxxxxxxxxx | Jump on zero | If AC = 0, PC := X | Skok |
| JUMP ‹Arg› | 0110xxxxxxxxxxxx | Jump | PC := X | Skok |
| LOCO ‹Arg› | 0111xxxxxxxxxxxx | Load Constant | AC := X | Aritmetika |
| LODL ‹Arg› | 1000xxxxxxxxxxxx | Load Local | AC := Mem[SP + X] | Memorija |
| STOL ‹Arg› | 1001xxxxxxxxxxxx | Store Local | Mem[SP + X] := AC | Memorija |
| ADDL ‹Arg› | 1010xxxxxxxxxxxx | Add Local | AC := AC + Mem[SP + X] | Aritmetika |
| SUBL ‹Arg› | 1011xxxxxxxxxxxx | Subtract Local | AC := AC - Mem[SP + X] | Aritmetika |
| JNEG ‹Arg› | 1100xxxxxxxxxxxx | Jump on negative | If AC < 0, PC := X | Skok |
| JNZE ‹Arg› | 1101xxxxxxxxxxxx | Jump unless zero | If AC ≠ 0, PC := X | Skok |
| CALL ‹Arg› | 1110xxxxxxxxxxxx | Call | SP := SP - 1; Mem[SP] := PC; PC := X | Kontrola |
| PSHI | 1111000000000000 | Push Indirect | SP := SP - 1; Mem[SP] := Mem[AC] | Stog |
| POPI | 1111001000000000 | Pop Indirect | Mem[AC] := Mem[SP]; SP := SP + 1 | Stog |
| PUSH | 1111010000000000 | Push | SP := SP - 1; Mem[SP] := AC | Stog |
| POP | 1111011000000000 | Pop | AC := Mem[SP]; SP := SP + 1 | Stog |
| RETN | 1111100000000000 | Return | PC := Mem[SP]; SP := SP + 1 | Kontrola |
| SWAP | 1111101000000000 | Swap AC & SP | AC :=: SP | Aritmetika |
| INSP ‹Arg› | 11111100yyyyyyyy | Increment SP | SP := SP + Y | Stog |
| DESP ‹Arg› | 11111110yyyyyyyy | Decrement SP | SP := SP - Y | Stog |
| HALT | 1111111100000000 | Halt | Halt processor | Kontrola |
MIC‑1 se često koristi zajedno s jednostavnim modelom strojnog jezika nazvanim IJVM (Integer Java Virtual Machine). IJVM je podskup JVM‑a, prilagođen za obrazovne svrhe, a MIC‑1 služi kao njegova hardverska implementacija.
Instrukcije poput IADD, ILOAD, ISTORE, GOTO i INVOKEVIRTUAL demonstriraju kako se visokonivojske operacije prevode u mikroinstrukcije.