$Header: /home/radek/cvs/forth-book/sec-token_threaded_code.xml,v 1.4 2005/01/30 09:48:12 radek Exp $
section id="token-threaded-code" xreflabel="Tokeny zřetězený kód"
Tento model nepoužívá v definicích přímé adresy ale tak zvané tokeny. Tokeny jsou indexy do tabulky tokenů kde je ke každému tokenu přiřazena adresa. Motivací pro tento model je snížení paměťových nároků a tím větší hustota kódu.
Pro představu, použijeme-li tokeny 8 bitů veliké, tak při realizaci 16-ti bitového forthu snížíme průměrnou velikost definice slova na polovinu oproti použití přímých adres. Nevýhodou je pak omezení maximálního počtu definovaných slov na 256 a snížení rychlosti interpretace způsobené jednou dereferencí navíc.
Omezení dané velikostí tokenu (8 bitů) lze obejít. Pokud se například slovník forthu nachází v horní polovině adresního prostoru (od adresy 0x8000), zavedeme jen 128 tokenů. Ty budou zapisovány jako hodnoty od 0 do 127. Bude-li načtena v průběhu vakonávání slova hodnota tokenu vetší než 128, tedy od 128 do 255, znamená to že se nejedná o token ale horní část adresy slova ve slovníku. Tím budeme mít k dispozici nejen 128 tokenů, ale taky prostor pro libovolné množství dalších slov dle paměťových možností našeho počítače.
Následující tabulka popisuje velikost prostoru pro přímo adresovaný slovník a maximální počet použitelných tokenů. Hodnoty jsou pro 8-mi bitové tokeny a procesor s 16-ti bitovou adresou, tedy pro bežný 8-mi bitový procesor.
tokeny [n] | slovník [KiB] | poznámka |
---|---|---|
32 | 56KiB | |
64 | 48Kib | potřebujeme-li veliký prostor pro slovník |
128 | 32KiB | |
192 | 16KiB | vystačíme-li si z malým slovníkem |
224 | 8KiB | extrémě malý prostor pro slovník |
K tabulce je třeba dodat, že velikostí slovníku se rozumí velikost přímo adresovatelného slovníku. Do této velikosti se nepočítá velikost slovníku adresovatelného tokeny.