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
push rax
next
+forth_asm ROT, 'ROT'
+ pop rax
+ pop rbx
+ pop rdx
+ push rax
+ push rdx
+ push rbx
+ next
+
+forth_asm PICK, 'PICK'
+ pop rax
+ lea rax, [rsp + 8 * rax]
+ mov rax, [rax]
+ push rax
+ next
+
+forth_asm EQL, '='
+ pop rax
+ pop rbx
+ cmp rax, rbx
+ je .eq
+.noteq:
+ push 0
+ next
+.eq:
+ push 1
+ next
+
forth MAIN, 'MAIN'
- dq HELLO
dq INTERPRET
dq BRANCH, -8 * 2
dq TERMINATE