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 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
; ┌─────────────┬───────────────────────────────┐
; │fopen() mode │ open() flags │
@ -39,17 +39,17 @@ fopen:
push rbp
mov rbp, rsp
cmp byte [rsi], 'r'
cmp sil, 'r'
je .setMode_r
cmp byte [rsi], 'w'
cmp sil, 'w'
je .setMode_w
cmp byte [rsi], 'a'
cmp sil, 'a'
je .setMode_a
cmp byte [rsi], 'R'
cmp sil, 'R'
je .setMode_R
cmp byte [rsi], 'W'
cmp sil, 'W'
je .setMode_W
cmp byte [rsi], 'A'
cmp sil, 'A'
je .setMode_A
mov rax, -22
jmp .quit

View File

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