diff --git a/src/console.asm b/src/console.asm index 5ec2983..db9446b 100644 --- a/src/console.asm +++ b/src/console.asm @@ -54,6 +54,7 @@ section .rodata section .bss printfBuff resb bufferLength printfNBuff resb 32 + printfArgs resq 8*5 section .text global print global puts @@ -94,6 +95,12 @@ printf: push r14 ;current index of printfBuff push r15 ;where to return after flush + mov [printfArgs], rsi + mov [printfArgs+8], rdx + mov [printfArgs+16], rcx + mov [printfArgs+24], r8 + mov [printfArgs+32], r9 + xor r10, r10 xor r14, r14 lea r11, [rel printfBuff] @@ -131,22 +138,11 @@ printf: ;--- %d ---; .rep_d: - cmp r10, 0 - cmove rdi, rsi - je .convertInt - cmp r10, 1 - cmove rdi, rdx - je .convertInt - cmp r10, 2 - cmove rdi, rcx - je .convertInt - cmp r10, 3 - cmove rdi, r8 - je .convertInt cmp r10, 4 - cmove rdi, r9 - je .convertInt - + ja .d_fromStack + mov rdi, [printfArgs + r10*8] + jmp .convertInt + .d_fromStack: mov rdi, qword [rbp + 16 + (r10-5)*8] .convertInt: @@ -171,22 +167,11 @@ printf: ;--- %c ---; .rep_c: - cmp r10, 0 - cmove rdi, rsi - je .charToStr - cmp r10, 1 - cmove rdi, rdx - je .charToStr - cmp r10, 2 - cmove rdi, rcx - je .charToStr - cmp r10, 3 - cmove rdi, r8 - je .charToStr cmp r10, 4 - cmove rdi, r9 - je .charToStr - + ja .c_fromStack + mov rdi, [printfArgs + r10*8] + jmp .charToStr + .c_fromStack: mov rdi, qword [rbp + 16 + (r10-5)*8] .charToStr: @@ -198,21 +183,11 @@ printf: ;--- %s ---; .rep_s: - cmp r10, 0 - je .insertLoop - cmp r10, 1 - cmove rsi, rdx - je .insertLoop - cmp r10, 2 - cmove rsi, rcx - je .insertLoop - cmp r10, 3 - cmove rsi, r8 - je .insertLoop cmp r10, 4 - cmove rsi, r9 - je .insertLoop - + ja .s_fromStack + mov rsi, [printfArgs + r10*8] + jmp .insertLoop + .s_fromStack: mov rsi, qword [rbp + 16 + (r10-5)*8] ;--- Move fetched data to buffer ---; diff --git a/src/tests.asm b/src/tests.asm index e65378f..4c14a62 100644 --- a/src/tests.asm +++ b/src/tests.asm @@ -252,7 +252,7 @@ _start: push 0 push tS6 push tS5 - push qword [num4] + push qword [rel num4] call printf add rsp, 8*8 mov rsi, rax