Fix some cases with 0, and fix a label name
This commit is contained in:
		@ -83,6 +83,9 @@ good_height:
 | 
			
		||||
    mov rdx,height_notice_post_length
 | 
			
		||||
    syscall
 | 
			
		||||
 | 
			
		||||
    cmp r14,0
 | 
			
		||||
    je print_inf_bmi
 | 
			
		||||
 | 
			
		||||
    ; calculate bmi (kg/(m^2))
 | 
			
		||||
    movq xmm1,r14 ; height
 | 
			
		||||
    divss xmm1,[_100f] ; cm to m
 | 
			
		||||
@ -110,11 +113,32 @@ good_height:
 | 
			
		||||
 | 
			
		||||
    call clear_stdin
 | 
			
		||||
 | 
			
		||||
    ; exit
 | 
			
		||||
exit:
 | 
			
		||||
    xor rdi,rdi
 | 
			
		||||
    mov rax,SYS_exit
 | 
			
		||||
    syscall
 | 
			
		||||
 | 
			
		||||
print_inf_bmi:
 | 
			
		||||
    mov rax,SYS_write
 | 
			
		||||
    mov rdi,FD_stdout
 | 
			
		||||
    mov rsi,bmi_notice_text
 | 
			
		||||
    mov rdx,bmi_notice_length
 | 
			
		||||
    syscall
 | 
			
		||||
 | 
			
		||||
    mov rax,SYS_write
 | 
			
		||||
    mov rdi,FD_stdout
 | 
			
		||||
    mov rsi,inf_float_text
 | 
			
		||||
    mov rdx,inf_float_length
 | 
			
		||||
    syscall
 | 
			
		||||
 | 
			
		||||
    mov rax,SYS_write
 | 
			
		||||
    mov rdi,FD_stdout
 | 
			
		||||
    mov rsi,newline_char
 | 
			
		||||
    mov rdx,1
 | 
			
		||||
    syscall
 | 
			
		||||
    
 | 
			
		||||
    jmp exit
 | 
			
		||||
 | 
			
		||||
clear_stdin:
 | 
			
		||||
    ; 16 - read buff
 | 
			
		||||
    ; 4 - pollfd.fd
 | 
			
		||||
@ -146,6 +170,10 @@ clear_stdin_end:
 | 
			
		||||
    ret
 | 
			
		||||
 | 
			
		||||
print_float: ; void print_float(float f, int percission)
 | 
			
		||||
    movq rax,xmm0
 | 
			
		||||
    cmp rax,0
 | 
			
		||||
    je print_float_zero
 | 
			
		||||
 | 
			
		||||
    sub rsp,24
 | 
			
		||||
    movss xmm1,[_10f]
 | 
			
		||||
    mov rcx,rdi
 | 
			
		||||
@ -157,7 +185,7 @@ print_float_scale_loop:
 | 
			
		||||
    cvtss2si rax,xmm0
 | 
			
		||||
    mov rcx,23
 | 
			
		||||
    mov rbx,10
 | 
			
		||||
print_float_reverse_loop:
 | 
			
		||||
print_float_mem_loop:
 | 
			
		||||
    xor rdx,rdx
 | 
			
		||||
    div rbx
 | 
			
		||||
    add rdx,'0'
 | 
			
		||||
@ -165,7 +193,7 @@ print_float_reverse_loop:
 | 
			
		||||
    dec rcx
 | 
			
		||||
 | 
			
		||||
    cmp rax,0
 | 
			
		||||
    jne print_float_reverse_loop
 | 
			
		||||
    jne print_float_mem_loop
 | 
			
		||||
 | 
			
		||||
    push rcx
 | 
			
		||||
    push rdi
 | 
			
		||||
@ -202,6 +230,13 @@ print_float_reverse_loop:
 | 
			
		||||
    add rsp,24
 | 
			
		||||
    ret
 | 
			
		||||
 | 
			
		||||
print_float_zero:
 | 
			
		||||
    mov rax,SYS_write
 | 
			
		||||
    mov rdi,FD_stdout
 | 
			
		||||
    mov rsi,zero_float_text
 | 
			
		||||
    mov rdx,zero_float_length
 | 
			
		||||
    syscall
 | 
			
		||||
    ret
 | 
			
		||||
 | 
			
		||||
; on error, return 0 in rax. otherwise, return 1 in rax 
 | 
			
		||||
; and the result in xmm0
 | 
			
		||||
@ -361,6 +396,10 @@ size_error_text: db "Number too long!",0xA
 | 
			
		||||
size_error_length: equ $ - size_error_text
 | 
			
		||||
period_char: db "."
 | 
			
		||||
newline_char: db 0xA
 | 
			
		||||
zero_float_text: db ".000"
 | 
			
		||||
zero_float_length: equ $ - zero_float_text
 | 
			
		||||
inf_float_text: db "Infinity"
 | 
			
		||||
inf_float_length: equ $ - inf_float_text
 | 
			
		||||
_10f: dd 10.0
 | 
			
		||||
_0.1f: dd 0.1
 | 
			
		||||
_100f: dd 100.0
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user