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