Virtuální procesor
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.