Assembly 第8086/8087部分1/3=3?
我在使用fdiv时遇到了一个大问题!!!!我试图将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
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
的问题相同。