我知道这是一个非常基本的问题,但我真的很困惑。事实上我绝对是 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
正确的语法是什么?
GCC内联汇编器不支持局部变量,请使用GCC的扩展语法 https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html.
如果您对 AT&T 语法感到不舒服,可以通过以下方法在 GCC 上使用 Intel 语法 https://xorl.wordpress.com/2009/01/01/intel-syntax-on-gcc/.
这是一个优秀的GCC asm 操作指南 https://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)