代码:
%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/