对FLD m64fp指令感到困惑

时间:2014-05-25 08:13:40

标签: assembly fpu

所以我对FLD m64fp指令有很多疑问,其中一个例子就是:

内存中的八个连续字节包含十六进制值01,00,00,00,00,00,00,00.执行FLD m64fp指令。它的参数是这八个连续字节中第一个的地址。作为FLD指令的结果,ST(0)中的值现在为:

  1. 2 ^ -1075
  2. 2 ^ -1074
  3. 2 ^ -1023
  4. 2 ^ -1022
  5. 这是一个家庭作业问题,所以我不是要求答案,但我对正在发生的事情感到困惑。我花了几天时间阅读关于FPU寄存器的内容,但我发现很多东西并不能解决这个问题。这些值中的所有八个都是最初加载到寄存器中的吗?如果是这样,当寄存器已满时调用FLD会发生什么?我很困惑。任何帮助表示赞赏。谢谢!

2 个答案:

答案 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)

以下是您可以查看的内容的一些提示:

  • x86 endianness。
  • 8087堆栈的组织方式以及FLD和FILD的说明如何影响它。
  • 如何解释由两种指令类型访问的内存。

维基百科有关于8087 / x87和ieee754标准的文章,你可能想看一下。