Assembly 对FLD m64fp指令感到困惑

Assembly 对FLD m64fp指令感到困惑,assembly,fpu,Assembly,Fpu,所以我对FLD m64fp指令有多个问题,一个例子是: 内存中的八个连续字节包含十六进制值01、00、00、00、00、00、00、00。执行FLD m64fp指令。它的参数是这八个连续字节中第一个字节的地址。根据FLD指令,ST(0)中的值现在为: 2^-1075 2^-1074 2^-1023 2^-1022 这是一个家庭作业问题,所以我不是在问答案,但我对正在发生的事情感到困惑。在过去的几天里,我一直在阅读FPU寄存器的相关内容,但我没有发现多少东西可以让这个问题变得易懂。这八个值最初都加

所以我对FLD m64fp指令有多个问题,一个例子是:

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

  • 2^-1075
  • 2^-1074
  • 2^-1023
  • 2^-1022

  • 这是一个家庭作业问题,所以我不是在问答案,但我对正在发生的事情感到困惑。在过去的几天里,我一直在阅读FPU寄存器的相关内容,但我没有发现多少东西可以让这个问题变得易懂。这八个值最初都加载到寄存器中了吗?如果是这样,当寄存器已满时调用FLD会发生什么情况?我很困惑。感谢您的帮助。谢谢

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

    • x86端性
    • 8087堆栈是如何组织的,指令FLD和FILD是如何影响它的
    • 如何解释两种指令类型访问的内存

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

    m64fp
    代表64位内存地址。如果变量被适当地声明(DQ、REAL8或类似),汇编程序应该足够聪明,可以选择正确的
    FLD
    指令。64位是8个字节,因此FLD一次加载8个字节(关键字:little endian)

    该值将“推送到FPU堆栈上”,即ST(6)变为ST(7),ST(5)变为ST(6),ST(4)变为ST(5)。。。ST(0)变为ST(1),ST(0)变为
    FLD
    中的值。如果堆栈已满
    FLD
    失败,但这可能不是您作业的一部分