【发布时间】:2015-08-16 02:05:21
【问题描述】:
我遇到了一个我无法理解的崩溃。这是可以理解的,因为我对 Assembly 还不太了解。我在 Visual Studio 2013 上使用 MASM。
所有代码都正常执行(我想。我有打印语句显示计算进行得很好)。但是当事情到程序结束时,它就崩溃了:未处理的异常5880,program.exe遇到了断点。
我觉得这意味着我应该清理 FPU 的寄存器堆栈。
所以我做了。我向一个未初始化的变量扔了一个 FSTP,但这并没有做任何事情。或者更确切地说,它没有解决任何问题。我做了更多的阅读,发现如果 FPU 存在未处理的异常,因为执行了其他非 FPU 指令,这可能会导致异常。所以我试着抛出一个fwait 给它时间来处理它的业务。它不处理垃圾。
我再次确定,我缺少一些简单的东西。这就是为什么我非常感谢有人向我指出这一点。
这是我的代码,如果有帮助的话。
TITLE Circular Area.asm
INCLUDE Irvine32.inc
.data
prompt BYTE "Please input the radius of the cirle whose area you wish to calculate: " , 0
answer BYTE "The area of the circle is: " , 0
debug BYTE "I'm at least getting this far. So the FPU isn't bugged." , 0
.DATA?
radius DWORD ?
rsquared DWORD ?
answerF REAL8 ?
.code
FINIT
main PROC
mov EAX, 0
mov EDX, OFFSET prompt
call WriteString
call ReadDec
mov radius, EAX
mul radius
mov rsquared, EAX
FLDPI
FIMUL rsquared
mov EDX, OFFSET answer
call WriteString
call WriteFloat
fwait
main ENDP
END main
【问题讨论】:
标签: assembly floating-point masm irvine32