diff options
Diffstat (limited to '04b/in04b')
-rw-r--r-- | 04b/in04b | 133 |
1 files changed, 0 insertions, 133 deletions
diff --git a/04b/in04b b/04b/in04b deleted file mode 100644 index 2b85900..0000000 --- a/04b/in04b +++ /dev/null @@ -1,133 +0,0 @@ -main() - -function main - puts(.str_hello_world) - putc(10) ; newline - syscall(0x3c, 0) - -:str_hello_world - string Hello, world! - byte 0 - -function strlen - argument s - local c - local p - p = s - :strlen_loop - c = *1p - if c == 0 goto strlen_loop_end - p += 1 - goto strlen_loop - :strlen_loop_end - return p - s - -function putc - argument c - local p - p = &c - syscall(1, 1, p, 1) - return - -function puts - argument s - local len - len = strlen(s) - syscall(1, 1, s, len) - return - -function syscall - ; I've done some testing, and this should be okay even if - ; rbp-56 goes beyond the end of the stack. - ; mov rax, [rbp-16] - byte 0x48 - byte 0x8b - byte 0x85 - byte 0xf0 - byte 0xff - byte 0xff - byte 0xff - ; mov rdi, rax - byte 0x48 - byte 0x89 - byte 0xc7 - - ; mov rax, [rbp-24] - byte 0x48 - byte 0x8b - byte 0x85 - byte 0xe8 - byte 0xff - byte 0xff - byte 0xff - ; mov rsi, rax - byte 0x48 - byte 0x89 - byte 0xc6 - - ; mov rax, [rbp-32] - byte 0x48 - byte 0x8b - byte 0x85 - byte 0xe0 - byte 0xff - byte 0xff - byte 0xff - ; mov rdx, rax - byte 0x48 - byte 0x89 - byte 0xc2 - - ; mov rax, [rbp-40] - byte 0x48 - byte 0x8b - byte 0x85 - byte 0xd8 - byte 0xff - byte 0xff - byte 0xff - ; mov r10, rax - byte 0x49 - byte 0x89 - byte 0xc2 - - ; mov rax, [rbp-48] - byte 0x48 - byte 0x8b - byte 0x85 - byte 0xd0 - byte 0xff - byte 0xff - byte 0xff - ; mov r8, rax - byte 0x49 - byte 0x89 - byte 0xc0 - - ; mov rax, [rbp-56] - byte 0x48 - byte 0x8b - byte 0x85 - byte 0xc8 - byte 0xff - byte 0xff - byte 0xff - ; mov r9, rax - byte 0x49 - byte 0x89 - byte 0xc1 - - ; mov rax, [rbp-8] - byte 0x48 - byte 0x8b - byte 0x85 - byte 0xf8 - byte 0xff - byte 0xff - byte 0xff - - ; syscall - byte 0x0f - byte 0x05 - - return |