Use direct value for mode in fopen() instead of pointer -- mode is always 1 char so no need to store mode letters in memory

This commit is contained in:
2025-06-25 10:15:21 +02:00
parent 692c96512e
commit 1969294f02
2 changed files with 8 additions and 9 deletions

View File

@ -18,7 +18,7 @@ section .text
global fclose global fclose
global fwrite global fwrite
;----- fopen(const char *filename, const char *mode) -----; ;----- fopen(const char *filename, const char mode) -----;
; return value: pointer to file or value < 0 (neg errno) if file failed to open ; return value: pointer to file or value < 0 (neg errno) if file failed to open
; ┌─────────────┬───────────────────────────────┐ ; ┌─────────────┬───────────────────────────────┐
; │fopen() mode │ open() flags │ ; │fopen() mode │ open() flags │
@ -39,17 +39,17 @@ fopen:
push rbp push rbp
mov rbp, rsp mov rbp, rsp
cmp byte [rsi], 'r' cmp sil, 'r'
je .setMode_r je .setMode_r
cmp byte [rsi], 'w' cmp sil, 'w'
je .setMode_w je .setMode_w
cmp byte [rsi], 'a' cmp sil, 'a'
je .setMode_a je .setMode_a
cmp byte [rsi], 'R' cmp sil, 'R'
je .setMode_R je .setMode_R
cmp byte [rsi], 'W' cmp sil, 'W'
je .setMode_W je .setMode_W
cmp byte [rsi], 'A' cmp sil, 'A'
je .setMode_A je .setMode_A
mov rax, -22 mov rax, -22
jmp .quit jmp .quit

View File

@ -149,7 +149,6 @@ section .rodata
; fopen(), fwrite(), fclose() ; fopen(), fwrite(), fclose()
testFile1 db "testFile1.txt",EOS testFile1 db "testFile1.txt",EOS
fileStr1 db "Hello file world!",EOS fileStr1 db "Hello file world!",EOS
fileMode_w db "w",EOS
msgFileB db NL,"# fopen(), fwrite(), fclose()",EOS msgFileB db NL,"# fopen(), fwrite(), fclose()",EOS
msgFileB1 db "TEST fopen('testFile1.txt', 'w'): %d",NL,EOS msgFileB1 db "TEST fopen('testFile1.txt', 'w'): %d",NL,EOS
msgFileB2 db "TEST fwrite(filePointer1, fileStr1): %d",NL,EOS msgFileB2 db "TEST fwrite(filePointer1, fileStr1): %d",NL,EOS
@ -733,7 +732,7 @@ main:
; TEST: fopen() ; TEST: fopen()
lea rdi, [rel testFile1] lea rdi, [rel testFile1]
lea rsi, [rel fileMode_w] mov rsi, 'w'
call fopen call fopen
mov r15, rax ;store filepointer to R15 mov r15, rax ;store filepointer to R15
mov rsi, rax mov rsi, rax