2012-03-25 72 views
-2

我試圖用匯編8086和tasm打印浮點數!但我不知道如何做到這一點。 我有這樣的變量數量:打印浮點數彙編8086

VAR DD 3.14235565212

你能幫助我嗎?詛咒的數字是浮點格式(你知道IEEE 754或類似的東西) 謝謝

+0

假設這是* * IEEE 754,你可以在這裏找到詳細規格:HTTP:// EN。 wikipedia.org/wiki/IEEE_754-2008。另外還有一些關於彙編語言的指導:* http://books.google.com/books?id=094tYob7ipQC&pg=PA95&source=gbs_toc_r&cad=4#v=onepage&q&f=false – 2012-03-25 21:54:42

+0

您應該使用3.1415926536作爲pi附近的浮動代替。 – hirschhornsalz 2012-03-25 22:33:05

+2

@drhirsch:我不同意。在x86上的彙編語言中,通常應該使用'fldpi'。 – 2012-03-25 23:45:01

回答

1

假設你有一個浮點單位可用(幾乎給定,不再),簡單的方法是將其轉換以BCD格式使用FBSTP,然後使用CPU將個別數字轉換爲ASCII/ISO/Unicode /無論如何。

-1

試試這個代碼。但你必須聲明變量是一件容易的事情:)

`

print_float  proc near 

    push cx 
    push dx 

    cmp  bott, 0 
    jns  div_not_signed 
    inc  bosig 

    div_not_signed: 
    cmp  upp, 0 
    jns  upp_not_signed 
    inc  upsig 

    upp_not_signed: 
    mov  cl, upsig 
    sub  cl, bosig 
    jz  positive 
    neg  dx 


    positive: 
    cmp  ax, 0 
    jne  checked   
    cmp  dx, 0 
    jns  checked   
    push dx 
    mov  dl, '-' 
    call write_char  
    pop  dx 
    checked: 

    call print_num 

    cmp  dx, 0 
    je  done 

    push dx 

    mov  dl, '.' 
    call write_char 
    pop  dx 

    mov  cx, 5 
    call print_fraction 
    done: 
    pop  dx 
    pop  cx 
    ret 
    print_float  endp 





    print_fraction proc near 
    push ax 
    push dx 
    next_fraction: 

    cmp  cx, 0 
    jz  end_rem 
    dec  cx  


    cmp  dx, 0 
    je  end_rem 

    mov  ax, dx 

    imul ten2    

    idiv bx    

    push dx    
    mov  dx, ax 
    cmp  dx, 0 
    jns  not_sig 
    neg  dx 
    not_sig: 
    add  dl, 30h   
    call write_char  
    pop  dx 

    jmp  next_fraction 
    end_rem: 
    pop  dx 
    pop  ax 
    ret 
    print_fraction endp 




    print_numx  proc near 
    push bx 
    push cx 
    push dx 


    mov  cl, 1 

    mov  bl, 100  


    cmp  al, 0 
    jz  end_show 

    begin_print: 

    cmp  bl,0 
    jz  end_show 

    cmp  cl, 0 
    je  calc 

    cmp  al, bl 
    jb  skip 
    calc: 
    xor  cl, cl 

    cbw 
    div  bl  


    mov  dl, al 
    add  dl, 30h  
    push ax 
    mov  ah, 02h 
    int  21h 
    pop  ax 

    mov  al, ah 

    skip: 
    push ax 
    mov  al, bl 
    cbw 
    div  ten  
    mov  bl, al 
    pop  ax 

    jmp  begin_print 

    end_show: 

    pop  dx 
    pop  cx 
    pop  bx 
    ret 
    print_numx  endp 


    write_char  proc near 
    push ax 
    mov  ah, 02h 
    int  21h 
    pop  ax 
    ret 
    write_char  endp 

`