如果我使用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
最佳答案
fsin
,fcos
和fsincos
指令直到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,我会发现表达式语法错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57461745/