forth

A WIP implementation of Forth targeting UEFI x86-64.
git clone git://git.christianermann.dev/forth
Log | Files | Refs

commit 7b25cf69ab44609948328847545e02f941436bda
parent 3ee9d8312c2784a36f0f51cda63ba987597e3fef
Author: Christian Ermann <christianermann@gmail.com>
Date:   Wed, 12 Jun 2024 15:25:46 -0400

Add WORDS

Diffstat:
Mforth.asm | 38++++++++++++++++++++++++++++++++++++++
1 file changed, 38 insertions(+), 0 deletions(-)

diff --git a/forth.asm b/forth.asm @@ -1036,6 +1036,42 @@ defcode 'S\"', 3, 0, S_BACKSLASH_QUOTE push [.length] NEXT +;------------------------------------------------------------------------------ +; +; Section 9 - Misc. +; + +defcode "WORDS", 5, 0, WORDS +; List all words in the dictionary. +; +; We search the dictionary starting from the end (the newest words) and move +; towards the beginning (the oldest words). +; + mov rbx, [latest] + jmp .print_word + +.next_word: + mov rbx, [rbx] + +.check_out_of_words: + test rbx, rbx + je .end + +.next_line: + mov rdx, 1 + mov rcx, .newline + call sys_print_string + +.print_word: + movzx rdx, byte [rbx + 9] ; al = word name length + lea rcx, [rbx + 10] ; rcx = word name address of current entry + call sys_print_string + jmp .next_word + +.end: + NEXT + + section '.data' data readable writable @@ -1058,6 +1094,8 @@ code_S_QUOTE.length dq ? code_S_BACKSLASH_QUOTE.buffer rb 64 code_S_BACKSLASH_QUOTE.length dq ? +code_WORDS.newline db 0xA + BASE db 16 latest dq link