FBSTP存储错误的值

时间:2014-03-05 16:24:15

标签: assembly fpu

我正在编写一个计算arctan函数的程序。
完成所有工作的函数工作正常,但是当我尝试使用bcd-value fbstp命令存储奇怪的值和fstp存储正确的值。

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 个答案:

答案 0 :(得分:1)

英特尔指令集参考对fbstp说明了这一点:

  

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

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