【问题标题】:What is the equivalent of _emit on Linux?Linux 上的 _emit 等价物是什么?
【发布时间】:2009-04-08 19:14:52
【问题描述】:

我正在尝试将一些用 Visual Studio 编写的汇编代码移植到 Linux 上的 GNU 内联汇编中。原始代码使用_emit,MSDN 将其描述为伪指令,并解释为:

_emit 伪指令类似于 MASM 的 DB 指令。您使用 _emit 在当前文本段的当前位置定义单个立即字节。但是,_emit 一次只能定义一个字节,并且只能定义文本段中的字节。它使用与 INT 指令相同的语法。

如何在 Linux 上做同样的事情?

【问题讨论】:

    标签: linux gcc assembly


    【解决方案1】:

    要发出字节 0x12(例如),请执行以下操作:

    asm __volatile__ (".byte 0x12");
    

    不过,启用优化后您可能会得到令人惊讶的结果。

    【讨论】:

    • 使用__volatile__(或者在现代编译器上只是volatile)即使启用了优化也不应该有任何问题。编译器必须在指定的位置发出字节(当然,周围的代码可能会进行大量优化......)。
    猜你喜欢
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 2017-04-03
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多