diff --git a/console.asm b/console.asm index cb03e84..b1ef2f3 100644 --- a/console.asm +++ b/console.asm @@ -77,6 +77,11 @@ printf: je .rep_c cmp byte [rdi+1], 's' je .rep_s + + ;--- invalid specifier ---; + mov byte [r11], '%' + inc r10 ;assuming args were passed for invalid specifiers ! + jmp .continue ;--- %d ---; .rep_d: diff --git a/tests.asm b/tests.asm index 09d2e61..1d9b357 100644 --- a/tests.asm +++ b/tests.asm @@ -70,7 +70,7 @@ 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, %d, %s",NL,EOS + testStr db "Testing: %s, %%, %s, %s, %f, %s, %d, %s, %s, %x, %s, %s, %d, %s",NL,EOS tS1 db "one",EOS tS2 db "two",EOS tS3 db "three",EOS @@ -82,7 +82,7 @@ section .rodata 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, num1, tS9)",NL,EOS + msgPrintf2 db "TEST printf(testStr, tS1, tS2, tS3, invalid1, tS4, num4, tS5, tS6, invalid2, tS7, tS8, num1, tS9)",NL,EOS msgPrintf2b db "Return value: %d",NL,EOS ; min() / minu() msgMin db NL,"# min() / minu()",EOS @@ -223,7 +223,7 @@ main: lea rdi, [rel msgPrintf1] call printf - ; TEST: printf(testStr, tS1, tS2, tS3, tS4, tS5, tS6, tS7, tS8, num1, tS9) + ; TEST printf(testStr, tS1, tS2, tS3, invalid1, tS4, num4, tS5, tS6, invalid2, tS7, tS8, num1, tS9) lea rdi, [rel msgPrintf2] call printf @@ -231,15 +231,18 @@ main: lea rsi, [rel tS1] lea rdx, [rel tS2] lea rcx, [rel tS3] - lea r8, [rel tS4] - lea r9, [rel tS5] + mov r8, 0 + lea r9, [rel tS4] push tS9 push qword [rel num1] push tS8 push tS7 + push 0 push tS6 + push tS5 + push qword [num4] call printf - add rsp, 40 ;cleanup stack, 8*5 + add rsp, 8*8 mov rsi, rax lea rdi, [msgPrintf2b] call printf