2012-03-25 2 views
-2

Я пытаюсь напечатать число с плавающей запятой, используя ассемблер 8086 и tasm !!! Но я не знаю, как это сделать. У меня есть число в переменной, как это:print число с плавающей точкой ассемблер 8086

вар дд +3,14235565212

Можете ли вы мне помочь? Из проклятия номер находится в формате с плавающей точкой (вы знаете IEEE 754 или что-то в этом роде) спасибо

+0

Предполагая, что это * * является IEEE 754, вы можете найти подробные спецификации здесь: Http: // эн. wikipedia.org/wiki/IEEE_754-2008. Есть также некоторые рекомендации в * Art of Assembly Language: * http://books.google.com/books?id=094tYob7ipQC&pg=PA95&source=gbs_toc_r&cad=4#v=onepage&q&f=false –

+0

Вы должны использовать 3.1415926536 для поплавка около pi вместо. – hirschhornsalz

+2

@drhirsch: Я не согласен. В языке ассемблера на x86 вы обычно должны просто использовать 'fldpi'. –

ответ

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 

`

Смежные вопросы