7.1.1. Registry virtuálního procesoru

section id="virtual-processor.register-set"

rcsinfo="$Header: /home/radek/cvs/forth-book/ch-implementace.xml,v 1.15 2005/11/09 23:11:35 radek Exp $"

Nyní k registrům jenž náš virtuální procesor obsahuje. Uvedu jejich zavedená jména a zároven popis jejich významu.

W — pracovní registr (Working Register)
Pracovní a pomocný registr. Je používán k řadě věcí včetně dočasného uchovávání adresy. Je třeba aby tento registr bylo možno použít jako adresový registr při práci s pamětí. Tento registr se používá v každém slově. Často používané operace mimo aritmetických a logických je přístup do paměti (LOAD, STORE).
IP — ukazatel instrukcí (Instruction Pointer / Interpreter Pointer)
Ukazatel na instrukci. Podle implementace a průběhu programu ukazuje na aktuálně vykonávanou instrukci / slovo, nebo o jednu instrukci dopředu, tedy na následující instrukci. Je používán každým slovem. Používá jej implementace slov NEXT, ENTER a EXIT. Musí to být opět adresový registr. Nejčastější operace nad tímto registrem ja inkrementace (INC, DEC, LOAD).
PSP — Parameter Stack Pointer / Data Stack
Ukazatel zásobníku parametrů, někdy označován také jen SP (Stack Pointer). Je lepší jej označovat PSP protože označení SP často používá některý z registrů skutečného procesoru. PSP musí být adresový registr s charakterm ukazatele zásobníku. Potřebujeme jej inkrementovat, dekrementovat a použít jako adresu do paměti při čtení a zápisu (PUSH, POP). Podle způsobu realizace ukazuje na první volnou buňku na vrcholu zásobníku, na TOS, NOS či NNOS, podle toho jsou-li některé z těchto hodnot drženy pro rychlost zpracování v registrech procesoru. Samotný zásobník, či jeho zbytek je pak v paměti (u speciálních Forth procesorů se nachází přímo v jádře). Nároky na zásobník parametrů nejsou veliké, postačí několik desítek slov.
RSP — Return Stack Pointer
Ukazatel zásobníku návratových adres někdy nazývaný RP. RSP musí mít charakter ukazatele zásobníku nebo adresového registru. Opět operace které budem používat jsou obdobné jako u PSP, tedy inkrementace, dekrementace a přístup do paměti (PUSH, POP).
X — Working Register
Pracovní registr. Pro některé operace budeme potřebovat další pomocný pracovní registr. Použití záleží na implementaci. Je důležitý pro procesory jenž nemohou použít jako jeden z operandů buňku v paměti.
UP — User Pointer
Ukazatel na uživatelský proces. Je použit u víceúlohového forthu. Ukazuje na důležité struktury jenž jsou pro každý proces samostatné a dovolují tak „paralelní“ běh několika úloh/aplikací, přesněji konkurentní přepínání mezi několika uživatelskými prostředími.
TOS — Top Of Stack
TOS není skutečným registrem ale v registru může být. Jedná se o vrchol zásobníku parametrů. Tedy je to označení pro buňku/slovo na které „ukazujePSP. Slovo ukazuje je v úvozovkách, protože realizace zásobníku parametrů může implementovat ukazatel PSP jako ukazatel na první volnou buňku a nikoliv buňku na vrcholu zásobníku. Operace ve forthu pracují se zásobníkem a jeho vrcholem velmi často. Z důvodů výkonu se TOS implementuje v registru procesoru a zásobník obsahuje až další buňky pod vrcholem. V některých případech je i další hodnota NOS, případně NNOS implementována v registrech procesoru.
NOS — Next Of Stack
NOS stejně jako TOS není skutečným registrem ale v registru může být. Jedná se o buňku pod vrcholem zásobníku parametrů, tedy pod TOS.
NNOS — Next Next Of Stack
NNOS stejně jako TOS není skutečným registrem ale v registru může být. Jedná se o druhou buňku pod vrcholem zásobníku parametrů, tedy pod NOS.

Je-li to možné je potřeba s ohledem na výkon udržovat W, IP, PSP a RSP přímo v registrech procesoru.

Poznámka

ANS Forth vyžaduje aby zásobník parametrů adresovaný PSP měl alespoň 32 buňek (slov) a zásobník navratových adres adresovaný RSP alespoň 24 buňek (slov).

Následující tabulka je beze změny převzata z MOVING FORTH Part1: Design Decisions in the Forth Kernel.

            W     IP    PSP   RSP   UP     TOS   
----------------------------------------------------------
8086[1]     BX    SI    SP    BP    memory memory  [LAX84]
8086[2]     AX    SI    SP    BP    none   BX      [SER90]
68000       A5    A4    A3    A7=SP A6     memory  [CUR86]
PDP-11      R2    R4    R5    R6=SP R3     memory  [JAM80]
6809        X     Y     U     S     memory memory  [TAL80]
6502        Zpage Zpage X     SP    Zpage  memory  [KUN81]
Z80         DE    BC    SP    IX    none   memory  [LOE81]
Z8          RR6   RR12  RR14  SP    RR10   RR8     [MPE92]
8051        R0,1  R2,3  R4,5  R6,7  fixed  memory  [PAY90]