+;; Read a word and push it onto the stack as a pointer and a size. The pointer
+;; is valid until the next call to READ_WORD.
+forth_asm READ_WORD, 'READ-WORD'
+ push rsi
+.skip_whitespace:
+ ;; Read characters until one of them is not whitespace.
+ call KEY.impl
+ ;; We consider newlines and spaces to be whitespace.
+ cmp al, ' '
+ je .skip_whitespace
+ cmp al, $A
+ je .skip_whitespace
+
+ ;; We got a character that wasn't whitespace. Now read the actual word.
+ mov [.length], 0