【问题标题】:How use _emit in clang?如何在clang中使用_emit?
【发布时间】:2019-04-10 17:37:47
【问题描述】:

clang编译器中如何使用_emit发出字节?

例如(在 MSVC 中):

#define emit_nop() _asm _emit 0x90

【问题讨论】:

  • clang 不支持_emit(至少我不知道)。您可以使用asm 关键字获得类似的效果,但我想知道您要达到什么目的。

标签: assembly clang inline-assembly llvm-clang emit


【解决方案1】:

在支持 GNU 扩展的编译器中,不需要单独的 emit 关键字,只需使用 GNU C 内联汇编:

asm(".byte 0x90");   // implicitly   asm volatile

.long 发出一个 32 位常量。

GNU C inline asm 没有被解析来检测clobbers或任何东西,所以你可以asm("nop");

如果您想使用修改寄存器的指令,您通常需要使用 GNU C 扩展内联汇编(输出/输入/clobbers)告诉编译器。见https://stackoverflow.com/tags/inline-assembly/info

【讨论】:

  • 谢谢你的回答,这正是我需要的。
  • @cYeR 虽然这是您问题的答案,但很有可能您问错了问题,而且这不是您需要的。
猜你喜欢
  • 1970-01-01
  • 2023-03-08
  • 2016-01-23
  • 2011-08-13
  • 2016-11-15
  • 1970-01-01
  • 1970-01-01
  • 2016-11-03
相关资源
最近更新 更多