This implementation is a bit awkward right now, but we should be able to clean
it up later.
mov rdi, 0
syscall
-forth HELLO, 'HELLO'
- dq LIT, 'H', EMIT
- dq LIT, 'e', EMIT
- dq LIT, 'l', EMIT
- dq LIT, 'l', EMIT
- dq LIT, 'o', EMIT
- dq LIT, '!', EMIT
- dq NEWLINE
- dq EXIT
-
;; Duplicate a pair of elements.
forth_asm PAIRDUP, '2DUP'
pop rbx
next
forth MAIN, 'MAIN'
- dq HELLO
dq INTERPRET
dq BRANCH, -8 * 2
dq TERMINATE
DROP SWAP DROP SWAP DROP
;
+: C,
+ HERE @ C!
+ HERE @ 1 +
+ HERE ! ;
+
+: OVER
+ SWAP DUP ROT ;
+
+: STORE-STRING
+ BEGIN
+ OVER C@ C,
+ SWAP 1 + SWAP
+ 1 - DUP 0 = UNTIL
+ DROP DROP ;
+
+S" HELLO-ADDR" CREATE
+S" Hello!" DUP ROT
+STORE-STRING
+: HELLO
+ ' HELLO-ADDR LIT [ , ] TELL NEWLINE ;
+
+HELLO
+
S" 10 FIB = " TELL
10 FIB .U
S" (Expected: 59)" TELL NEWLINE