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 1: Řádek 1:
=Motivace=
* Index registru: číslo kódované jako 4-bit dynamické, 0 - constant, 1 - R1, 2 - R2, 3 - R3, ...

* Šířka registru: číslo kódované jako 4-bit dynamické, 0 - 8-bit, 1 - 16-bit, 2 - 32-bit, 3 - 64-bit, 4 - 128-bit, ...
* 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
* Datové typy
** Logická (bitová) hodnota
** Celé číslo
** Celé číslo
** Záporné číslo
** Záporné číslo
** Desetinné číslo
** Desetinné číslo

=Instrukční sada=


Rx - registr, kódováno pomocí indexu a šířky
Rx - registr, kódováno pomocí indexu a šířky
Řádek 15: Řádek 26:
|-
|-
| Store to memory || STM [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 ||
| Load system register || LDS Rx, Sx ||
Řádek 33: Řádek 48:
|-
|-
| Or || OR Rx, Ry ||
| Or || OR Rx, Ry ||
|-
| Not || NOT Rx || Negace všech bitů podobně jako XOR Rx, $ffff
|-
|-
| No operation || NOP ||
| No operation || NOP ||
|-
| Halt || HALT ||
|-
|-
| Increment || INC Rx ||
| Increment || INC Rx ||
Řádek 42: Řádek 61:
| Jump || JP Rx ||
| Jump || JP Rx ||
|-
|-
| Jump with flag || JPF flag,Rx ||
| Jump if not zero || JPNZ Rx, Ry ||
|-
|-
| Jump relative || JR Rx ||
| Jump relative || JR Rx ||
|-
|-
| Jump relative with flag || JRF flag, Rx ||
| Jump relative if not zero || JRNZ Rx, Ry ||
|-
|-
| Call subroutine || CALL Rx ||
| Call subroutine || CALL Rx ||
|-
|-
| Call subroutine with flag || CALLF flag, Rx ||
| Call subroutine if not zero || CALLNZ Rx, Ry ||
|-
|-
| Call subroutine relative || CALLR Rx ||
| Call subroutine relative || CALLR Rx ||
|-
|-
| Call subroutine relative with flag || CALLRF flag,Rx ||
| Call subroutine relative if not zero || CALLRNZ flag,Rx ||
|-
|-
| Return from subroutine || RET ||
| Return from subroutine || RET ||
|-
|-
| Return from subroutine with flag || RET flag ||
| Return from subroutine if not zero || RETNZ Rx ||
|-
|-
| Push to stack || PUSH Rx ||
| Push to stack || PUSH Rx ||
Řádek 64: Řádek 83:
| Pop from stack || POP Rx ||
| Pop from stack || POP Rx ||
|-
|-
| Addition || ADD Rx, Ry ||
| 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 || 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 ||
| Multiplication || MUL Rx, Ry ||
Řádek 82: Řádek 105:
| Reset bit || RES Rx, Ry ||
| Reset bit || RES Rx, Ry ||
|-
|-
| Test bit || BIT Rx, Ry ||
| Test bit || BIT Rx, Rx, Ry ||
|-
| Assign bit || ASB Rx, Ry, Rx ||
|}
|}



Verze z 23. 1. 2016, 10:11

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