Add support for %c in printf()
This commit is contained in:
59
console.asm
59
console.asm
@ -69,6 +69,8 @@ printf:
|
||||
push rdi
|
||||
cmp byte [rdi+1], 'd'
|
||||
je .rep_d
|
||||
cmp byte [rdi+1], 'c'
|
||||
je .rep_c
|
||||
cmp byte [rdi+1], 's'
|
||||
je .rep_s
|
||||
|
||||
@ -118,12 +120,52 @@ printf:
|
||||
pop rdx
|
||||
pop rcx
|
||||
mov rsi, rax
|
||||
jmp .sinsertLoop
|
||||
jmp .insertLoop
|
||||
|
||||
;--- %c ---;
|
||||
.rep_c:
|
||||
cmp r10, 0
|
||||
je .rep_c_rsi
|
||||
cmp r10, 1
|
||||
je .rep_c_rdx
|
||||
cmp r10, 2
|
||||
je .rep_c_rcx
|
||||
cmp r10, 3
|
||||
je .rep_c_r8
|
||||
cmp r10, 4
|
||||
je .rep_c_r9
|
||||
|
||||
;get from stack
|
||||
mov rdi, qword [rbp + 16 + (r10-5)*8]
|
||||
jmp .charToStr
|
||||
|
||||
.rep_c_rsi:
|
||||
mov rdi, rsi
|
||||
jmp .charToStr
|
||||
.rep_c_rdx:
|
||||
mov rdi, rdx
|
||||
jmp .charToStr
|
||||
.rep_c_rcx:
|
||||
mov rdi, rcx
|
||||
jmp .charToStr
|
||||
.rep_c_r8:
|
||||
mov rdi, r8
|
||||
jmp .charToStr
|
||||
.rep_c_r9:
|
||||
mov rdi, r9
|
||||
jmp .charToStr
|
||||
|
||||
.charToStr:
|
||||
mov [printfNBuff], dil
|
||||
mov dil, 0
|
||||
mov [printfNBuff+1], dil
|
||||
lea rsi, [rel printfNBuff]
|
||||
jmp .insertLoop
|
||||
|
||||
;--- %s ---;
|
||||
.rep_s:
|
||||
cmp r10, 0
|
||||
je .sinsertLoop ;nothing to do, rsi already correct
|
||||
je .insertLoop ;nothing to do, rsi already correct
|
||||
cmp r10, 1
|
||||
je .rep_s_rdx
|
||||
cmp r10, 2
|
||||
@ -135,28 +177,29 @@ printf:
|
||||
|
||||
;get from stack
|
||||
mov rsi, qword [rbp + 16 + (r10-5)*8]
|
||||
jmp .sinsertLoop
|
||||
jmp .insertLoop
|
||||
|
||||
.rep_s_rdx:
|
||||
mov rsi, rdx
|
||||
jmp .sinsertLoop
|
||||
jmp .insertLoop
|
||||
.rep_s_rcx:
|
||||
mov rsi, rcx
|
||||
jmp .sinsertLoop
|
||||
jmp .insertLoop
|
||||
.rep_s_r8:
|
||||
mov rsi, r8
|
||||
jmp .sinsertLoop
|
||||
jmp .insertLoop
|
||||
.rep_s_r9:
|
||||
mov rsi, r9
|
||||
|
||||
.sinsertLoop:
|
||||
;--- Move fetched data to buffer ---;
|
||||
.insertLoop:
|
||||
cmp byte [rsi], 0x0
|
||||
je .s0f
|
||||
mov r13b, byte [rsi]
|
||||
mov byte [r11], r13b
|
||||
inc rsi
|
||||
inc r11
|
||||
jmp .sinsertLoop
|
||||
jmp .insertLoop
|
||||
.s0f:
|
||||
inc r10
|
||||
pop rdi
|
||||
|
Reference in New Issue
Block a user