From 2d2c007e5b5e2f9b79271d638863d77338969f38 Mon Sep 17 00:00:00 2001 From: Jonas Hvid Date: Tue, 3 Dec 2019 19:35:51 +0100 Subject: [PATCH] Implement '!' and '@' commands and add 'STATE' variable --- main.asm | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/main.asm b/main.asm index 8d9c51b..edcba0a 100644 --- a/main.asm +++ b/main.asm @@ -312,6 +312,26 @@ forth_asm DOTU, '.U' pop rsi next +;; Takes a value and an address, and stores the value at the given address. +forth_asm PUT, '!' + pop rbx ; Address + pop rax ; Value + mov [rbx], rax + next + +;; Takes an address and returns the value at the given address. +forth_asm GET, '@' + pop rax + mov rax, [rax] + push rax + next + +;; Get the location of the STATE variable. It can be set with '!' and read with +;; '@'. +forth STATE, 'STATE' + dq LIT, var_STATE + dq EXIT + forth MAIN, 'MAIN' dq HELLO dq INTERPRET @@ -322,6 +342,10 @@ segment readable writable latest_entry dq initial_latest_entry +;; The STATE variable is 0 when the interpreter is executing, and non-zero when +;; it is compiling. +var_STATE dq 0 + FIND.rsi dq ? READ_WORD.rsi dq ? -- 2.39.2