Fix bug in interface of parse_number
[rrq/jonasforth.git] / impl.asm
index 573646904581b28d7e9fc344f2137f6cda32519a..bb796ab19afa4ac21717928bebbe628cd84e6875 100644 (file)
--- a/impl.asm
+++ b/impl.asm
@@ -15,12 +15,12 @@ segment readable executable
 find:
   ;; RSI contains the entry we are currently looking at
 .loop:
-  movzx rcx, byte [rsi + 16]    ; Length of word being looked at
+  movzx rcx, byte [rsi + 8 + 1]    ; Length of word being looked at
   cmp rcx, [.search_length]
   jne .next    ; If the words don't have the same length, we have the wrong word
 
   ;; Otherwise, we need to compare strings
-  lea rdx, [rsi + 16 + 1]       ; Location of character being compared in entry
+  lea rdx, [rsi + 8 + 1 + 1]    ; Location of character being compared in entry
   mov rdi, [.search_buffer]     ; Location of character being compared in search buffer
 .compare_char:
   mov al, [rdx]
@@ -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 ?