Fix stack usage for printf(), add test
This commit is contained in:
@ -89,7 +89,9 @@ printf:
|
|||||||
je .rep_s_r9
|
je .rep_s_r9
|
||||||
|
|
||||||
;get from stack
|
;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:
|
.rep_s_rdx:
|
||||||
mov rsi, rdx
|
mov rsi, rdx
|
||||||
|
30
tests.asm
30
tests.asm
@ -68,8 +68,19 @@ section .rodata
|
|||||||
msgPuts db NL,NL,"# puts()",NL,EOS
|
msgPuts db NL,NL,"# puts()",NL,EOS
|
||||||
msgPuts1 db "puts() test",EOS
|
msgPuts1 db "puts() test",EOS
|
||||||
; printf()
|
; 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
|
msgPrintf db NL,"# printf()",EOS
|
||||||
msgPrintf1 db "TEST printf()",NL,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()
|
; min() / minu()
|
||||||
msgMin db NL,"# min() / minu()",EOS
|
msgMin db NL,"# min() / minu()",EOS
|
||||||
msgMin1 db "TEST min(num1, num2): %d",NL,EOS
|
msgMin1 db "TEST min(num1, num2): %d",NL,EOS
|
||||||
@ -204,8 +215,27 @@ main:
|
|||||||
%IF TEST_printf
|
%IF TEST_printf
|
||||||
lea rdi, [rel msgPrintf]
|
lea rdi, [rel msgPrintf]
|
||||||
call puts
|
call puts
|
||||||
|
|
||||||
|
; TEST: printf(msgPrintf1)
|
||||||
lea rdi, [rel msgPrintf1]
|
lea rdi, [rel msgPrintf1]
|
||||||
call printf
|
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
|
%ENDIF
|
||||||
%IF TEST_min
|
%IF TEST_min
|
||||||
lea rdi, [rel msgMin]
|
lea rdi, [rel msgMin]
|
||||||
|
Reference in New Issue
Block a user