5

我知道这是一个非常基本的问题,但我真的坚持下去。事实上,我绝对是 GCC 语法的新手。

我想在不使用扩展内联汇编的情况下拥有局部变量(带标签的堆栈地址)。类似于 Intel 语法中的以下代码:

DATA1  DB  100 
MOV AL, DATA1

这是我猜想可以在 GCC 中替代的代码:

int someFunction(int x)
{
    __asm__ volatile(
                     "function1:"
                     ".data;"
                     ".2byte $4 data1   ;"

                     ".text;"
                     "pushq %rbp;"
                     "movq %rsp , %rbp ;"

                     "movl var , %eax;"  // this is source of error

                     "popq %rbp;"
                     "leaveq;"
                     "retq ; "
                    ); 
}

但是这段代码会导致这个错误:

未找到体系结构 x86_64 的符号

我可以在 x86 中使用全局变量,但同样的结果出现在 x64 或 x86_x64 中。

设置:LLVM 4.1;Xcode 4 中使用的 Cocoa

什么是正确的语法?

4

1 回答 1

7

GCC 内联汇编器不支持局部变量,使用GCC 的扩展语法

如果您对 AT&T 语法感到不舒服,可以通过多种方式在 GCC 上使用 Intel 语法

这是GCC asm 的一个很好的操作指南

于 2013-01-10T07:54:43.523 回答