Virtuální procesor 2: Porovnání verzí
Bez shrnutí editace |
Bez shrnutí editace |
||
| Řádek 1: | Řádek 1: | ||
Cílem je navrhnout abstraktní virtuální počítač, který by bylo možné jednoduše implementovat v dostupných jazycích a assemblerech. |
|||
Důležitý prvek návrhu je použití abstraktních dynamických čísel bez horního omezení. Návrh by měl využívat principů lokality a relativních pozic, aby byly používány především malé číselné hodnoty. |
|||
Samotná implementace může používat pro menší stroje pevnou velikost buňky a registrů jako např. 32-bit integer a může při požadavcích na větší čísla vyhlásit chybu. Nebo může pro větší čísla použít dynamickou paměťovou reprezentaci čísel pomocí různých implementací typu BigInteger. |
|||
* Adresa paměti: dynamické celá čísla |
* Adresa paměti: dynamické celá čísla |
||
* Velikost paměťové buňky: dynamické celé číslo |
* Velikost paměťové buňky: dynamické celé číslo |
||
Verze z 20. 12. 2014, 21:21
Cílem je navrhnout abstraktní virtuální počítač, který by bylo možné jednoduše implementovat v dostupných jazycích a assemblerech. Důležitý prvek návrhu je použití abstraktních dynamických čísel bez horního omezení. Návrh by měl využívat principů lokality a relativních pozic, aby byly používány především malé číselné hodnoty. Samotná implementace může používat pro menší stroje pevnou velikost buňky a registrů jako např. 32-bit integer a může při požadavcích na větší čísla vyhlásit chybu. Nebo může pro větší čísla použít dynamickou paměťovou reprezentaci čísel pomocí různých implementací typu BigInteger.
- Adresa paměti: dynamické celá čísla
- Velikost paměťové buňky: dynamické celé číslo
- Sdílená paměť kódu a dat
Značení parametrů instrukcí
- Pn - číslo parametru (parameter)
- En - entita (entity)
- An - oblast (area)
Virtuální paměťové oblasti
| Index | Zkratka | Význam |
|---|---|---|
| 0 | M | Operační paměť |
| 1 | I | I/O brány |
| 2 | R | Uživatelské registry |
| 3 | S | Systémové registry |
| 4 | P | Paměť programu (pokud je oddělená od operační) |
Systémové registry (oblast 3)
| Index | Význam |
|---|---|
| 0 | Program Counter (PC) |
Mikroinstrukce[editovat]
Symboly [] značí nepovinné parametry
| Opkód | Název | Význam |
|---|---|---|
| NOP | No Operation | Žádná operace |
| HALT | Program halt | Zastaví vykonávání programu |
| CP p0, p1 | Copy | Kopíruje data ze zdrojové buňky do cílové p0 <= p1 |
| ADD p0, [p1, [p2]] | Addition | Součet. Varianty: p0 <= p0 + 1, p0 <= p0 + p1, p0 <= p2 + p1 |
| SUB p0, [p1, [p2]] | Addition | Odečet. Varianty: p0 <= p0 - 1, p0 <= p0 - p1, p0 <= p2 - p1 |
| MUL p0, p1, [p2] | Multiplication | Násobení. Varianty: p0 <= p0 * p1, p0 <= p2 * p1 |
| DIV p0, p1, [p2], [p3] | Division | Dělení se zbytkem. Varianty: p0 <= p0 / p1, p0 <= p2 / p1, p0 p3(zbytek) <= p0 / p1, p0 p3(zbytek) <= p2 / p1 |
| PCLR | Parameters Clear | Nuluje přednastavení všech parametrů, vybírá první parametr. |
| PSEL n | Parameter Select | Vybírá aktivní parametr |
| PSET n | Parameter Set | Nastavuje hodnotu vybraného parametru |
| PIND n | Parameter Indirection | Nastavuje parametr jako ukazatel do oblasti. Při opakovaném použití se cílová hodnota použije jako adresa do další paměti. |
| SKIP n | Skip Next Instruction | Přeskočí vykonání další instrukce pokud hodnota parametru je nulová |
- Bitové operace
Nejsou přímo podporovány díky dynamické povaze paměťových buněk. Posuny lze provádět v rámci hodnot buněk přímo pomocí operací DIV, MUL mocnin 2. Případně převést buňku na více menších dle bitových hodnot a provádět posuny přes více buněk.
- Instrukce skoků
Jsou realizovány pomocí přímé kopie do registru PC. Absolutní skok: CP 0^S, LABEL Relativní skok: ADD 0^S, $ - LABEL
- Zásobníkové operace
Pro účely registru SP(Stack Pointer) lze zvolit kterýkoliv uživatelský registr např. (SP = 16^R) Operace PUSH n: CP SP^M, n SUB SP
Operace POP n: ADD SP CP n, SP^M