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

宏指令是汇编的元编程工具。MACRO/ENDM 定义宏,IF/ELSE 条件汇编,REPEAT 循环展开。本文教你如何用宏减少重复代码,写出更优雅的汇编程序。

什么是宏指令?

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

基本语法

1
2
3
4
5
6
7
8
PRINTSTR MACRO msg
    MOV DX, OFFSET msg
    MOV AH, 09h
    INT 21h
ENDM

; 使用
PRINTSTR HELLO_MSG

展开后等价于:

1
2
3
MOV DX, OFFSET HELLO_MSG
MOV AH, 09h
INT 21h

带参数宏

1
2
3
4
5
6
7
ADD2 MACRO dest, src1, src2
    MOV dest, src1
    ADD dest, src2
ENDM

; 使用
ADD2 AX, BX, CX

局部标号

1
2
3
4
5
6
7
MYMACRO MACRO
    LOCAL skip
    CMP AX, 0
    JE skip
    ; do something
skip:
ENDM

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

条件汇编

1
2
3
4
5
6
7
8
9
DEBUG EQU 1

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

循环展开

1
2
3
4
5
6
7
8
UNROLL_LOOP MACRO count, label
    LOCAL i
    i = 0
    REPEAT count
        CALL label
        i = i + 1
    ENDM
ENDM

宏 vs 子程序

特性 子程序
展开时机 汇编时 运行时
代码体积 每次展开复制代码 只有一份代码
执行速度 快(无调用开销) 稍慢(CALL/RET)
适用场景 短小频繁的代码 复杂逻辑

总结

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

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

本博客文章采用 CC BY-NC-SA 4.0 许可协议
服务器推荐

腾讯云 · 新用户专属优惠

本博客部署在腾讯云服务器,稳定运行一年多。如果你是新用户或想搭建个人项目,推荐试试腾讯云的优惠活动。

查看优惠详情 →
阅读
上一篇
输入输出与中断程序设计:硬件交互的底层逻辑
下一篇
多模块程序设计与混合编程:C 语言调用汇编
广告

📚 关注公众号,免费获取技术材料

扫码关注公众号,回复「资料」领取:

  • 📘 企业架构设计模板
  • 📗 数据治理实施指南
  • 📙 工业软件技术白皮书
公众号二维码

长按或扫描二维码