Assembly 将值写入8087';将堆栈的顶部添加到内存中的变量

Assembly 将值写入8087';将堆栈的顶部添加到内存中的变量,assembly,x86-16,Assembly,X86 16,我刚刚在我的旧286计算机上安装了一个数学协处理器,我一直在汇编它的指令集 我拥有8086 CPU的《英特尔程序员参考》,其中有一个很长的章节介绍8087的编程。我从那一节学到了几乎所有我需要知道的东西,但它从来没有提到如何将一个值从8087的寄存器堆栈转移到内存变量中 除了弹出堆栈并在寄存器堆栈内交换数据外,似乎没有任何8087指令用于移动数据 那么,如何将st(0)转换为内存中的临时实数变量呢 您是否错过了FST的FST指令?对于拥有真正的286,您投了赞成票。对于8087的指令,您仍然可以

我刚刚在我的旧286计算机上安装了一个数学协处理器,我一直在汇编它的指令集

我拥有8086 CPU的《英特尔程序员参考》,其中有一个很长的章节介绍8087的编程。我从那一节学到了几乎所有我需要知道的东西,但它从来没有提到如何将一个值从8087的寄存器堆栈转移到内存变量中

除了弹出堆栈并在寄存器堆栈内交换数据外,似乎没有任何8087指令用于移动数据


那么,如何将st(0)转换为内存中的临时实数变量呢

您是否错过了FST的
FST
指令?对于拥有真正的286,您投了赞成票。对于8087的指令,您仍然可以使用or和。谢谢,我确实错过了FST指令。不过,我得到了错误的结果。以下是我正在使用的指令
FLD testVar
(testVar=2)
FADD testVar2
(testVar2=3)
FST DWORD PTR shortReal
shortReal中的值显示为FF C000 00,它似乎不是有效的标准化短实数。这将值保留在x87堆栈上。尝试
fld testVar
/
fadd testVar2
/
fstp shortReal
。另请参见中的x87教程链接。内存操作数。哦,那个FF C000是NaN,对吗?您可能在x87寄存器堆栈已满的情况下运行了测试,因此出现了一个错误。@Peter Cordes-谢谢,问了这个问题大约一个小时后,我发现是我造成了堆栈溢出。我没有意识到,即使在程序结束后,值仍然驻留在8087堆栈中。