ibis-os/num_util.asm

43 lines
800 B
NASM

; Loops over every character.
; Multiplies current by 10
; Adds [bx] - 0x30
; add bx, 1
parse_int:
pusha
; Contains the actual result
mov ax, 0
.loop:
mov cl, [bx]
cmp cl, 0x0 ; End on null
je .end
; If the character is invalid, stop here.
cmp cl, 0x30
jl .end
cmp cl, 0x39
jg .end
; Multiply by 10
mov cx, 10 ; NOT 0x10
mul cx
; Note: Has to be cx and not cl, otherwise it will be limited to 8-bits only
mov cl, [bx]
sub cl, 0x30
mov ch, 0x0
add ax, cx ; Use 16-bit addition
add bx, 1 ; Next char
jmp .loop
.end:
mov [result], ax
popa
ret
result: dw 0