diff --git a/console.asm b/console.asm index 248809f..2a952bd 100644 --- a/console.asm +++ b/console.asm @@ -46,6 +46,8 @@ puts: leave ret ;----- printf(const char* string, ...) -----; +; Currently only supports specifiers: %d, %c, %s +; Return value: Amount of printed characters printf: push rbp mov rbp, rsp @@ -213,6 +215,8 @@ printf: mov byte [r11], 0x0 lea rdi, [rel printfBuff] call print + lea rdi, [rel printfBuff] + call strlen pop r13 pop r12 diff --git a/tests.asm b/tests.asm index 8866899..3b66a0b 100644 --- a/tests.asm +++ b/tests.asm @@ -83,6 +83,7 @@ section .rodata msgPrintf db NL,"# printf()",EOS msgPrintf1 db "TEST printf()",NL,EOS msgPrintf2 db "TEST printf(testStr, tS1, tS2, tS3, tS4, tS5, tS6, tS7, tS8, num1, tS9)",NL,EOS + msgPrintf2b db "Return value: %d",NL,EOS ; min() / minu() msgMin db NL,"# min() / minu()",EOS msgMin1 db "TEST min(num1, num2): %d",NL,EOS @@ -239,6 +240,9 @@ main: push tS6 call printf add rsp, 40 ;cleanup stack, 8*5 + mov rsi, rax + lea rdi, [msgPrintf2b] + call printf %ENDIF %IF TEST_min lea rdi, [rel msgMin]