注:本文档为《从0学x86操作系统》课程配套的学习文档,提供相应的辅助学习资料和答疑勘误。 有关该课程的信息,请点击这里访问:https://study.163.com/provider/1017884735/index.htm 在阅读本文档时,如有疑问和建议,欢迎在下方留言或者直接联系我。

本课时介绍了如何利用gcc工具链中汇编代码中的宏功能,实现类似C语言中的define功能,从而达到重用代码的目的。课程内容较简单,主要难点在于宏的语法。

as汇编器支持的宏格式

如果要定义宏,需要使用.macro和.endm伪指令。其基本示例如下:

.macro 宏的名称 参数0, 参数1…. 汇编代码 .endm

其中参数是可选的,也可给参数一个缺省值,例如:

  • .macro comm — 定义一个comm宏,不需要参数
  • .macro plus1 p, p1 — 定义一个plus1宏,带参数p和p1
  • .macro plus1 p p1 — 定义一个plus1宏,带参数p和p1(即参数可用空格分隔)
  • .macro reserve_str p1=0 p2 — 定义一个reserve宏,带p1和p2参数,其中p1的缺省值为0

在宏的内部,可以通过\参数名的方式去引用参数,例如:

  1. .macro sum from=0, to=5
  2. .long \from
  3. .if \to-\from
  4. sum "(\from+1)",\to
  5. .endif
  6. .endm

参考资料