Virtuální procesor 2: Porovnání verzí
Skočit na navigaci
Skočit na vyhledávání
(Založena nová stránka: Značení parametrů instrukcí *Pn - číslo parametru (parameter) *En - entita (entity) *An - oblast (area) Virtuální paměťové oblasti {| class="wikitable" ! I…) |
Bez shrnutí editace |
||
Řádek 1: | Řádek 1: | ||
* Adresa paměti: dynamické celá čísla |
|||
* Velikost paměťové buňky: dynamické celé číslo |
|||
* Sdílená paměť kódu a dat |
|||
Řádek 8: | Řádek 11: | ||
Virtuální paměťové oblasti |
Virtuální paměťové oblasti |
||
{| class="wikitable" |
{| class="wikitable" |
||
! Index !! Význam |
! Index !! Zkratka !! Význam |
||
|- |
|- |
||
| 0 || |
| 0 || M || Operační paměť |
||
|- |
|- |
||
| 1 || |
| 1 || I || I/O brány |
||
|- |
|- |
||
| 2 || |
| 2 || R || Uživatelské registry |
||
|- |
|- |
||
| 3 || |
| 3 || S || Systémové registry |
||
|- |
|- |
||
| 4 || P || Paměť programu (pokud je oddělená od operační) |
|||
| 4 || Registry |
|||
⚫ | |||
| 5 || I/O |
|||
⚫ | |||
| 6 || Zásobník |
|||
|} |
|} |
||
Systémové registry (oblast 3) |
|||
Entity |
|||
{| class="wikitable" |
{| class="wikitable" |
||
! Index !! Význam |
! Index !! Význam |
||
|- |
|- |
||
| 0 || Program Counter (PC) |
| 0 || Program Counter (PC) |
||
|} |
|||
⚫ | |||
Symboly [] značí nepovinné parametry |
|||
{| class="wikitable" |
|||
! Opkód !! Název !! Význam |
|||
|- |
|- |
||
| NOP || No Operation || Žádná operace |
|||
| 1 || Entity Area Pointer (ERP) |
|||
|- |
|- |
||
| HALT || Program halt || Zastaví vykonávání programu |
|||
| 2 || Entity Address Pointer (EAP) |
|||
|- |
|- |
||
| CP p0, p1 || Copy || Kopíruje data ze zdrojové buňky do cílové p0 <= p1 |
|||
| 3 || Stack Pointer (SP) |
|||
|- |
|- |
||
| ADD p0, [p1, [p2]] || Addition || Součet. Varianty: p0 <= p0 + 1, p0 <= p0 + p1, p0 <= p2 + p1 |
|||
| 4 || |
|||
|- |
|- |
||
| SUB p0, [p1, [p2]] || Addition || Odečet. Varianty: p0 <= p0 - 1, p0 <= p0 - p1, p0 <= p2 - p1 |
|||
| 5 || |
|||
⚫ | |||
| 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. |
|||
==PUSH== |
|||
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ů |
|||
<pre> |
|||
Jsou realizovány pomocí přímé kopie do registru PC. |
|||
⚫ | |||
Absolutní skok: CP 0^S, LABEL |
|||
LDC EAP, SP |
|||
Relativní skok: ADD 0^S, $ - LABEL |
|||
INC EAP |
|||
* Zásobníkové operace |
|||
</pre> |
|||
Pro účely registru SP(Stack Pointer) lze zvolit kterýkoliv uživatelský registr např. (SP = 16^R) |
|||
Operace PUSH n: |
|||
==POP== |
|||
⚫ | |||
SUB SP |
|||
<pre> |
|||
LDC EAP, SP |
|||
DEC EAP |
|||
⚫ | |||
</pre> |
|||
Operace POP n: |
|||
==JMP== |
|||
ADD SP |
|||
⚫ | |||
<pre> |
|||
LDC EAP, PC |
|||
LD EAP, P0 |
|||
</pre> |
|||
[[Kategorie:Programování]] |
[[Kategorie:Programování]] |
Verze z 20. 12. 2014, 20:18
- 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
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