29.1. 32 bitový procesor orientovaný na Forth

Tento procesor může být realizován i jako virtuální stroj zakomponovaný do jádra Forthu.

Při návrhu vycházím z poznatků z procesorů SOP32, F18, ...

Tabulka 29.1. Registry procesoru

názevpopis
IPUkazatel instrukcí (zvaný také PC). Ukazuje na následující instrukci
IRinstrukční registr obsahuje právě dekódované instrukční slovo
SPdatový zásobník
RPzásobník návratových adres (>R R> R@)
Aadresní registr který používají instrukce A@+, …
Wpomocný pracovní registr, není přímo přístupný

Nejdříve instrukce. Z pohledu procesoru existují atomické instrukce, atomy a instrukční slova. Slovo obsahuje obvykle několik atomických instrukcí. Protože je nutno skloubit malý počet instrukcí a potřebu velkého počtu bitů pro adresu při volání poprpogramu, je instrukční slovo rozděleno do několika skupin bitů. Jedná se o dlouhé instrukční pole, a dva jednobitové příznaky, příznak návratu a příznak adresy (skoku).

Základní struktura instrukčního slova:

+------------------------+---+---+
|    instrukční pole     |Adr|Ret|
+------------------------+---+---+

Tabulka 29.2. Struktura instrukčního slova

instrukční poleARpopis
adresa00instrukce volání podprogramu
adresa01instrukce skoku
pole atomických instrukcí10atomické instrukce
pole atomických instrukcí11atomické instrukce s návratem

Při vytváření instrukční sady jsem vycházel z následujících úvah:

U tohoto konceptu jsem přemýšle, jestli nemá význam změnit pořadí polí Instrukce/Adresa, A a R. Zdá se mi, že pro hardwarovou realizaci je to naprosto jedno. Proto jsem raději zůstal u této kombinace.

Nyní k atomickým instrukcím. Vzhledem k počtu bitů jenž je kódují (30) se můžeme rozhodnou, kolik atomů a jak velikých v instrukci bude. Ostatní procesory podobného typu používají instrukce kódované minimálně 5 bity. Protože mi to tak pěkně vyšlo a 30 = 6 * 5, mohu se rozhodnout jestli v instrukci bude 6 atomů po pěti bitech, nebo 5 atomů po šesti bitech. Toto je ponecháno k dalším úvahám. Jediné co vyžaduji, aby kombinace kdy všechny bity jsou nulové měla význam instrukce NOP. V následující tabulce, do které si budu vepisovat jednotlivé atomické instrukce, počítám proto se 6-ti bity.

Tabulka 29.3.

b5b4b3b2b1b0mnemovýznam
000000NOPžádná operace, nedělá se nic
000001  
000010  
000011  
000100  
000101  
000110  
000111  
001000  
001001  
001010  
001011  
001100  
001101  
001110  
001111  
010000  
010001  
010010  
010011  
010100  
010101  
010110  
010111  
011000  
011001  
011010  
011011  
011100  
011101  
011110  
011111  
100000  
100001  
100010  
100011  
100100  
100101  
100110  
100111  
101000  
101001  
101010  
101011  
101100  
101101  
101110  
101111  
110000  
110001  
110010  
110011  
110100  
110101  
110110  
110111  
111000  
111001  
111010  
111011  
111100  
111101  
111110  
111111  

Tabulka 29.4. Základní instrukce pro umístnění do tabulky atomických instrukcí

instr.zásobníknázevpopis
!n addr →STOREuloží hodnotu n do buňky na adrese addr, adresa musí respektovat zarovnání buňek v paměti
@addr → nFETCH 
+n1 n2 → nADD 
-n1 n2 → nSUBodečte n2 od n1
>Rn → uloží n do návratového zásobníku (Return Stack)
R>→ n vyzvedne n z návratového zásobníku (Return Stack)
ANDn1 n2 → n  
ORn1 n2 → n  
XORn1 n2 → n  
NOTn → n  
DROPn →  
DUPn → n n  
OVERn1 n2 → n1 n2 n1  
SWAPn1 n2 → n2 n1  
[IF]n →  
[CALL]   
[EXIT]   
[LIT]   
Licence Creative Commons
Elektronika a počítače, jejímž autorem je Radek Hnilica, podléhá licenci Creative Commons Uveďte autora-Nevyužívejte dílo komerčně-Zachovejte licenci 3.0 Česká republika .