Fix bug in interface of parse_number
authorJonas Hvid <mail@johv.dk>
Tue, 10 Dec 2019 14:36:11 +0000 (15:36 +0100)
committerJonas Hvid <mail@johv.dk>
Tue, 10 Dec 2019 14:36:11 +0000 (15:36 +0100)
This procedure did not actually do what it claimed to be doing. It just happened
to work with the way it was called.

impl.asm
main.asm

index 923406f2465e50728f83e5e710bfe42341b1205f..bb796ab19afa4ac21717928bebbe628cd84e6875 100644 (file)
--- a/impl.asm
+++ b/impl.asm
@@ -96,8 +96,8 @@ read_word:
 ;; Parses a string.
 ;;
 ;; Parameters:
-;;   * [.length] = Length of string
-;;   * [.buffer] = Pointer to string buffer
+;;   * rcx = Length of string
+;;   * rdi = Pointer to string buffer
 ;;
 ;; Results:
 ;;   * rax = Value
@@ -108,7 +108,7 @@ parse_number:
 
   ;; Add (10^(rcx-1) * parse_char(rdi[length - rcx])) to the accumulated value
   ;; for each rcx.
-  mov rcx, [.length]
+  mov [.length], rcx
 .loop:
   ;; First, calcuate 10^(rcx - 1)
   mov rax, 1
@@ -155,6 +155,5 @@ read_word.buffer rb read_word.max_size
 read_word.length db ?
 read_word.char_buffer db ?
 
-parse_number.buffer dq ?
 parse_number.length dq ?
 
index d2cd54deb29e91c65f5d366d344aba29911eba39..e6b0ac280cfc359bbad93881900df086e3e0379e 100644 (file)
--- a/main.asm
+++ b/main.asm
@@ -198,8 +198,8 @@ forth_asm READ_WORD, 'READ-WORD'
 ;; Takes a string on the stack and replaces it with the decimal number that the
 ;; string represents.
 forth_asm PARSE_NUMBER, 'PARSE-NUMBER'
-  pop [parse_number.length]     ; Length
-  pop [parse_number.buffer]     ; String pointer
+  pop rcx     ; Length
+  pop rdi     ; String pointer
 
   push rsi
   call parse_number