X-Git-Url: https://git.rrq.au/?a=blobdiff_plain;f=impl.asm;h=bb796ab19afa4ac21717928bebbe628cd84e6875;hb=4d233157714c21c1c15e7b271460a1692da55f52;hp=573646904581b28d7e9fc344f2137f6cda32519a;hpb=89a6a52d6128a4f9ac3c7aa26fc0df111e4160db;p=rrq%2Fjonasforth.git diff --git a/impl.asm b/impl.asm index 5736469..bb796ab 100644 --- 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 ?