如果我使用 fsin 求实数的 sin 值。我发现表达式语法错误。我#m在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);
}
表达式语法错误:fsin
最佳答案
fsin
、fcos
和 fsincos
指令直到 80387 才可用。您的编译器在 Turbo 版本中无法识别这些指令-您正在使用的C++。如果您在模拟 80387 或存在物理 80387 的环境中运行程序,则可以考虑使用 db
指令对 fsin
指令进行编码。根据指令集架构引用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/