师8086/8087 1/3 = 3?

时间:2012-03-25 04:22:20

标签: assembly x86 tasm fpu x87

我使用fdiv时遇到了很大问题!我试图划分1/3所以这就是我做的事情

.model small
.stack 100h 
.data 

var1 dd 1
var2 dd 3 
var3 dd 2
resultado dt 0.0

.code 

mov ax,@data 
mov ds,ax 
finit 
fild var1
fild var2
fdiv
fstp resultado
ffree 

.exit 

正如您所看到的,我将结果移至resultado因为我无法在st(0)中看到结果(我使用的是tasm所以我只能在调试器中看到变量)结果应该是是3EAAAA3A但是我得到40400000 ......那是3 !!!这怎么可能??我试过交换变量而没有!你能帮助我吗?? =(

2 个答案:

答案 0 :(得分:5)

如果FPU与8087一样旧,则必须在fwait之后放置fdiv指令。否则,您可能会在FPU仍在执行除法时从FPU读取结果,并且您回写的结果未定义。

此功能已在80287 FPU中删除。

答案 1 :(得分:1)

所提供的代码未显示所述问题。它用FDIV计算0.3(3)(它实际上是FDIVP ST(1), ST,因此它将ST(1)= 1.0除以ST(0)= 3.0)然后将其存储为10字节的序列( AB AA AA AA AA AA AA AA 3F)resultado