如果我使用fsin查找实数的sin值。我发现和表达语法错误。我在Dos上使用Turbo C ++ 3.0。

我一直在寻找x87 fpu中的指令列表。我试图谷歌一些信息。并将我在编译器设置上的指令集参考从8087更改为80287。

 #include<stdio.h>
    #include<math.h>

void main(){
    double a = 1.98,val;
    asm{
    fld a
    fsin
    fstp val
    }
    printf("%f", val);
}


表达式sntax错误:fsin

最佳答案

fsinfcosfsincos指令直到80387才可用。您使用的Turbo-C ++版本中,编译器没有意识到这些指令。如果您在模拟80387或物理80387的环境中运行程序,则可以考虑使用fsin指令对db指令进行编码。根据指令集体系结构参考,fsin指令被编码为D9 FE。您的代码可能如下所示:

#include<stdio.h>
#include<math.h>

void main(){
    double a = 1.98,val;
    asm{
        fld a
        db 0d9h, 0feh
        fstp val
    }
    printf("%f", val);
}


注意:此代码在没有FPU的系统上将无法正确运行,也无法在具有8087或80287 FPU的系统上运行。



80387 Programmers Reference Manual 1987具有用于8087、80287和80387处理器的兼容性表,该表描述了此处理器系列支持的功能:

assembly - 如果我在程序中使用fsin查找值的sin,我会发现表达式语法错误-LMLPHP

关于assembly - 如果我在程序中使用fsin查找值的sin,我会发现表达式语法错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57461745/

10-11 22:39