采用英特尔风格的内联汇编

时间:2012-06-28 11:09:51

标签: c++ gcc assembly intel

我正在尝试使用gcc编译器在Code :: Blocks中编译一个旧的C ++软件项目,在解决了一些其他问题后,我发现了一个问题:该项目有一个带有Intel风格内联的文件ASM写成

_asm {
  code here
}

并且编译器拒绝使用"错误编译它:' _asm'未在此范围内宣布"。

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

2 个答案:

答案 0 :(得分:2)

GCC使用very different syntax作为内联汇编程序,因此您将无法通过微不足道的更改来处理它。我看到以下选项:

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

答案 1 :(得分:0)

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