在 GNU 汇编器宏中引用操作数/参数

2023-12-01

我目前正在尝试理解的概念汇编语言中的宏,特别是在 GNU 汇编器中,IA-32 (x86) 的 AT&T 语法。我大学的幻灯片内容如下:

# How to define a macro:
.macro write string
    movl string, %esi
    call printstr
.endm

# How to use a macro:
write aString

但是,这对我不起作用。我在用gcc编译我的代码。

.data
    msg:    .string "The result is %d.\n"

.text
.global main

.macro add_3 n
    movl n, %eax
    addl $3, %eax
.endm

main:
    add_3 $39
    pushl %eax
    pushl $msg
    call printf
    popl %eax
    popl %eax
    movl $1, %eax
    int $0x80

当我尝试编译它时,出现以下错误:

undefined reference to `n'

我究竟做错了什么?


要引用宏内部的参数,请在名称前面添加反斜杠。 例如:

.macro  add_3  n
    movl \n + 3, %eax
.endm

气体手册:https://sourceware.org/binutils/docs/as/Macro.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 GNU 汇编器宏中引用操作数/参数 的相关文章

  • ARMv8 A64 汇编中立即值的范围

    我的理解是 ARMv8 A64 汇编中的立即参数可以是 12 位长 如果是这样的话 为什么这行汇编代码是 AND X12 X10 0xFEF 产生此错误 使用 gcc 编译时 Error immediate out of range at
  • 无法将 C 代码链接到 lapack / blas:未定义的引用

    我已经尝试了好几个小时了 这让我发疯 我得到的最后一个错误是 demo cblas c text 0x83 undefined reference to clapack sgetrf demo cblas c text 0xa3 undef
  • 程序集比较标志理解

    我正在努力理解汇编程序中的以下代码片段 if EAX gt 5 EBX 1 else EBX 2 在汇编程序中 可以写如下 根据我的书 模拟jge操作说明 https www felixcloutier com x86 jcc您通常会使用
  • 为什么 ld 无法从 /etc/ld.so.conf 中的路径找到库?

    我想添加 opt vertica lib64进入系统库路径 所以我执行以下步骤 1 添加 opt vertica lib64 into etc ld so conf 然后运行ldconfig 2 检查 bash ldconfig p gre
  • CPU寄存器和多任务处理

    我目前正在学习汇编 我很困惑 CPU 寄存器如何与多任务一起工作 所以在多任务系统中 CPU可以随时暂停某个程序的执行并运行另一个程序 那么在这一步中寄存器值是如何保存的呢 寄存器是压入堆栈还是以其他方式 CPU 寄存器如何与多任务一起工作
  • 阴影空间示例

    EDIT 我接受了下面的答案 并添加了我自己的代码的最终修订版 希望它向人们展示影子空间分配的实际示例 而不是更多的文字 编辑 2 我还设法在 YouTube 视频 所有内容 的注释中找到了一个调用约定 PDF 的链接 其中有一些关于 Li
  • 如何将输入传递到扩展汇编中?

    考虑这段代码 来自我的先前的问题 https stackoverflow com questions 37955538 segfault on movq instruction int main asm movq 100000000 rcx
  • 为什么 GCC 交叉编译不构建“crti.o”?

    在尝试为arm构建gcc 4 x x交叉编译器时 我陷入了缺失的困境crti o文件在 BUILD DIR gcc子目录 An strace在顶层Makefile表明编译后的xgcc正在调用交联器ld with crti o 作为一个论点
  • 设置 IRQ 映射

    我正在遵循一些教程和参考文献来尝试设置我的内核 我在教程中遇到了一些不熟悉的代码 但根本没有解释它 这是我被告知映射的代码16 IRQs 0 15 到 ISR 地点32 47 void irq remap void outportb 0x2
  • X86 预取优化:“计算 goto”线程代码

    我有一个相当重要的问题 我的计算图有循环和多个 计算路径 我没有制作一个调度程序循环 其中每个顶点将被一一调用 而是将所有预先分配的 框架对象 放置在堆中 代码 数据 这有点类似于线程代码 甚至更好 CPS 只是在堆中跳转 执行代码 每个代
  • 为什么 clang 使用 -O0 生成低效的 asm(对于这个简单的浮点和)?

    我正在 llvm clang Apple LLVM 版本 8 0 0 clang 800 0 42 1 上反汇编此代码 int main float a 0 151234 float b 0 2 float c a b printf f c
  • 使用 mingw32 在 Windows 上构建 glew 时“DllMainCRTStartup@12”的多个定义

    我关注了这个主题 使用 mingw 使建筑物在 Windows 上闪闪发光 https stackoverflow com questions 6005076 building glew on windows with mingw 6005
  • arm-linux-gnueabi 编译器选项

    我在用 ARM Linux gnueabi gcc在 Linux 中为 ARM 处理器编译 C 程序 但是 我不确定它编译的默认 ARM 模式是什么 例如 对于 C 代码 test c unsigned int main return 0x
  • C99 中数组的静态大小[重复]

    这个问题在这里已经有答案了 一个非常简单的 C 程序 include
  • 错误 LNK2019:函数 main 中引用的外部符号无法解析

    我正在尝试在 C 中运行我的简单汇编代码 我只有两个文件 cpp 文件和 asm 文件 编译时出现错误 见下文 如果有人可以提供帮助 我将不胜感激 这是我的 main cpp 文件 include
  • 高效memcspn

    有谁知道 memcspn 函数的有效实现吗 它的行为应该类似于 strcspn 但在内存缓冲区中查找跨度 而不是在以 null 结尾的字符串中查找跨度 目标编译器是 VisualC 谢谢 卢卡 一种近乎最佳的实现 size t memcsp
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • 为什么 Linux perf 使用事件 l1d.replacement 来处理 x86 上的“L1 dcache misses”?

    在英特尔 x86 上 Linux用途 https stackoverflow com a 52172985 149138事件l1d replacements来实施其L1 dcache load misses event 该事件定义如下 计数
  • 从类模板参数为 asm 生成唯一的字符串文字

    我有一个非常特殊的情况 我需要为类模板中声明的变量生成唯一的汇编程序名称 我需要该名称对于类模板的每个实例都是唯一的 并且我需要将其传递给asm关键字 see here https gcc gnu org onlinedocs gcc 12

随机推荐

  • 静态库中的 VC++ 资源

    是否可以将资源构建到静态库中并通过简单地与库链接来重用它们 我主要考虑这样的情况 您调用库中的函数 该函数又访问资源 要在 Visual C 2008 的静态库中使用资源 图像 对话框等 您唯一需要做的就是包含静态库的关联 res 文件在你
  • 还有其他方法可以去除多个头吗?

    假设我有这个 hg init touch a hg add a hg commit m a touch b hg add b hg commit m b hg up r 0 touch c hg add c hg commit m c 由于
  • 我可以将 fscanf 与 C 语言中的二进制文件一起使用吗?

    所以我参加了考试 其中一个练习包括从二进制文件中扫描姓名 我曾经用过fscanf 但我的教授告诉我 我不能在二进制文件中使用 fscanf 但为什么 即使我这样做 我的程序也能正常工作 我承认我没有找到一种方法来解释哪里出了问题fscanf
  • 使用 cakephp 3.0 进行生产安全吗?

    我们正在开始一个新项目 需要 2 3 个月才能完成 我应该在 beta 3 刚刚发布后就构建 3 0 版本 还是继续使用 2 5 并在 3 0 稳定版本最终发布时进行转换 您需要定义 安全 对您的标准意味着什么 安全方面安全吗 我想说几乎是
  • 在整数前面包含零[重复]

    这个问题在这里已经有答案了 我想用一个数字来代表我正在开发的 SpriteKit 游戏中玩家的得分 var score 000000000 然后 我创建一个 SKLabelNode 并将其作为字符串 SCORE score 的一部分 因此
  • 谷歌地理编码,异步Javascript,不起作用[重复]

    这个问题在这里已经有答案了 我在外部 js 文件中有一个函数 该函数应该获取地址字符串 然后返回纬度和经度 它什么也不返回 有人可以帮忙吗 我也想问 在 javascript 中 当您从另一个函数中调用异步函数时 外部函数终止后 异步函数是
  • 在Javascript中计算距下一个生日的剩余天数

    我正在尝试计算距下一个生日的剩余天数 但不断遇到问题 这是到目前为止的代码 如果您的生日已经是今年等 则存在一些负数问题 关于如何解决这个问题有什么建议吗 var birthdayDate new Date year month 1 day
  • 如何在java中的for循环中重用变量而不初始化新变量?

    我正在用java编写一个函数 它计算字符串中空格后面的字符数 这个问题对你们中的一些人来说可能听起来微不足道 public int countAfterSpaces final String a int position 0 escapes
  • JavaScript 中 $$ 是什么意思?

    我正在查看一些 javascript 代码 它在一个函数中包含以下内容 CssClass each function x 我知道其目的是将匿名函数应用于具有 CssClass 类的每个元素 但我无法处理 所指的内容 并且无法通过 googl
  • 如何枚举 IAsyncEnumerable 并为每个元素调用异步操作,从而允许每个迭代/操作对并发?

    我有一个IAsyncEnumerable
  • 在 ng-if/*ngIf 中使用函数调用是一个不好的做法吗? [复制]

    这个问题在这里已经有答案了 在 ng if 中使用函数调用的返回值是一个不好的做法吗 它会影响消化周期 性能吗 与视图中使用的任何表达式一样 它将在每个摘要循环中重新评估 以查看其值是否已更改 从而确定是否必须删除该元素或将其添加到 DOM
  • 在 React 中的组件之间共享数据

    我正在开发一个使用 Meteor 和 React 作为视图引擎的应用程序 考虑这个图 React 隐藏另一个示例中的组件 当 C4 按钮单击事件被触发时 我需要更改 C2 组件状态 由于它们没有直接关系 我无法直接从 C4 访问 C2 状态
  • 寻找 FragmentStatePagerAdapter 的替代品

    我想找到 FragmentStatePagerAdapter PagerFragment 的替代品 因为我们都知道 FragmentStatePagerAdapter 至今仍处于崩溃状态 我和 github 上已经进行了很多尝试来制作一些模
  • 是否可以在 ARM (Android/Linux) 上的执行过程中更改字节序?

    我想知道是否可以在 ARM 平台上更改正在运行的应用程序中间执行的字节序 正如你们中的一些人所知 ARM 是双字节序 支持大字节序和小字节序 我想知道在 Android 或一般的 Linux 上是否可以设置单个应用程序在执行时使用不同的字节
  • 启用适用于 Android 的 Places SDK 时出现问题 (google)

    请帮忙 当我单击 Places SDK For android 访问页面以启用时 显示如下 您没有足够的权限查看此页面 追踪号码 4169288790274014457 有什么问题 我应该怎么做才能启用这个API 谢谢 无法启用 Place
  • HTML 和 XHTML 有什么区别?

    注意 这应该是这个问题的规范帖子 已经存在许多答案 但对各种差异的描述分散在各处 而且通常 他们还提供 我应该使用哪一个 的意见 我将在这里避免这种情况 如果您还有更多问题要问 或者您知道更多差异 请随时进行编辑 XHTML 和 HTML
  • 如何让我的 Facebook 应用程序在安装后自动请求所需的权限

    我正在使用 Facebook PHP SDK 2 1 2 我想做的就是几乎每个 Facebook 应用程序都具有req perms有 安装时会弹出愚蠢的 请求权限 框 我不想要用户必须按下的按钮 我不希望出现弹出窗口 我不想使用 FBML
  • 将“this”和参数传递给 addEventListener 函数而不使用绑定

    接下来禁用插件时 引导插件中的删除事件监听器不起作用 我正在探索其他可能性 除了使用bind 并缓存绑定函数 有没有办法使用 this 并传递参数 works fine but can t pass argeement contextMen
  • UITableView 滑动手势需要近乎完美的准确性

    我正在为使用自定义 UITableViewCell 子类的 UITableView 开发自定义滑动事件 我包括了UIGestureRecognizerDelegate在我的标题中 并将其放入viewDidLoad UISwipeGestur
  • 在 GNU 汇编器宏中引用操作数/参数

    我目前正在尝试理解的概念汇编语言中的宏 特别是在 GNU 汇编器中 IA 32 x86 的 AT T 语法 我大学的幻灯片内容如下 How to define a macro macro write string movl string e