-2
我試圖用匯編8086和tasm打印浮點數!但我不知道如何做到這一點。 我有這樣的變量數量:打印浮點數彙編8086
VAR DD 3.14235565212
你能幫助我嗎?詛咒的數字是浮點格式(你知道IEEE 754或類似的東西) 謝謝
我試圖用匯編8086和tasm打印浮點數!但我不知道如何做到這一點。 我有這樣的變量數量:打印浮點數彙編8086
VAR DD 3.14235565212
你能幫助我嗎?詛咒的數字是浮點格式(你知道IEEE 754或類似的東西) 謝謝
假設你有一個浮點單位可用(幾乎給定,不再),簡單的方法是將其轉換以BCD格式使用FBSTP,然後使用CPU將個別數字轉換爲ASCII/ISO/Unicode /無論如何。
試試這個代碼。但你必須聲明變量是一件容易的事情:)
`
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
`
假設這是* * 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
您應該使用3.1415926536作爲pi附近的浮動代替。 – hirschhornsalz 2012-03-25 22:33:05
@drhirsch:我不同意。在x86上的彙編語言中,通常應該使用'fldpi'。 – 2012-03-25 23:45:01