Virtuální procesor: Porovnání verzí
Skočit na navigaci
Skočit na vyhledávání
(Založena nová stránka: ==Koncept== * Je použit lineárně adresovatelný paměťový prostor, každý buňka je velikosti Bajt * U všech operací, kde je to žádoucí, jsou podporovány bl…) |
Bez shrnutí editace |
||
Řádek 9: | Řádek 9: | ||
* Aritmetické |
* Aritmetické |
||
** ADD DEST, OP1, OP2 |
|||
ADD |
|||
** SUB DEST, OP1, OP2 |
|||
SUB |
|||
** MUL DEST, OP1, OP2 |
|||
MUL |
|||
** DIV DEST, OP1, OP2 |
|||
DIV |
|||
** MOD DEST, OP1, OP2 |
|||
MOD |
|||
* Logické |
* Logické |
||
* Bitové |
* Bitové |
||
** SHL DEST, SOURCE |
|||
SHL |
|||
** SHR DEST, SOURCE |
|||
SHR |
|||
** OR DEST, OP1, OP2 |
|||
OR |
|||
** AND DEST, OP1, OP2 |
|||
AND |
|||
** XOR DEST, OP1, OP2 |
|||
XOR |
|||
* Řízení běhu |
* Řízení běhu |
||
NOP - žádná operace |
** NOP - žádná operace |
||
** JP ADDR |
|||
JP |
|||
** JR ADDR |
|||
* Zásobník |
* Zásobník |
||
registr SP |
registr SP |
||
PUSH - vloží data na zásobník |
** PUSH SOURCE - vloží data na zásobník |
||
POP - načte data ze zásobníku |
** POP DEST - načte data ze zásobníku |
||
CALL |
** CALL |
||
RET |
** RET |
||
* Přesuny |
* Přesuny |
||
COPY - kopíruje data |
** COPY DEST, SOURCE - kopíruje data |
||
** EX OP1, OP2 - vymění data |
|||
** CMP OP1, OP2 - porovnání bloků |
|||
CMP |
|||
** REV DEST, SOURCE - převrací pořadí bajtů v bloku |
|||
* Vnější zařízení |
* Vnější zařízení |
||
IN - načte data ze vstupu |
** IN PORT, DEST - načte data ze vstupu |
||
OUT - zapíše data na výstup |
** OUT PORT, SOURCE - zapíše data na výstup |
||
==Příklady== |
==Příklady== |
||
Řádek 45: | Řádek 45: | ||
! Kód !! Popis |
! Kód !! Popis |
||
|- |
|- |
||
|<pre>COPY (DEST):10, (SOURCE):10</pre> || Kopie bloku 10 bajtů |
| <pre>COPY (DEST):10, (SOURCE):10</pre> || Kopie bloku 10 bajtů |
||
|- |
|- |
||
| <pre>COPY (DEST):10, (SOURCE):2</pre> || Kopie bloku 2 bajtů do bloku 10 bajtů, blok 2 bajtů se opakuje |
| <pre>COPY (DEST):10, (SOURCE):2</pre> || Kopie bloku 2 bajtů do bloku 10 bajtů, blok 2 bajtů se opakuje |
||
Řádek 54: | Řádek 54: | ||
|- |
|- |
||
| <pre>ADD (DEST):10, 1:10</pre> || Přičtení hodnoty 1 do prvního bajtu v cílovém bloku |
| <pre>ADD (DEST):10, 1:10</pre> || Přičtení hodnoty 1 do prvního bajtu v cílovém bloku |
||
|- |
|||
| <pre>SHR (DEST):10, (SOURCE):10</pre> || Bitový posun bloku SOURCE doprava a zápis výsledku do bloku DEST |
|||
|} |
|} |
||
==Inspirace== |
|||
Inspirováno instrukční sadou CPU Z80 a blokovými instrukcemi LDIR, LDDR, INIR, INDR, OTID, OTDR, CPIR, CPDR. |
|||
Tyto instrukce umožňovaly efektivnější vykonávání blokových operací. |
|||
Například instrukci LDIR lze zapsat jako: |
|||
<pre> |
|||
LOOP: LDI |
|||
DEC BC |
|||
JR NC, LOOP |
|||
</pre> |
|||
nebo |
|||
<pre> |
|||
LOOP: LD A, (HL) |
|||
LD (DE), A |
|||
INC HL |
|||
INC DE |
|||
DEC BC |
|||
JR NC, LOOP |
|||
</pre> |
|||
Tento systém lze rozšířit mimo LD, IN, OUT, CP i na další instrukce jako AND, OR, XOR, EX, SHL, SHR, INC, DEC, ADD, SUB, aj. |
Verze z 16. 5. 2012, 07:18
Koncept
- Je použit lineárně adresovatelný paměťový prostor, každý buňka je velikosti Bajt
- U všech operací, kde je to žádoucí, jsou podporovány blokové operace
- Instrukce mají až dva parametry a každý z nich může být definován jako blok (adresa + délka) nebo hodnota
- U každého bloku může být definováno zda inkrementovat vzestupně nebo sestupně
Instrukční sada
- Aritmetické
- ADD DEST, OP1, OP2
- SUB DEST, OP1, OP2
- MUL DEST, OP1, OP2
- DIV DEST, OP1, OP2
- MOD DEST, OP1, OP2
- Logické
- Bitové
- SHL DEST, SOURCE
- SHR DEST, SOURCE
- OR DEST, OP1, OP2
- AND DEST, OP1, OP2
- XOR DEST, OP1, OP2
- Řízení běhu
- NOP - žádná operace
- JP ADDR
- JR ADDR
- Zásobník
registr SP
- PUSH SOURCE - vloží data na zásobník
- POP DEST - načte data ze zásobníku
- CALL
- RET
- Přesuny
- COPY DEST, SOURCE - kopíruje data
- EX OP1, OP2 - vymění data
- CMP OP1, OP2 - porovnání bloků
- REV DEST, SOURCE - převrací pořadí bajtů v bloku
- Vnější zařízení
- IN PORT, DEST - načte data ze vstupu
- OUT PORT, SOURCE - zapíše data na výstup
Příklady
Kód | Popis |
---|---|
COPY (DEST):10, (SOURCE):10 |
Kopie bloku 10 bajtů |
COPY (DEST):10, (SOURCE):2 |
Kopie bloku 2 bajtů do bloku 10 bajtů, blok 2 bajtů se opakuje |
COPY (DEST):10, 1 |
Nastavení bloku 10 bajtů na hodnotu 1 |
ADD (DEST):10, 1 |
Přičtení hodnoty 1 do jednotlivých bajtů v bloku 10 bajtů |
ADD (DEST):10, 1:10 |
Přičtení hodnoty 1 do prvního bajtu v cílovém bloku |
SHR (DEST):10, (SOURCE):10 |
Bitový posun bloku SOURCE doprava a zápis výsledku do bloku DEST |
Inspirace
Inspirováno instrukční sadou CPU Z80 a blokovými instrukcemi LDIR, LDDR, INIR, INDR, OTID, OTDR, CPIR, CPDR. Tyto instrukce umožňovaly efektivnější vykonávání blokových operací.
Například instrukci LDIR lze zapsat jako:
LOOP: LDI DEC BC JR NC, LOOP
nebo
LOOP: LD A, (HL) LD (DE), A INC HL INC DE DEC BC JR NC, LOOP
Tento systém lze rozšířit mimo LD, IN, OUT, CP i na další instrukce jako AND, OR, XOR, EX, SHL, SHR, INC, DEC, ADD, SUB, aj.