gcc 中的英特尔式内联程序集

Intel-style inline assembly in gcc

本文关键字:程序集 英特尔 gcc      更新时间:2023-10-16

我正在尝试使用 gcc 编译器在 Code::Blocks 中编译一个旧的C++软件项目,在修复了一些其他问题后,我遇到了障碍:该项目有一个带有英特尔风格内联 ASM 的文件,写为

_asm {
  code here
}

并且编译器拒绝编译它,并显示"错误:'_asm'未在此范围内声明"。

我花了一段时间在谷歌上搜索寻找解决方案,但我能找到的唯一解决方案是将-masm=intel添加到构建选项中(我已经尝试过但无法工作),或者将代码转换为asm ("code here");(由于 ASM 的数量庞大,这是不可行的)。有谁知道如何让 gcc 按原样编译此代码,或者我应该放弃并使用不同的编译器?

GCC 对内联汇编程序使用非常不同的语法,因此您将无法通过琐碎的更改来处理它。我看到以下选项:

  1. 用 GCC 语法或 C 代码重写所有内容
  2. 制作一些脚本以转换为 GCC 语法(非平凡的任务)
  3. 使用编写代码
  4. 的任何编译器编译代码(MSVC?

你根本无法让 gcc "按原样"编译代码。如果你需要使用 gcc 编译这个东西,你必须用 C++ 或 gcc 兼容的 asm 重写代码。如果真的有很多汇编代码——比如 200 条指令或更多——那么学习 gcc 汇编程序语法可能是值得的;如果没有,请用C++编码。