2012-03-25 10 views
-2

アセンブラ8086とtasmを使用して浮動小数点数を出力しようとしています!しかし、私はこれを行う方法については考えていません。あなたが私を助けることができるprint浮動小数点アセンブラ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=false –

+0

π付近のフロートには3.1415926536を使用する必要があります代わりに。 – hirschhornsalz

+2

@drhirsch:私は同意しません。 x86上のアセンブリ言語では、通常は 'fldpi'を使うべきです。 –

答えて

1

浮動小数点ユニットを使用できると仮定すると、簡単な方法はそれを変換することですFBSTPを使用してBCD形式に変換し、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 

`

関連する問題