如何在没有扩展内联asm的情况下在gcc内联汇编中声明和初始化局部变量?

时间:2013-01-04 10:09:58

标签: gcc scope inline-assembly local-variables

我知道这是一个非常基本的问题,但我真的被困在它上面。事实上,我绝对是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

正确的语法是什么?

1 个答案:

答案 0 :(得分:6)

GCC内联汇编程序不支持局部变量,借助堆栈指针定位变量或使用gcc的扩展语法: http://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html

如果您对AT& T语法感到不舒服,可以在gcc上使用Intel语法: http://xorl.wordpress.com/2009/01/01/intel-syntax-on-gcc/

这是关于GCC asm的优秀方法:http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html

相关问题