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
 
(Není zobrazena jedna mezilehlá verze od stejného uživatele.)
Řádek 7: Řádek 7:
=Datové typy=
=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
** 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
* 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, ...
{| class="wikitable"
* Šíř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, ...

{| class="wikitable sortable"
! Index !! Název !! Zápis !! Poznámka
! Index !! Název !! Zápis !! Poznámka
|-
|-
Řádek 35: Řádek 36:
| 6 || Load from indexed memory || LDMI Rx, [Ry + Rz] ||
| 6 || Load from indexed memory || LDMI Rx, [Ry + Rz] ||
|-
|-
| 6 || Store to indexed memory || STMI [Rx + Ry], Rz ||
| 7 || Store to indexed memory || STMI [Rx + Ry], Rz ||
|-
|-
| 8 || Load system register || LDS Rx, Sx ||
| 8 || Load system register || LDS Rx, Sx ||
Řádek 43: Řádek 44:
| 10 || Exchange || XCHG Rx, Ry || při různých šířkách?
| 10 || Exchange || XCHG Rx, Ry || při různých šířkách?
|-
|-
| 11 || Input || IN Rx, [Ry] ||
| 11 || Input || IN Rx, [Ry] ||
|-
|-
| 12 || Output || OUT [Rx], Ry ||
| 12 || Output || OUT [Rx], Ry ||
|-
|-
| 13 || Xor || XOR Rx, Ry ||
| 13 || Xor || XOR Rx, Ry ||
Řádek 99: Řádek 100:
| 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 113:
|-
|-
| 45 || Interrupt || INT Rx ||
| 45 || Interrupt || INT Rx ||
|-
| 46 || Rotate left || RL Rx, Ry ||
|-
| 47 || Rotate right || RR Rx, Ry ||
|-
| 48 || Input indexed || IN Rx, [Ry + Rz] ||
|-
| 49 || Output indexed || OUT [Rx + Ry], Rz ||
|}
|}

=Systémové registry=

{| class="wikitable sortable"
! 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í=

{| class="wikitable sortable"
! Index !! Název !! Význam
|-
| 0 || Reset || Také první start procesoru
|-
| 1 || Neplatná instrukce ||
|}

=I/O porty=

Kategorie zařízení
{| class="wikitable sortable"
! Index !! Zařízení !! Význam
|-
| 0 || Mapování ||
|-
| 1 || Procesor ||
|-
| 2 || Klávesnice ||
|-
| 3 || Myš ||
|-
| 4 || Obrazovka ||
|-
| 5 || Sériová linka ||
|-
| 6 || Zvukový generátor ||
|-
| 7 || Pevný disk ||
|}


Funkce zařízení:
{| class="wikitable sortable"
! Kategorie !! Index !! Název !! Význam
|-
| Mapování || 1 || Mapper.GetDeviceAreaStart || zjistit počáteční port zařízení
|-
| Mapování || 2 || Mapper.GetDeviceAreaSize || zjistit počet funkcí
|-
| Mapování || 3 || Mapper.GetDeviceCount || zjistit počet zařízení
|-
| Mapování || 4 || Mapper.IsConnected || zjistit stav připojení
|-
| Mapování || 5 || Mapper.GetDeviceCategory || zjistit kategorii zařízení
|-
| Mapování || 6 || Mapper.GetDeviceIndex || zjistit index zařízení pokud je více stejné kategorie
|-
| Procesor || 1 || CPU.GetCoreCount || zjistit počet jader
|-
| Procesor || 2 || CPU.GetFreq || zjistit kmitočet
|-
| Klávesnice || 1 || Keyboard.ReadKey || Přečíst klávesu z bufferu
|-
| Myš || 1 || Mouse.GetPosX || Přečíst pozici X myši
|-
| Myš || 2 || Mouse.GetPosY || Přečíst pozici Y myši
|-
| Myš || 3 || Mouse.GetButtonState || Přečíst stav tlačítek
|-
| Obrazovka || 1 || Screen.GetSizeX || Přečíst počet pixelů X
|-
| Obrazovka || 2 || Screen.GetSizeY || Přečíst počet pixelů Y
|-
| Obrazovka || 3 || Screen.GetColorDepth || Přečíst hloubku barev
|-
| Obrazovka || 4 || Screen.SetColorDepth || Nastavit hloubku barev
|}


=Problémy=

* Minimum nutných instrukcí?
* Rozšiřující instrukce pro urychlení - operaci lze provést pomocí základními
* více paměťových oblastí (více datových, oddělená programová)
* chráněný režim, úrovně oprávnění
* virtuální paměť, stránkování


[[Kategorie:Programování]]
[[Kategorie:Programování]]

Aktuální verze z 23. 1. 2016, 15:45

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

  • 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 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]
7 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
48 Input indexed IN Rx, [Ry + Rz]
49 Output indexed OUT [Rx + Ry], Rz

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

I/O porty

Kategorie zařízení

Index Zařízení Význam
0 Mapování
1 Procesor
2 Klávesnice
3 Myš
4 Obrazovka
5 Sériová linka
6 Zvukový generátor
7 Pevný disk


Funkce zařízení:

Kategorie Index Název Význam
Mapování 1 Mapper.GetDeviceAreaStart zjistit počáteční port zařízení
Mapování 2 Mapper.GetDeviceAreaSize zjistit počet funkcí
Mapování 3 Mapper.GetDeviceCount zjistit počet zařízení
Mapování 4 Mapper.IsConnected zjistit stav připojení
Mapování 5 Mapper.GetDeviceCategory zjistit kategorii zařízení
Mapování 6 Mapper.GetDeviceIndex zjistit index zařízení pokud je více stejné kategorie
Procesor 1 CPU.GetCoreCount zjistit počet jader
Procesor 2 CPU.GetFreq zjistit kmitočet
Klávesnice 1 Keyboard.ReadKey Přečíst klávesu z bufferu
Myš 1 Mouse.GetPosX Přečíst pozici X myši
Myš 2 Mouse.GetPosY Přečíst pozici Y myši
Myš 3 Mouse.GetButtonState Přečíst stav tlačítek
Obrazovka 1 Screen.GetSizeX Přečíst počet pixelů X
Obrazovka 2 Screen.GetSizeY Přečíst počet pixelů Y
Obrazovka 3 Screen.GetColorDepth Přečíst hloubku barev
Obrazovka 4 Screen.SetColorDepth Nastavit hloubku barev


Problémy

  • Minimum nutných instrukcí?
  • Rozšiřující instrukce pro urychlení - operaci lze provést pomocí základními
  • více paměťových oblastí (více datových, oddělená programová)
  • chráněný režim, úrovně oprávnění
  • virtuální paměť, stránkování