section id="direct_threaded_code" xreflabel="Přímo zřetězený kód"
rcsinfo="$Header: /home/radek/cvs/forth-book/sec-direct_threaded_code.xml,v 1.4 2005/10/21 13:36:02 radek Exp $"
Odkazy a zdroje:
ToDo
Přímo zřetězený kód je modifikací ITC. Zatímco v ITC obsahuje tělo dvě pole, CFA a PF, v DTC je pole jen jedno, PF. Jak tedy Forth rozpozná kde se nachází strojový kód, jednoduše ten je uložen přímo v poli PF. Nízkoúrovňová slova obsahují tedy strojový kód přímo v PF. Vysokoúrovňová slova obsahují jako první strojovou instrukci v PF instrukci skoku (JUMP) či instrukci volání podprogramu (CALL) na strojový kód interpretu NEXT.
Co získáme v DTC oproti ITC? V první řadě je to snížení nároků na kód interpretu o jedno nepřímé adresování. V DTC se v kódu interpretu NEXT nahradí instrukce jmp (w) instrukcí jmp w. Kód nízkoúrovňových slov ve strojovém kódu se zkrátí o velikost pole CFA, u vysokoúrovňových slov může dojít ke zvětšní o kód instrukce skoku na interpret NEXT.
Implementace:
next: (ip) → w
ip + 2 → ip
jump w ; skok na adresu v registru WStruktura slova v slovníku:
+----------+----------+-------------------------+
| Hlavička | JMP NEST | adr1 adr2 adr3 ... exit |
+----------+----------+-------------------------+
CF PFDOSEMI (EXIT) je stejný jako v ITC. NEXT je jednodušší
next: (ip) → w
ip+2 → ip ; posun na další adresu
jump w
NEST: ; pro JMP-based systems
-(RSP)←IP
IP←W + sizeof(JMP)
JUMP NEXT
NEST: ; pro systémy používající CALL (JSR)
-(RSP)←IP
POP IP
JUMP NEXT