【发布时间】:2012-01-31 06:50:24
【问题描述】:
代码:
%define x 0x03
x equ 0x03
它们有什么区别?
【问题讨论】:
标签: nasm
代码:
%define x 0x03
x equ 0x03
它们有什么区别?
【问题讨论】:
标签: nasm
%define 是一种更强大的宏处理方式,类似于 C 预处理器。在您的简单情况下,没有太大区别,在源代码中使用 x 将导致常量 3 被替换。细微的差别在于,equ 语句在第一次读取时被评估一次,而%define 宏在源代码中遇到时都会被评估。
你可以看到这两个语句sn-ps之间的区别:
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 无法实现的。
【讨论】: