如何在 gcc 内联汇编中声明和初始化局部变量而不使用扩展内联 asm?

2024-04-16

我知道这是一个非常基本的问题,但我真的很困惑。事实上我绝对是 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(使用前将#替换为@)

如何在 gcc 内联汇编中声明和初始化局部变量而不使用扩展内联 asm? 的相关文章

  • JavaScript作用域问题

    我正在调用此函数 将结果分配给回调中的变量 然后记录结果 但我一直未定义 var id test getID function result id result console log id 如果我将其更改为下面的代码 那么我可以看到记录的
  • 从覆盖率报告中删除自动生成的异常代码

    让我们从一个最小的工作示例开始 主要 cpp include
  • php从函数返回中访问数组值

    愚蠢的php问题 为什么我不能这样做 echo Auth getFullUser country 相反你必须这样做 user Auth getFullUser echo user country 不幸的是 语法不允许这样做 AFAIK 曾经
  • 有没有一种简单的方法对编译器输出进行颜色编码?

    gcc 或其他编译器 经常生成大量文本输出 并且很难看出错误在哪里或错过警告 我已经做了一些搜索 但还没有找到一个干净简单的解决方案来对编译器输出进行颜色编码 例如警告是黄色 错误是红色等 gcc 4 9好像添加了这个功能 https gc
  • 如何与android的静态boost库链接?

    我在使用 Android ndk r5b 将 boost 库移植和链接到 android 时遇到问题 我首先使用以下步骤构建 boost 库 没有 mpi python 1 注释掉boost 1 46 0 libs thread build
  • 为 ARM 交叉编译 zlib

    我尝试为arm poky linux gnueabi交叉编译zlib 但启动 make 时出现错误 zlib 1 2 11 AR HOST ar CC HOST gcc RANLIB HOST ranlib configure prefix
  • 在 Linux 中生成相同的数字,但在 Windows 中则不然

    下面的代码旨在生成区间 1 100 中的五个伪随机数的列表 我播种default random engine with time 0 它返回系统时间UNIX时间 https en wikipedia org wiki Unix time 当
  • GCC 配置文件引导优化 (PGO) 收集哪些信息以及哪些优化使用这些信息?

    当我启用时 GCC 会收集哪些信息 fprofile generate以及哪个优化实际上使用了收集到的信息 当设置 fprofile use flag 我这里需要引用 我搜索了一段时间但没有找到任何记录 有关链接时间优化 LTO 的信息将是
  • 为 iOS6.0 ARMv7 处理器构建 FFMPEG 库

    WARNING 我刚刚被另一位用户告知 在 iOS 上使用 FFMPEG 存在一些法律问题 请在此处留下链接http multinc com 2009 08 24 compatibility Between the iphone app s
  • 如何在 ubuntu 20 中安装旧版本的 gcc -3 或 gcc-4

    我正在尝试安装旧版本的 gcc 4enter code here对于我的ubuntu创建构建目录 mkdir gcc build cd gcc build 下载源文件 wgethttp www netgull com gcc release
  • 编译时出现 C++ 错误

    我正在尝试编译一个游戏 但收到 100 多个错误 例如 C Users AppData Local Temp cctQCagR o In function load image std string main cpp text 0x4bd4
  • 上下文保留评估

    我们正在构建一个小型 REPL 来评估 使用eval 用户输入的 JavaScript 表达式 由于整个事情是事件驱动的 因此评估必须在单独的函数中进行 但必须在调用之间保留上下文 即所有声明的变量和函数 我想出了以下解决方案 functi
  • 使用 i386 arch 而不是 x86_64 在 OSX 上构建 libFLAC

    我正在尝试构建 libFLAC 以在我的项目中使用 但是当涉及到链接时 GCC 会忽略该库 因为它说它不是为当前体系结构 i386 构建的 当我以 64 位编译程序时 它正确链接了库 这意味着该库是针对 x86 64 架构编译的 不幸的是
  • “yield”不是“std::this_thread”的成员

    我试图产生当前线程 std this thread yield 但不幸的是 海湾合作委员会更清楚 yield 不是 std this thread 的成员 我是否忘记了一些类似于 D GLIBCXX USE NANOSLEEP 的 hack
  • STM32:从自定义引导加载程序跳转到应用程序时发生硬故障

    我正在开发带有自定义引导加载程序和应用程序的 STM32F401 MCU 编译器是GCC 5 2 1 没有运行优化 在以下跳转序列后的第一次中断后 我遇到了硬故障 引导加载程序 gt 应用程序 gt 引导加载程序 gt 应用程序 从引导加载
  • JavaScript 变量作用域

    我遇到了 JavaScript 全局变量 称为 TimeStamp 未在加载时定义的问题 至少我认为这就是问题所在 我从这里开始 定义时间戳 document ready function AddTest var TimeStamp nul
  • 编译器:如果条件始终为真/假怎么办

    我想到了条件和编译器 我正在为 Arduino 编写一个应用程序 因此我需要该应用程序尽可能快 在我的代码中我有这个 define DEBUG false if DEBUG String pinName pinName Pin pinNam
  • 使用 jQuery 加载脚本时保持范围

    假设我有一个包含以下内容的文件 test js var test something 然后我有一个主要脚本需要加载 test js 以获取测试变量 显然这有效 ajax dataType script cache true url test
  • 在 python 中检查堆栈中的局部变量

    我编写了一个小函数 它在堆栈中查找一级并查看其中是否有变量 但是我如何将这个函数变成一个可以在堆栈中一直查找直到找到一个局部变量并购买某个特定名称的函数 import inspect def variable lookup variable
  • 如何在 g++ 中使用不同的 STL

    我想对 g 使用不同的 STL 而不是其默认的 libstdc 做到这一点最简单的方法是什么 我发现 nostdinc 标志禁止 g 查找其 STL 标头 但这只是编译时的事情 它仍然会使 g 链接到它自己的 STL 所以我需要找到一种方法

随机推荐