Virtualní procesor 4: Porovnání verzí

Z ZděchovNET
Skočit na navigaci Skočit na vyhledávání
Bez shrnutí editace
Bez shrnutí editace
Řádek 19: Řádek 19:
Rx - registr, kódováno pomocí indexu a šířky
Rx - registr, kódováno pomocí indexu a šířky
{| class="wikitable"
{| class="wikitable"
! Název !! Zápis !! Poznámka
! Index !! Název !! Zápis !! Poznámka
|-
|-
| Copy || COPY Rx, Ry ||
| 0 || No operation || NOP ||
|-
|-
| Load from memory || LDM Rx, [Ry] ||
| 1 || Halt || HALT ||
|-
|-
| Store to memory || STM [Rx], Ry ||
| 2 || Clear || CLR Rx ||
|-
|-
| Load from indexed memory || LDMI Rx, [Ry + Rz] ||
| 3 || Copy || COPY Rx, Ry ||
|-
|-
| Store to indexed memory || STMI [Rx + Ry], Rz ||
| 4 || Load from memory || LDM Rx, [Ry] ||
|-
|-
| Load system register || LDS Rx, Sx ||
| 5 || Store to memory || STM [Rx], Ry ||
|-
|-
| Store system register || STS Sx, Rx ||
| 6 || Load from indexed memory || LDMI Rx, [Ry + Rz] ||
|-
|-
| Clear || CLR Rx ||
| 6 || Store to indexed memory || STMI [Rx + Ry], Rz ||
|-
|-
| Exchange || XCHG Rx, Ry || při různých šířkách?
| 8 || Load system register || LDS Rx, Sx ||
|-
|-
| Input || IN Rx, [Ry] ||
| 9 || Store system register || STS Sx, Rx ||
|-
|-
| Output || OUT [Rx], Ry ||
| 10 || Exchange || XCHG Rx, Ry || při různých šířkách?
|-
|-
| Xor || XOR Rx, Ry ||
| 11 || Input || IN Rx, [Ry] ||
|-
|-
| And || AND Rx, Ry ||
| 12 || Output || OUT [Rx], Ry ||
|-
| 13 || Xor || XOR Rx, Ry ||
|-
| 14 || And || AND Rx, Ry ||
|-
|-
| Or || OR Rx, Ry ||
| 15 || Or || OR Rx, Ry ||
|-
|-
| Not || NOT Rx || Negace všech bitů podobně jako XOR Rx, $ffff
| 16 || Not || NOT Rx || Negace všech bitů podobně jako XOR Rx, $ffff
|-
|-
| No operation || NOP ||
| 17 || Increment || INC Rx ||
|-
|-
| Halt || HALT ||
| 18 || Decrement || DEC Rx ||
|-
|-
| Increment || INC Rx ||
| 19 || Jump || JP Rx ||
|-
|-
| Decrement || DEC Rx ||
| 20 || Jump if not zero || JPNZ Rx, Ry ||
|-
|-
| Jump || JP Rx ||
| 21 || Jump relative || JR Rx ||
|-
|-
| Jump if not zero || JPNZ Rx, Ry ||
| 22 || Jump relative if not zero || JRNZ Rx, Ry ||
|-
|-
| Jump relative || JR Rx ||
| 23 || Call subroutine || CALL Rx ||
|-
|-
| Jump relative if not zero || JRNZ Rx, Ry ||
| 24 || Call subroutine if not zero || CALLNZ Rx, Ry ||
|-
|-
| Call subroutine || CALL Rx ||
| 25 || Call subroutine relative || CALLR Rx ||
|-
|-
| Call subroutine if not zero || CALLNZ Rx, Ry ||
| 26 || Call subroutine relative if not zero || CALLRNZ flag,Rx ||
|-
|-
| 27 || Return from subroutine || RET ||
| Call subroutine relative || CALLR Rx ||
|-
|-
| Call subroutine relative if not zero || CALLRNZ flag,Rx ||
| 28 || Return from subroutine if not zero || RETNZ Rx ||
|-
|-
| Return from subroutine || RET ||
| 29 || Push to stack || PUSH Rx ||
|-
|-
| Return from subroutine if not zero || RETNZ Rx ||
| 30 || Pop from stack || POP Rx ||
|-
| Push to stack || PUSH Rx ||
|-
| Pop from stack || POP Rx ||
|-
|-
| Addition || ADD Rx, Ry ||
| 31 || 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
| 32 || 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 ||
| 33 || 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
| 34 || 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 ||
| 35 || Multiplication || MUL Rx, Ry ||
|-
|-
| Division || DIV Rx, Ry ||
| 36 || Division || DIV Rx, Ry ||
|-
|-
| Shift left || SHL Rx, Ry ||
| 37 || Shift left || SHL Rx, Ry ||
|-
|-
| Shift right || SHR Rx, Ry ||
| 38 || Shift right || SHR Rx, Ry ||
|-
| Compare || CMP Rx, Ry ||
|-
|-
| Set bit || SET Rx, Ry ||
| 39 || Set bit || SET Rx, Ry ||
|-
| 40 || Reset bit || RES Rx, Ry ||
|-
| 41 || Test bit || BIT Rx, Rx, Ry ||
|-
| 42 || Assign bit || ASB Rx, Ry, Rx ||
|-
|-
| Reset bit || RES Rx, Ry ||
| 43 || Enable interrupt || EI ||
|-
|-
| Test bit || BIT Rx, Rx, Ry ||
| 44 || Disable interrupt || DI ||
|-
|-
| Assign bit || ASB Rx, Ry, Rx ||
| 45 || Interrupt || INT Rx ||
|}
|}



Verze z 23. 1. 2016, 10:17

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

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
40 Reset bit RES Rx, 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