2014-03-05 53 views
0

我在写一个计算arctan函数的程序。
功能,所有的工作正常,但是当我尝试获得bcd值fbstp命令存储奇怪的值和fstp存储正确的值。FBSTP商店错误值

segment data 
result: resb 10 
tmp_val: dd 000000000h 
precs: dq 03a83126fh ; 0.001 
arg:  dd 03f800000h ; 0.7 

segment code 
..start: 

mov ax,data 
mov ds, ax 
finit 

call calc_value 
fst dword[tmp_val] 
fbstp tword [result] 

mov ax, 4C00h 
int 21h 

而在tmp_val执行在存储器 后:0x3f490edb(0.785383)
和结果:0x0000000000000000001

而我写这对于DOS

回答

1

英特尔指令集的参考表示,这为fbstp

如果源值是非整数值,则将其四舍五入为 整数值,根据由 的RC字段指定的舍入模式,FPU控制字。

因此,1的结果听起来是正确的。

+0

哦。我很愚蠢= _ = 嗯。然后如何打印浮点值? – oleeq2

+0

这可能不是最有效的方法,但可以分成整数和小数部分,打印整数,然后将小数部分乘以10^n(其中n是所需数位数),并在小数点后打印点(具有适当数量的前导和尾随零)。 *实际上你甚至不需要分割,只需在'fbstp'之前进行乘法运算,然后适当放置小数点即可。 – Jester