Fix stack usage for printf(), add test
This commit is contained in:
@ -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
|
||||
|
30
tests.asm
30
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]
|
||||
|
Reference in New Issue
Block a user