使用从FPU返回的浮点数

时间:2016-06-18 19:00:02

标签: c++ x86 nasm

我几天前问了一个类似的问题,当时非常不精确,所以这里有一个更详细的帖子。所以我目前正在使用NASM编写x86 32位程序集,我想在c ++程序中使用我的自定义函数。我在使用返回值时遇到了问题。

以下是我在汇编中的示例代码:

section .data
value: dq 1.0
section .text
global _arsinh
_arsinh:
    fld dword[esi-8]      ;loads the given value into st0
    ret

以下是我在c ++中的示例/测试代码:

#include <iostream>
extern "C" float arsinh(float);

int main()
{
    float test = arsinh(5.0);
    printf("%f\n", test);                    //Displays -96715160...
    printf("%f\n", arsinh(5.0));             //Displays -96715160...
    std::cout << test << std::endl;          //Displays -9.671512e+24
    std::cout << arsinh(5.0) << std::endl;   //Displays 5
}

所有汇编代码都是从堆栈加载给定值(在本例中为5.0)并将其存储在st0中。我现在遇到的问题是,除了最后一个打印语句之外的所有语句都显示错误的值(不是5.0)。我假设问题是我正在加载dword而不是qword,因为以下代码可以正常运行(显示正确的值):

section .data
value: dq 1.0
section .text
global _arsinh
_arsinh:
    fld qword[value]      ;loads value into st0
    ret

我想将返回的值保存到float中,然后用它在c ++ / c中做一些额外的计算,但我似乎无法弄清楚如何做到这一点,因为我别无选择,只能将给定值作为双字加载。

0 个答案:

没有答案