如何修复此程序(asm中的浮点计算)

时间:2019-05-02 01:07:35

标签: gcc assembly floating-point inline-assembly x87

公式为T =2.01√(l) 该程序将使用上面的公式来计算摆的周期。

我需要使用浮点堆栈来进行计算。 当我尝试它时,出现错误提示 “ lab2.2.cpp:17:3:错误:未定义的命名操作数'y'   );“

#include<stdio.h>
using namespace std;

int calc(double x)
{
        double y = 2.01;
        double z;
        asm
        (
                " fldl %[x]    \n" //load x onto floating point stack
                " fld %%st     \n" //duplicate value on top of fp stack
                " fsqrt        \n" //square root st(0)
                " fmul %[y]    \n" //multiply by y
                " fstpl %[z]   \n"
                : [z] "=m" (z)
                : [x] "m" (x)
        );
        return z;
}

int main()
{
        double l, t;
        printf("Enter the length of pendulum: ");
        scanf("%f", &l);
        t = calc(l);
        printf("The period of a pendulum is %f\n", t);
}

如果可能的话,我也想简短地解释一下st(0)和st(1)代表什么。

0 个答案:

没有答案