注:本文档为《从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
在宏的内部,可以通过\参数名的方式去引用参数,例如:
.macro sum from=0, to=5
.long \from
.if \to-\from
sum "(\from+1)",\to
.endif
.endm