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 W
Struktura slova v slovníku:
+----------+----------+-------------------------+ | Hlavička | JMP NEST | adr1 adr2 adr3 ... exit | +----------+----------+-------------------------+ CF PF
DOSEMI (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