Dump current state of printf() (adding %d support), adds itoa()
This commit is contained in:
52
core.asm
52
core.asm
@ -1,3 +1,5 @@
|
||||
extern strclr
|
||||
|
||||
section .text
|
||||
global min
|
||||
global minu
|
||||
@ -7,6 +9,7 @@ section .text
|
||||
global isupper
|
||||
global tolower
|
||||
global toupper
|
||||
global itoa
|
||||
|
||||
;----- min(int a, int b) -----;
|
||||
; return value: lowest value
|
||||
@ -120,3 +123,52 @@ toupper:
|
||||
.quit:
|
||||
leave
|
||||
ret
|
||||
;----- itoa(int num, char* str) -----;
|
||||
; return value: pointer to str
|
||||
itoa:
|
||||
push rbp
|
||||
mov rbp, rsp
|
||||
|
||||
push rsi
|
||||
push rdi
|
||||
mov rdi, rsi
|
||||
call strclr
|
||||
pop rdi
|
||||
mov rax, rdi
|
||||
mov r8, rsi
|
||||
xor rcx, rcx
|
||||
|
||||
test rax, rax
|
||||
jnz .checkNeg
|
||||
mov byte [rsi], '0'
|
||||
mov byte [rsi+1], 0
|
||||
jmp .quit
|
||||
|
||||
.checkNeg:
|
||||
xor rbx, rbx
|
||||
test rax, rax
|
||||
jns .convert
|
||||
neg rax
|
||||
mov rbx, 1
|
||||
|
||||
.convert:
|
||||
xor rdx, rdx
|
||||
mov r10, 10
|
||||
div r10
|
||||
add rdx, '0'
|
||||
push rdx
|
||||
inc rcx
|
||||
test rax, rax
|
||||
jnz .convert
|
||||
|
||||
.toString:
|
||||
pop rdx
|
||||
mov byte [rsi], dl
|
||||
inc rsi
|
||||
loop .toString
|
||||
|
||||
.quit:
|
||||
pop rsi
|
||||
mov rax, rsi
|
||||
leave
|
||||
ret
|
||||
|
Reference in New Issue
Block a user