【问题标题】:What's the difference between %define and equ in NASM?NASM 中的 %define 和 equ 有什么区别?
【发布时间】:2012-01-31 06:50:24
【问题描述】:

代码:

%define x 0x03
x equ 0x03

它们有什么区别?

【问题讨论】:

    标签: nasm


    【解决方案1】:

    %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 无法实现的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 2011-09-20
      • 1970-01-01
      • 2013-02-23
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      相关资源
      最近更新 更多