Benutzer-Werkzeuge

Webseiten-Werkzeuge


words:axiome:threaded-code:subroutinethreadedcode

Subroutine threaded code

Hierbei werden Subroutinen nacheinander aufgerufen. Es wird dazwischen aber kein Maschinencode eingefügt (without inlining of primitives).

Gegeben sei eine Forth Definition:

: name	  word1 word2 word3 ;

Der Subroutine Threaded Code dazu sieht dann so aus:

header with nameJSR word1JSR word2JSR word3RET

Wird subroutine threaded code verwendet, ruft die Hardware einen subroutine call nach dem andern auf. Daher besteht das NEXT nur aus der in Hardware angelegten (microcode/hardwired) call instruction. Die Forth Worte geben die Controlle an das aufrufende Wort zurück, indem sie als letztes die return instruction ausführen. Es gibt keine zentrale Stelle, kein NEXT, die der Prozess immer wieder durchlaufen würde.


Obwohl dies zunächst sehr unkompliziert aussieht, ist reiner Subroutine Threaded Code nicht unbedingt schneller als Direct Threaded Code. Oft ist ein direct threaded NEXT schneller als das call/return-Paar. Auf etlichen Maschinen ist der indirekte Sprung mit auto-increment JMP (IP)++ sehr schnell.

Kritische Anmerkung dazu:

Auf realen 8 Bit CPUs ist JSR-threaded deutlich schneller als alle Varianten mit NEXT und der Speicherverbrauch steigt nicht unakzeptabel. 16 Bit threaded-Varianten hatten 1980 eine Berechtigung als man mit 4kByte EPROMs arbeitete, sie waren ab ca. 1985 schon obsolet, weil der verfügbare Programmspeicher schnell größer wurde.

MfG JRD

words/axiome/threaded-code/subroutinethreadedcode.txt · Zuletzt geändert: 2010-12-29 18:12 (Externe Bearbeitung)