Gegeben sei eine Forth Wort Definition:
: name word1 word2 word3 ;
Bei Direct Threaded Code ergibt sich daraus der folgende Aufbau der Liste:
header with name | JMP NEST | Zeiger auf word1 | Zeiger auf word2 | Zeiger auf word3 | Zeiger auf EXIT |
Der Inner Interpreter für Direct Threaded Code sieht dann so aus (pseudo-code):
Next W <- (IP) IP++ JMP (W)
oder kürzer:
Next JMP (IP)++
Dazu gab es einen englischen Komentar:
On Intel x86 or 6502/65816, the JMP NEST instruction may be substituted with a CALL NEST instead. This places the address of „ptr to word1“ on the CPU's hardware stack, where it is easily processed by NEST.
The body of the definition consists of pointers to the parameter fields of each word, where CPU-executable code is always found in some capacity or another.
The inner interpreter for DirectThreadedCode looks like this (pseudo-code):
NEST: ; For JMP-based systems -(RSP) <- IP IP <- W + sizeof(JMP) JMP Next NEST: ; For CALL-based systems -(RSP) <- IP POP IP JMP Next EXIT: ; For both types IP <- (RSP)+ JMP Next Next: W <- (IP) IP++ JMP (W)
For architectures that support automatic post-increment on a memory access, it can be significantly simplified at the expense of maintaining the W pseudo-register:
JMP (IP)++