From 3a55212f3e57ca4bfea8fdb87b1e85716c575c7d Mon Sep 17 00:00:00 2001 From: Kwarde Date: Wed, 25 Jun 2025 12:00:05 +0200 Subject: [PATCH] Fix stack usage for printf(), add test --- console.asm | 4 +++- tests.asm | 30 ++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/console.asm b/console.asm index 7d1250b..440db2a 100644 --- a/console.asm +++ b/console.asm @@ -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 diff --git a/tests.asm b/tests.asm index 450230f..e8c1481 100644 --- a/tests.asm +++ b/tests.asm @@ -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]