diff options
| author | Nathan Reiner <nathan@nathanreiner.xyz> | 2024-12-26 16:37:34 +0100 |
|---|---|---|
| committer | Nathan Reiner <nathan@nathanreiner.xyz> | 2024-12-26 16:37:34 +0100 |
| commit | 74afdc040ef61773756e613197a33004921b997a (patch) | |
| tree | 6bd9a3141993ec70643adfcada9092bee4a3cf46 /bfc.S | |
| parent | d89df1906d0805a1465e052ae80339c38f25db1b (diff) | |
add f_read_next_character
Diffstat (limited to 'bfc.S')
| -rw-r--r-- | bfc.S | 58 |
1 files changed, 35 insertions, 23 deletions
@@ -1,8 +1,6 @@ -.global _start - -.data +.section .constants, "a" -v_elf_header: +c_elf_header: .byte 0x7f # Magic Number .ascii "ELF" # .byte 0x2 # 64-Bit @@ -24,9 +22,11 @@ v_elf_header: .hword 0x3 # TODO: Number Of Entries in Section Header Table .hword 0x2 # TODO: Index of Section Header Table Entry containing section names -v_usage_message: +c_usage_message: .asciz "bfc [input file] [output file]\n" +.section .variables, "aw" + v_input_fd: .int 0x0 @@ -42,33 +42,30 @@ v_buffer_end: v_buffer_cursor: .quad 0x0 +v_input_char: + .byte 0x0 -.text + +.section .code, "ax" +.global _start _start: mov %rsp, %rbp call f_check_args call f_open_files call f_init_buffer - mov $v_buffer_cursor, %rbx - mov (%rbx), %rsi - add $0x300, %rsi - mov %rsi, (%rbx) - call f_check_buffer - - mov $v_buffer_cursor, %rsi - mov (%rbx), %rsi - add $0x300, %rsi - mov %rsi, (%rbx) - call f_check_buffer - - # ---- +l_read_loop: + call f_read_next_character + cmp $0, %rax + je l_read_loop_end mov $1, %rax - mov %rcx, %rdi - mov $v_elf_header, %rsi - mov $0x40, %rdx + mov $1, %rdi + mov $v_input_char, %rsi + mov $1, %rdx syscall + jmp l_read_loop +l_read_loop_end: # ---- @@ -76,10 +73,12 @@ _start: mov $0, %rdi jmp f_exit + f_exit: mov $60, %rax syscall + f_check_args: mov (%rbp), %rax cmp $3, %rax @@ -87,7 +86,7 @@ f_check_args: mov $1, %rax mov $2, %rdi - mov $v_usage_message, %rsi + mov $c_usage_message, %rsi mov $32, %rdx syscall @@ -97,6 +96,7 @@ f_check_args: l_check_args_success: ret + f_open_files: mov $2, %rax mov 16(%rbp), %rdi @@ -115,6 +115,7 @@ f_open_files: mov %eax, (%rbx) ret + f_close_files: mov $3, %rax mov %rbx, %rsi @@ -125,6 +126,7 @@ f_close_files: syscall ret + f_init_buffer: mov $12, %rax mov $0, %rdi @@ -157,3 +159,13 @@ f_check_buffer: call f_resize_buffer l_check_buffer_large_enough: ret + + +f_read_next_character: + mov $0, %rax + mov $v_input_fd, %rbx + mov (%rbx), %rdi + mov $v_input_char, %rsi + mov $1, %rdx + syscall + ret |