所以我对FLD m64fp指令有很多疑问,其中一个例子就是:
内存中的八个连续字节包含十六进制值01,00,00,00,00,00,00,00.执行FLD m64fp指令。它的参数是这八个连续字节中第一个的地址。作为FLD指令的结果,ST(0)中的值现在为:
这是一个家庭作业问题,所以我不是要求答案,但我对正在发生的事情感到困惑。我花了几天时间阅读关于FPU寄存器的内容,但我发现很多东西并不能解决这个问题。这些值中的所有八个都是最初加载到寄存器中的吗?如果是这样,当寄存器已满时调用FLD会发生什么?我很困惑。任何帮助表示赞赏。谢谢!
答案 0 :(得分:2)
m64fp
代表64位内存地址。如果变量被适当声明(DQ,REAL8或类似),汇编器应该足够聪明以选择正确的FLD
指令。 64位是8个字节,因此FLD一次加载8个字节(关键字:小端)。
该值将被"推到FPU堆栈",即ST(6)变为ST(7),ST(5)变为ST(6),ST(4)变为ST(5) ... ST(0)变为ST(1),ST(0)变为FLD
的值。如果堆栈已满FLD
失败,但这可能不是您作业的一部分。
HTH
答案 1 :(得分:0)
以下是您可以查看的内容的一些提示:
维基百科有关于8087 / x87和ieee754标准的文章,你可能想看一下。