【问题标题】:Can you do inline assemble in objective-c? [duplicate]你可以在objective-c中进行内联汇编吗? [复制]
【发布时间】:2012-07-10 15:22:24
【问题描述】:

可能重复:
How do I do inline assembly on the IPhone?

我正在运行 xcode4.2.1,我可以在代码中进行行汇编,即 __asm 吗?

【问题讨论】:

    标签: objective-c xcode


    【解决方案1】:

    这只是使用指定的内联和 asm() 调用的问题:

    inline void myFunction() {
        __asm__(//asm goes here);
    }
    

    CLANG 确实使用了类似但不同形式的 ASM(它仍然与 GAS 非常兼容,可以阅读 here

    【讨论】:

    • 还有一点点,如果你不指定输入和输出,你的代码将受制于优化器。您的内联程序集可能而且将会发生不好的事情:它将被打乱,破坏随机变量,甚至可以被优化器完全删除。
    • 是的。他会和 CANG 战斗的时候玩得很开心。如果您对此感到担心,只需输入 volatile 关键字即可。这会削弱大部分优化。
    • 对不起,这也是错误的。 Volatile 将阻止编译器移动或删除它,但它不会阻止编译器破坏变量或执行其他随机废话。见stackoverflow.com/questions/8891139/…
    • 嘿,我说的是残废,不是删除。
    • 但是它不会影响很多优化,它只是防止了两件事:代码从程序集的一侧移动到另一侧,以及批量删除。第一个优化是你通常想要的,所以禁用它是不好的。如果您首先正确标记寄存器,则不会发生第二次优化。所以没有意义,这只是程序员在他们的程序集中撒的一堆巫术魔法,因为它曾经为他们工作过,一次,在一个编译器上。您的 asm 几乎可以肯定不是 volatile 并且这样标记它是错误的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 2012-05-16
    • 2021-06-30
    • 2011-02-19
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    相关资源
    最近更新 更多