Virtualní procesor 4: Porovnání verzí
Skočit na navigaci
Skočit na vyhledávání
Smazaný obsah Přidaný obsah
Bez shrnutí editace |
Bez shrnutí editace |
||
| Řádek 7: | Řádek 7: | ||
=Datové typy= |
=Datové typy= |
||
| ⚫ | |||
| ⚫ | |||
* Datové typy |
* Datové typy |
||
** Logická (bitová) hodnota |
** Logická (bitová) hodnota |
||
** Celé číslo |
** Celé číslo |
||
** Záporné číslo |
** Záporné číslo ? |
||
** Desetinné číslo |
** Desetinné číslo ? |
||
=Instrukční sada= |
=Instrukční sada= |
||
Rx - registr, kódováno pomocí indexu a šířky |
Rx - registr, kódováno pomocí indexu a šířky |
||
| ⚫ | |||
| ⚫ | |||
{| class="wikitable" |
{| class="wikitable" |
||
! Index !! Název !! Zápis !! Poznámka |
! Index !! Název !! Zápis !! Poznámka |
||
| Řádek 99: | Řádek 101: | ||
| 38 || Shift right || SHR Rx, Ry || |
| 38 || Shift right || SHR Rx, Ry || |
||
|- |
|- |
||
| 39 || Set bit || SET Rx, Ry || |
| 39 || Set bit || SET Rx, Ry || Jako: OR Rx, (1 shl Ry) |
||
|- |
|- |
||
| 40 || Reset bit || RES Rx, Ry || |
| 40 || Reset bit || RES Rx, Ry || Jako: AND Rx, not (1 shl Ry) |
||
|- |
|- |
||
| 41 || Test bit || BIT Rx, Rx, Ry || |
| 41 || Test bit || BIT Rx, Rx, Ry || |
||
| Řádek 112: | Řádek 114: | ||
|- |
|- |
||
| 45 || Interrupt || INT Rx || |
| 45 || Interrupt || INT Rx || |
||
|- |
|||
| 46 || Rotate left || RL Rx, Ry || |
|||
|- |
|||
| 47 || Rotate right || RR Rx, Ry || |
|||
|} |
|||
=Systémové registry= |
|||
{| |
|||
! Index !! Název !! Zkratka !! Význam !! Výchozí hodnota |
|||
|- |
|||
| 0 || Instruction Pointer || IP || Aktuální pozice v programu, roste nahoru || 0 |
|||
|- |
|||
| 1 || Stack Pointer || SP || Vrchol zásobníku, roste dolů || 0 |
|||
|- |
|||
| 2 || Interrupt Vector || IV || Počátek tabulky vektorů přerušení || 0 |
|||
|- |
|||
| 3 || Interrupt Vector Item Size || IVS || Velikost položky v tabulce přerušení || 8 |
|||
|} |
|||
=Tabulka přerušení= |
|||
{| |
|||
! Index !! Název !! Význam |
|||
|- |
|||
| 0 || Reset || Také první start procesoru |
|||
|- |
|||
| 1 || Neplatná instrukce || |
|||
|} |
|} |
||
Verze z 23. 1. 2016, 09:42
Motivace[editovat]
- Obecná instrukční sada, aby mohl jeden program běžet na mnoha různých procesorech a systémech.
- Instrukční sada podporující rovnocenně různé datové šířky. Aby pro malé hodnoty se použil jen nejmenší vhodný typ a ne největší nativní. (např. procenta = bajt) Cílem je umožnit efektivní překlad a běh na starších 8-bit a 16-bit počítačích, ale také na novějších 128-bit nebo 256-bit.
- Instrukční sada by měla být jednoduchá a co nejmenší, aby bylo možné snadno sestavit interpretr a překladač.
Datové typy[editovat]
- Datové typy
- Logická (bitová) hodnota
- Celé číslo
- Záporné číslo ?
- Desetinné číslo ?
Instrukční sada[editovat]
Rx - registr, kódováno pomocí indexu a šířky
- Index registru: číslo kódované jako 4-bit dynamické, 0 - konstanta, 1 - R1, 2 - R2, 3 - R3, 4 - R4, 5 - R5, 6 - R6, 7 - R7, ...
- Šířka registru: číslo kódované jako 4-bit dynamické, 0 - 1-bit, 1 - 8-bit, 2 - 16-bit, 3 - 32-bit, 4 - 64-bit, 5 - 128-bit, 6 - 256-bit, 7 - 512-bit, ...
| Index | Název | Zápis | Poznámka |
|---|---|---|---|
| 0 | No operation | NOP | |
| 1 | Halt | HALT | |
| 2 | Clear | CLR Rx | |
| 3 | Copy | COPY Rx, Ry | |
| 4 | Load from memory | LDM Rx, [Ry] | |
| 5 | Store to memory | STM [Rx], Ry | |
| 6 | Load from indexed memory | LDMI Rx, [Ry + Rz] | |
| 6 | Store to indexed memory | STMI [Rx + Ry], Rz | |
| 8 | Load system register | LDS Rx, Sx | |
| 9 | Store system register | STS Sx, Rx | |
| 10 | Exchange | XCHG Rx, Ry | při různých šířkách? |
| 11 | Input | IN Rx, [Ry] | |
| 12 | Output | OUT [Rx], Ry | |
| 13 | Xor | XOR Rx, Ry | |
| 14 | And | AND Rx, Ry | |
| 15 | Or | OR Rx, Ry | |
| 16 | Not | NOT Rx | Negace všech bitů podobně jako XOR Rx, $ffff |
| 17 | Increment | INC Rx | |
| 18 | Decrement | DEC Rx | |
| 19 | Jump | JP Rx | |
| 20 | Jump if not zero | JPNZ Rx, Ry | |
| 21 | Jump relative | JR Rx | |
| 22 | Jump relative if not zero | JRNZ Rx, Ry | |
| 23 | Call subroutine | CALL Rx | |
| 24 | Call subroutine if not zero | CALLNZ Rx, Ry | |
| 25 | Call subroutine relative | CALLR Rx | |
| 26 | Call subroutine relative if not zero | CALLRNZ flag,Rx | |
| 27 | Return from subroutine | RET | |
| 28 | Return from subroutine if not zero | RETNZ Rx | |
| 29 | Push to stack | PUSH Rx | |
| 30 | Pop from stack | POP Rx | |
| 31 | Addition | ADD Rx, Ry | |
| 32 | Addition with carry | ADDC Rx, Ry, Rz | Bit z Rz se přičte a nastaví se do něj carry výsledku |
| 33 | Substraction | SUB Rx, Ry | |
| 34 | Substraction with carry | SUBC Rx, Ry, Rz | Bit z Rz se přičte a nastaví se do něj carry výsledku |
| 35 | Multiplication | MUL Rx, Ry | |
| 36 | Division | DIV Rx, Ry | |
| 37 | Shift left | SHL Rx, Ry | |
| 38 | Shift right | SHR Rx, Ry | |
| 39 | Set bit | SET Rx, Ry | Jako: OR Rx, (1 shl Ry) |
| 40 | Reset bit | RES Rx, Ry | Jako: AND Rx, not (1 shl Ry) |
| 41 | Test bit | BIT Rx, Rx, Ry | |
| 42 | Assign bit | ASB Rx, Ry, Rx | |
| 43 | Enable interrupt | EI | |
| 44 | Disable interrupt | DI | |
| 45 | Interrupt | INT Rx | |
| 46 | Rotate left | RL Rx, Ry | |
| 47 | Rotate right | RR Rx, Ry |
Systémové registry[editovat]
| Index | Název | Zkratka | Význam | Výchozí hodnota |
|---|---|---|---|---|
| 0 | Instruction Pointer | IP | Aktuální pozice v programu, roste nahoru | 0 |
| 1 | Stack Pointer | SP | Vrchol zásobníku, roste dolů | 0 |
| 2 | Interrupt Vector | IV | Počátek tabulky vektorů přerušení | 0 |
| 3 | Interrupt Vector Item Size | IVS | Velikost položky v tabulce přerušení | 8 |
Tabulka přerušení[editovat]
| Index | Název | Význam |
|---|---|---|
| 0 | Reset | Také první start procesoru |
| 1 | Neplatná instrukce |