在DOS中,asm(“fldl%0”...),Intel语法?

问题描述 投票:0回答:1

我正在研究一个复古项目,试图在Borland Turbo C ++ / DosBox中编译一些测试代码。

我有这个功能:

double sin(double x){
   asm ("fldl %0;"
        "fsin;"
        "fstpl %0" : "+m"(x));
   return x;
}

我认为它返回x的sin值,但我失败了。

错误是:未定义的符号'fldl'

任何人都可以在Intel asm语法中解释这个功能吗?

我无法弄清楚,我只编写了16位DOS asm代码而没有浮点数。

亲切的问候/雅各布

assembly dos inline-assembly turbo-c++ x87
1个回答
2
投票

问题是目标CPU必须至少为386。

所以功能应该是:

double sin(double x){
    asm{
        fld qword ptr [x]
        fsin
        fstp qword ptr [x]
    }
    return x;
}

在.MODEL“size”之后我得到了类似的代码,用TASM编译.386

© www.soinside.com 2019 - 2024. All rights reserved.