При традиционном шитом коде в слова вписываются прямо адреса полей слов, откуда их нужно запускать (CFA - Code Field Address). Для низкоуровневых слов это прямо ссылки на их код, для высокоуровневых - ссылки на пролог (пролог может быть как общим, что несколько снижает скорость, так и у каждого слова свой, что потребляет немного лишней памяти). Код каждого слова заканчивается инструкцией "NEXT", передающей управление следующему слову.
Традиционно, один из регистров резервируется под указатель слов, WP (Word Pointer) и он постоянно, как и процессорный IP, указывает на адрес следующего слова. Но на x86 архитектуре (в отличие от всевозможных DEC/68K/ARM/MIPS и т.п.) из-за её бедности (нет автоинкрементов при косвенной адресации и т.п.) проще хранить адрес последнего выполненного слова. Тогда процедура NEXT обычно выглядит в таком духе:
code 6502acme
; NEXT
add eax, 4
jmp [eax]
Легко видеть, кстати, что в любой x86 системе такая конструкция по тактам занимает места меньше, чем call/ret. Так что на вызове низкоуровневых слов Форт с шитым кодом обходит обычные подпрограммные вызовы классических ЯВУ. Но вот когда дело доходит до вызова высокоуровневых слов - там нужно сохранить текущий WP на стеке возвратов, загрузить новый, а в конце - вернуть WP. Тут начинается некоторый проигрышь.