【问题标题】:inline asm call gives error内联 asm 调用给出错误
【发布时间】:2014-08-24 02:24:00
【问题描述】:

我在 C 函数中使用汇编代码。但是 gcc 给出了以下代码的unsupported instruction 'mov' 错误:

uint32_t faulting_address;
asm volatile("mov %%cr2, %0" : "=r" (faulting_address));  

我不明白这有什么问题。

【问题讨论】:

  • GCC's inline assembly 使用 AT&T 语法。
  • 谢谢,我试过asm volatile("movl $0, %%cr2" : "=r" (faulting_address)),但没有任何变化。

标签: c gcc inline-assembly


【解决方案1】:

语法是正确的,但错误很可能是因为您正在为 64 位目标进行编译,在这种情况下,mov 需要为 64 位。只需将faulting_address 更改为uint64_t 即可编译。

或者,如果您希望它是 32 位,则需要使用 -m32 或其他类似选项来编译 32 位目标。

【讨论】:

  • -m32 为我工作,谢谢。我应该使用 -melf_i386 来链接这些文件吗?
猜你喜欢
  • 2019-07-10
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-14
  • 1970-01-01
  • 2018-09-18
  • 1970-01-01
相关资源
最近更新 更多