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:
14
file.asm
14
file.asm
@ -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
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user