Fix stack usage for printf(), add test

This commit is contained in:
2025-06-25 12:00:05 +02:00
parent 7054061734
commit 3a55212f3e
2 changed files with 33 additions and 1 deletions

View File

@ -89,7 +89,9 @@ printf:
je .rep_s_r9
;get from stack
mov rsi, qword [rbp + r10*8]
; rsp + 6*8 : RIP to printf call (+1), PUSH rbp,r12,r13,rdi (+4), +1 should be tS6
mov rsi, qword [rsp + 5*8 + (r10-5)*8]
jmp .sinsertLoop
.rep_s_rdx:
mov rsi, rdx

View File

@ -68,8 +68,19 @@ section .rodata
msgPuts db NL,NL,"# puts()",NL,EOS
msgPuts1 db "puts() test",EOS
; printf()
testStr db "Testing: %s, %s, %s, %s, %s, %s, %s, %s, %s",NL,EOS
tS1 db "one",EOS
tS2 db "two",EOS
tS3 db "three",EOS
tS4 db "four",EOS
tS5 db "five",EOS
tS6 db "six",EOS
tS7 db "seven",EOS
tS8 db "eight",EOS
tS9 db "noin",EOS
msgPrintf db NL,"# printf()",EOS
msgPrintf1 db "TEST printf()",NL,EOS
msgPrintf2 db "TEST printf(testStr, tS1, tS2, tS3, tS4, tS5, tS6, tS7, tS8, tS9)",NL,EOS
; min() / minu()
msgMin db NL,"# min() / minu()",EOS
msgMin1 db "TEST min(num1, num2): %d",NL,EOS
@ -204,8 +215,27 @@ main:
%IF TEST_printf
lea rdi, [rel msgPrintf]
call puts
; TEST: printf(msgPrintf1)
lea rdi, [rel msgPrintf1]
call printf
; TEST: printf(testStr, tS1, tS2, tS3, tS4, tS5, tS6, tS7, tS8, tS9)
lea rdi, [rel msgPrintf2]
call printf
lea rdi, [rel testStr]
lea rsi, [rel tS1]
lea rdx, [rel tS2]
lea rcx, [rel tS3]
lea r8, [rel tS4]
lea r9, [rel tS5]
push tS9
push tS8
push tS7
push tS6
call printf
add rsp, 32 ;cleanup stack, 8*4
%ENDIF
%IF TEST_min
lea rdi, [rel msgMin]