Virtualní procesor 4
Motivace
- 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
- 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, ...
- Datové typy
- Logická (bitová) hodnota
- Celé číslo
- Záporné číslo
- Desetinné číslo
Instrukční sada
Rx - registr, kódováno pomocí indexu a šířky
Název | Zápis | Poznámka |
---|---|---|
Copy | COPY Rx, Ry | |
Load from memory | LDM Rx, [Ry] | |
Store to memory | STM [Rx], Ry | |
Load from indexed memory | LDMI Rx, [Ry + Rz] | |
Store to indexed memory | STMI [Rx + Ry], Rz | |
Load system register | LDS Rx, Sx | |
Store system register | STS Sx, Rx | |
Clear | CLR Rx | |
Exchange | XCHG Rx, Ry | při různých šířkách? |
Input | IN Rx, [Ry] | |
Output | OUT [Rx], Ry | |
Xor | XOR Rx, Ry | |
And | AND Rx, Ry | |
Or | OR Rx, Ry | |
Not | NOT Rx | Negace všech bitů podobně jako XOR Rx, $ffff |
No operation | NOP | |
Halt | HALT | |
Increment | INC Rx | |
Decrement | DEC Rx | |
Jump | JP Rx | |
Jump if not zero | JPNZ Rx, Ry | |
Jump relative | JR Rx | |
Jump relative if not zero | JRNZ Rx, Ry | |
Call subroutine | CALL Rx | |
Call subroutine if not zero | CALLNZ Rx, Ry | |
Call subroutine relative | CALLR Rx | |
Call subroutine relative if not zero | CALLRNZ flag,Rx | |
Return from subroutine | RET | |
Return from subroutine if not zero | RETNZ Rx | |
Push to stack | PUSH Rx | |
Pop from stack | POP Rx | |
Addition | ADD Rx, Ry | |
Addition with carry | ADDC Rx, Ry, Rz | Bit z Rz se přičte a nastaví se do něj carry výsledku |
Substraction | SUB Rx, Ry | |
Substraction with carry | SUBC Rx, Ry, Rz | Bit z Rz se přičte a nastaví se do něj carry výsledku |
Multiplication | MUL Rx, Ry | |
Division | DIV Rx, Ry | |
Shift left | SHL Rx, Ry | |
Shift right | SHR Rx, Ry | |
Compare | CMP Rx, Ry | |
Set bit | SET Rx, Ry | |
Reset bit | RES Rx, Ry | |
Test bit | BIT Rx, Rx, Ry | |
Assign bit | ASB Rx, Ry, Rx |