【发布时间】:2021-08-30 09:56:41
【问题描述】:
我试图了解如何使用 FPU 进行 64 位整数运算。我写这个(ATT语法):
fildq A
fildq B
faddp
fistpq C
C 中的结果是 A + B + 1。如果我从“finit”指令开始,它会给我正确的值 A + B。我认为不需要的 +1 可能是因为它添加了进位位,但是使用 gdb 时,当我使用 finit 时,我在 FPU 控制寄存器中看不到任何区别——在这两种情况下,控制寄存器都以 0x27F 开始,标记寄存器为 0xFFFF(= 堆栈空),而所有其他(包括所有条件位所在的状态寄存器)都为零。
在这里使用 finit 似乎有点生硬,而且我还想知道如果我不使用它,额外的 +1 来自哪里,因为所有 FPU 寄存器似乎都具有相同的值案例。谁能帮我解释一下?
【问题讨论】:
标签: x87