7.2.2. Přímo zřetězený kód (Direct Threaded Code)

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

  1. úkol

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