【问题标题】:Gnu as suffix or opperand errorGnu 作为后缀或操作数错误
【发布时间】:2016-02-21 08:05:19
【问题描述】:

编译旧源代码时出现后缀或操作数错误。它是从内联汇编代码生成的。

ltr (unsigned val)

asm 

    ("ltr %%eax /n/t"
     :
     : "a"  (val)
);

我已经阅读了很多网页/论坛来查找语法错误,但一切都告诉我代码是正确的。 我在 Mandriva 10 操作系统上使用 gcc 4.4.1

【问题讨论】:

    标签: c gcc inline gnu-assembler


    【解决方案1】:

    使用反斜杠结束行。

    其次,它需要 16 位参数,即:

    ("ltr %%ax \n\t"
    

    或者凭记忆:

    ("ltr (%%eax) \n\t"
    

    【讨论】:

    • 第三,没有理由在一行 asm 中使用 \n\t。第四,不需要强制使用 eax,因为 ltr 支持任何 16 位寄存器甚至内存,所以可能类似于 asm ("ltr %w0" : : "qm" (val));。最后(可能也是最重要的),ltr 只能在内核内部使用。除非您正在编写操作系统或设备驱动程序(我怀疑这是 OP 试图做的),否则它不会工作。
    猜你喜欢
    • 1970-01-01
    • 2016-03-31
    • 2016-06-17
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 2018-02-14
    • 2011-12-10
    相关资源
    最近更新 更多