宏指令与高级汇编技术:代码复用与元编程

什么是宏指令?

宏指令在汇编阶段展开,不是运行时调用。它相当于代码模板替换。

基本语法


PRINTSTR MACRO msg
    MOV DX, OFFSET msg
    MOV AH, 09h
    INT 21h
ENDM

; 使用
PRINTSTR HELLO_MSG

展开后等价于:


MOV DX, OFFSET HELLO_MSG
MOV AH, 09h
INT 21h

带参数宏


ADD2 MACRO dest, src1, src2
    MOV dest, src1
    ADD dest, src2
ENDM

; 使用
ADD2 AX, BX, CX

局部标号


MYMACRO MACRO
    LOCAL skip
    CMP AX, 0
    JE skip
    ; do something
skip:
ENDM

LOCAL 确保宏多次展开时标号不冲突。

条件汇编


DEBUG EQU 1

IF DEBUG
    PRINTSTR "Debug mode ON
$"
ELSE
    PRINTSTR "Release mode
$"
ENDIF

循环展开


UNROLL_LOOP MACRO count, label
    LOCAL i
    i = 0
    REPEAT count
        CALL label
        i = i + 1
    ENDM
ENDM

宏 vs 子程序

| 特性 | 宏 | 子程序 |

|:--|:--|:--|

| 展开时机 | 汇编时 | 运行时 |

| 代码体积 | 每次展开复制代码 | 只有一份代码 |

| 执行速度 | 快(无调用开销) | 稍慢(CALL/RET)|

| 适用场景 | 短小频繁的代码 | 复杂逻辑 |

总结

宏指令让汇编也能实现"代码生成"。合理运用宏和条件汇编,你的代码会简洁数倍。

下一篇:《DOS 中断调用实战:INT 21h 文件/键盘/显示操作》


原文链接:https://wenyiblog.top/2026/06/asm-12-macros/

首发于文艺技术笔记(wenyiblog.top),转载请注明出处。

posted @ 2026-06-22 19:28  软件工程师文艺  阅读(0)  评论(0)    收藏  举报