projects
/
rrq
/
jonasforth.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Clarify some explanations in the README
[rrq/jonasforth.git]
/
impl.asm
diff --git
a/impl.asm
b/impl.asm
index 070ad2a70561899ab567d4ec92796e68a588dc9a..ea6c04ebd42155a2dd5f495ac57874308ad2fbe4 100644
(file)
--- a/
impl.asm
+++ b/
impl.asm
@@
-1,16
+1,14
@@
;; vim: syntax=fasm
;; vim: syntax=fasm
-se
gment
readable executable
+se
ction '.text' code
readable executable
macro printlen msg, len {
push rsi
add rsp, 8
macro printlen msg, len {
push rsi
add rsp, 8
- mov r
si
, msg
+ mov r
cx
, msg
mov rdx, len
mov rdx, len
- mov rax, 1
- mov rdi, 1
- syscall
+ sys_print_string
sub rsp, 8
pop rsi
sub rsp, 8
pop rsi
@@
-25,12
+23,6
@@
macro print msg {
printlen msg, msg#.len
}
printlen msg, msg#.len
}
-macro exit code {
- mov rax, $3C
- mov rdi, code
- syscall
-}
-
struc string bytes {
. db bytes
.len = $ - .
struc string bytes {
. db bytes
.len = $ - .
@@
-88,11
+80,8
@@
find:
read_word:
.skip_whitespace:
;; Read characters into .char_buffer until one of them is not whitespace.
read_word:
.skip_whitespace:
;; Read characters into .char_buffer until one of them is not whitespace.
- mov rax, 0
- mov rdi, 0
mov rsi, .char_buffer
mov rsi, .char_buffer
- mov rdx, 1
- syscall
+ sys_read_char
;; We consider newlines and spaces to be whitespace.
cmp [.char_buffer], ' '
;; We consider newlines and spaces to be whitespace.
cmp [.char_buffer], ' '
@@
-112,11
+101,8
@@
read_word:
mov [rsi], al
inc [.length]
mov [rsi], al
inc [.length]
- mov rax, 0
- mov rdi, 0
mov rsi, .char_buffer
mov rsi, .char_buffer
- mov rdx, 1
- syscall
+ sys_read_char
cmp [.char_buffer], ' '
je .end
cmp [.char_buffer], ' '
je .end
@@
-177,6
+163,9
@@
pop_word:
jmp .read_alpha
.end:
jmp .read_alpha
.end:
+ ;; Finally, we want to skip one whitespace character after the word.
+ inc rsi
+ dec rcx
ret
ret
@@
-240,9
+229,9
@@
parse_number:
pop rdi
printlen rdi, [.length]
newline
pop rdi
printlen rdi, [.length]
newline
-
exit
100
+
sys_terminate
100
-se
gment
readable writable
+se
ction '.data'
readable writable
find.search_length dq ?
find.search_buffer dq ?
find.search_length dq ?
find.search_buffer dq ?