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

标签 assembly inline x86-16 turbo-c++ x87

如果我使用 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

最佳答案

fsinfcosfsincos 指令直到 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 处理器的兼容性表,描述了该处理器系列支持的功能:

enter image description here

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

相关文章:

c - GCC 将寄存器 args 放置在堆栈上,并在局部变量下方留有间隙?

assembly - 系统调用所请求文件的 INFO(如果存在)

linux - 组装 NASM x86 - 简单堆栈项目

c++ - 内联构造函数可以在 C++ 中使用初始化列表吗?

css - 问题放置复选框和内联文本

css - 显示内联 block 以正确的方式实现这一点

assembly - 在引导加载程序中使用的正确调用约定是什么?

assembly - 启动 x86 机器上的默认寄存器和段值

c++ - 是否可以修改内存中的函数?

c - 调试 C 程序(int 声明)