nasm - NASM 中的 %define 和 eq 有什么区别?

标签 nasm

代码:

  %define x 0x03
  x equ 0x03

它们之间有什么区别?

最佳答案

%define是一种更强大的宏处理方式,类似于 C 预处理器。在您的简单情况下,使用 x 没有太大区别在源代码中将导致常量 3被取代。 equ 有细微的差别语句在第一次读取时被评估一次,并且 %define只要在源中遇到宏,就会评估它们。

您可以看到两个语句片段之间的区别:

addr   equ       $
       %define   addr $

在这种情况下,addr ,在代码中遇到时,会有不同的值。在第一种情况下,$将在 equ 所在的地方组装位置的位置是。换句话说,它是在哪里定义的。

在第二种情况下,它评估为addr 处的装配位置。用来。

哪里%define闪耀的是类似的东西:
%define thricexplusy(x,y) (3 * x + y)

或者:
%define ctrl(c) (c & 0x1F)
: :
mov     al, ctrl('z')

(甚至更复杂的东西)允许您将参数传递给您的宏,这是简单的 equ 无法实现的。 .

关于nasm - NASM 中的 %define 和 eq 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8691807/

相关文章:

c - 对 `printf' 的 undefined reference

assembly - 使用 NASM 中调用 malloc 返回的内存

linux - 如何在 Linux 上使用系统调用等待击键中断?

assembly - 汇编代码的.bss部分

assembly - x86,BYTE 和 BYTE PTR 的区别

c - 与 C 的接口(interface)程序集

linux - 在适用于 Linux 的 Windows 子系统上的 Ubuntu 上使用 INT 0x80 汇编编译的可执行文件不产生输出

assembly - 该程序集访问该字符串常量有什么问题?

assembly - 使用 NASM 在 64 位模式下不支持 pop 指令?

linux nasm 程序集显示输入加 1