progress on hello_files.asm

This commit is contained in:
2025-06-21 02:28:41 -04:00
parent c1b8f935e0
commit 0b2ba408c7

View File

@ -9,9 +9,11 @@ DEFAULT REL ; Use RIP-relative addressing by default
%define marg %define marg
%define rcounter_32 ecx %define rcounter_32 ecx
%define rdata_32 edx
%define r8_32 r8d %define r8_32 r8d
%define raccumulator rax %define raccumulator rax
%define rbase rbx
%define rcounter rcx %define rcounter rcx
%define rdata rdx %define rdata rdx
%define rdstindex rdi %define rdstindex rdi
@ -357,7 +359,11 @@ extern ReadFile
; Process API ; Process API
extern ExitProcess extern ExitProcess
%define MS_STD_OUTPUT_HANDLE 11 %define MS_INVALID_HANDLE_VALUE -1
%define MS_FILE_ATTRIBUTE_NORMAL 0x00000080
%define MS_FILE_SHARE_READ 0x00000001
%define MS_GENERIC_READ 0x80000000
%define MS_STD_OUTPUT_HANDLE 11
%define wapi_shadow_width 48 %define wapi_shadow_width 48
%macro wapi_shadow_space 0 %macro wapi_shadow_space 0
@ -368,6 +374,10 @@ extern ExitProcess
%define wapi_arg4_offset 28 %define wapi_arg4_offset 28
%define wapi_arg5_offset 32 %define wapi_arg5_offset 32
%define wapi_CreateFileA_dwCreationDisposition
%define wapi_CreateFileA_dwFlagsAndAttributes
%define wapi_CreateFileA_hTemplateFile
%define wapi_write_console_written_chars r9 %define wapi_write_console_written_chars r9
%macro wapi_write_console 2 %macro wapi_write_console 2
mov rcounter,[%1] ; Console Handle mov rcounter,[%1] ; Console Handle
@ -403,26 +413,35 @@ file_read_contents:
assert_not_null result assert_not_null result
slice_assert backing slice_assert backing
slice_assert path_ptr, path_len slice_assert path_ptr, path_len
push rbx
push r12
push r13
mov r12, result
mov r13, backing
; rcounter = str8_to_cstr_capped(path, slice_fmem(scratch)); ; rcounter = str8_to_cstr_capped(path, slice_fmem(scratch));
push rcounter ; save rcounter push backing ; save backing
push backing ; save backing all str8_to_cstr_capped ; (rdata, r8, r9)
mov r9, .scratch ; r9 = .scratch ; path_cstr = rcounter; path_len has will be discarded in the CreateFileA call
call str8_to_cstr_capped ; (rcounter, rdata, r8, r9)
pop backing
pop rcounter
wapi_shadow_space ; rcounter = [path_cstr]
mov rcounter, [std_out_hndl] mov rdata_32, MS_GENERIC_READ ; dwDesiredAccess = MS_GENERIC_READ
lea rdata, [.scratch + Slice_Byte.ptr] mov r8_32, MS_FILE_SHARE_READ ; dwShareMode = MS_FILE_SHARE_READ
xor r9, r9 ; lpSecurityAttributes = nullptr
lea r9, [rstack_ptr + wapi_arg4_offset] ; Written chars mov dword [rstack_ptr + wapi_CreateFileA_dwCreationDisposition], MS_OPEN_EXISTING
mov qword [rstack_ptr + wapi_arg5_offset], 0 ; Reserved (must be 0) mov dword [rstack_ptr + wapi_CreateFileA_dwFlagsAndAttributes ], MS_FILE_ATTRIBUTE_NORMAL
call WriteConsoleA mov qword [rstack_ptr + wpai_CreateFileA_hTemplateFile ], nullptr
call CreateFileA
stack_pop stack_pop
; TODO(Ed): Form-fill ; B32 open_failed = raccumulator == MS_INVALID_HANDLE_VALUE
; call CreateFileA ; if (open_failed) goto %%.error_exit
cmp raccumulator, MS_INVALID_HANDLE_VALUE
je %%.error_exit
%%.error_exit
ret ret
%pop proc_scope %pop proc_scope