【问题标题】:How to use uninitialized data in GCC inline assembly如何在 GCC 内联汇编中使用未初始化的数据
【发布时间】:2011-04-17 02:35:32
【问题描述】:

我想使用 GCC 内联汇编,Intel 语法。

是否有与我在 NASM 中所做的相同的操作:

myvar resb 1024

myvar 位置保留 1024 字节内存? GCC 似乎不喜欢它:

Error: no such instruction: `myvar resb 1024'

int main () {
    asm("myvar resb 1024");
    return 0;
}

【问题讨论】:

    标签: assembly intel inline-assembly


    【解决方案1】:

    如果您混合使用 C 和内联汇编,您应该让 C 编译器处理内存分配。将您的内存声明为 char myvar[1024] 并根据需要从内联程序集中引用它。您可能可以直接访问它,但最好将其作为 arg 传递给 asm() 并让编译器为您选择寻址格式。

    【讨论】:

    • 这是否意味着 GCC 将始终忽略 resbs,即使我自己将程序集在 .s 文件中写入适当的区域?
    • 当你使用 GCC 时,你正在使用 GAS 进行组装,它的语法与 NASM 不同(如果你想要 resb,你必须习惯它)。如果您将正确的命令(例如.lcomm)放在正确的部分,GAS 将为您保留空间。签出:ibm.com/developerworks/linux/library/l-gas-nasm/index.html。但是,我认为您最好在 C 中为混合代码进行分配。
    猜你喜欢
    • 2012-03-07
    • 1970-01-01
    • 2012-10-20
    • 2011-01-07
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多