Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 第8086/8087部分1/3=3?_Assembly_X86_Tasm_Fpu_X87 - Fatal编程技术网

Assembly 第8086/8087部分1/3=3?

Assembly 第8086/8087部分1/3=3?,assembly,x86,tasm,fpu,x87,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

我在使用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
!!!这怎么可能??我试着交换变量,但什么都没有!!!你能帮我吗=(

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


此“功能”已在80287 FPU中删除。

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


此“功能”已在80287 FPU中删除。

显示的代码未显示所述问题。它使用
FDIV
计算0.3(3)(实际上是
FDIVP ST(1),ST
,因此它将ST(1)=1.0除以ST(0)=3.0),然后将其存储为10个字节的序列(AB AA FD 3F)在
resultado
中,呈现的代码没有显示出所述的问题。它使用
FDIV
计算0.3(3)(实际上是
FDIVP ST(1),ST
,因此它将ST(1)=1.0除以ST(0)=3.0),然后将其存储为10个字节的序列(AB AA FD 3F)编译上述代码时,TASM将自动插入到
resultado

中。@Alvarofalas:将有帮助的答案标记为答案。TASM将编译上述代码时自动插入
FWAIT
。@Alvarofalas:将有帮助的答案标记为答案。向我们显示实际代码或汇编并链接a实际代码。显示的代码末尾缺少
END
。如果ASM文件中没有
END
,TASM可能无法从该.ASM文件中生成新的.OBJ文件,因此您可能正在链接、执行和调试一个程序,该程序是您在过去某个时候汇编的,当时该程序中有
END
。此外,
FSTP存储10个字节,而不是4个。这可能是由
END
的相同问题造成的。显示实际代码或汇编并链接实际代码。显示的代码末尾缺少
END
。如果ASM文件中没有
END
,则TASM可能无法从该.ASM文件生成新的.OBJ文件因此,您可能正在链接、执行和调试一个您在过去某个时候组装的程序,而该程序中有
END
。此外,此代码中的
FSTP
存储10个字节,而不是4个。这可能与
END
的问题相同。