首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在不扩展内联asm的情况下声明和初始化gcc内嵌程序集中的局部变量?

如何在不扩展内联asm的情况下声明和初始化gcc内嵌程序集中的局部变量?
EN

Stack Overflow用户
提问于 2013-01-04 10:09:57
回答 1查看 5.9K关注 0票数 5

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

我希望有局部变量(带标签的堆栈地址),而不使用扩展的内联程序集。类似于Intel语法中的以下代码:

代码语言:javascript
运行
复制
DATA1  DB  100 
MOV AL, DATA1

这是GCC的代码,我猜可以用它来代替:

代码语言:javascript
运行
复制
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

正确的语法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-10 07:54:43

GCC内联汇编程序不支持局部变量,请使用GCC的扩展句法

如果您对AT&T语法感到不舒服,那么有一些方法可以实现GCC使用Intel语法

这是一个极好的如何--论GCC asm

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14155046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档