汇编编程:宏、字符串指令与虚拟屏幕实现
1. 宏的使用与特性
在汇编编程中,宏是一种强大的工具。宏参数传递有一定规则,不能直接将64位、32位或16位寄存器移入8位寄存器,例如向 WriteCtr 的参数 %1 传值时就需注意。可以传递带括号的地址作为参数,如 WriteCtr [RowValue],AdMsg,ADLEN ,前提是 RowValue 是定义为8位数据项的命名变量。若宏参数用于需要64位参数的指令,也可传递代表64位地址的标签或64位数值。
宏调用时,参数用逗号分隔,NASM会按从左到右的顺序将参数放入宏的参数中。若传递的参数数量与宏的参数数量不匹配,可能会出现问题。若传递的参数少于宏的参数数量,根据未填充参数的引用方式,汇编器可能会报错;若传递的参数多于宏的参数数量,多余的参数将被忽略。
宏内的局部标签也很重要。汇编语言程序中的标签必须唯一,但宏会在源代码中多次重复调用,若不将宏内的标签设为局部,会出现重复标签错误。在宏中,以两个百分号 %% 开头的标签为局部标签。标记宏内位置时,局部标签后应加冒号;用作跳转或调用指令的操作数时,局部标签后不加冒号。
以下是一个将缓冲区字符从小写转换为大写的宏示例:
%macro UpCase 2 ; %1 = Address of buffer; %2 = Chars in buffer
mov rdx,%1 ; Place the offset of t
超级会员免费看
订阅专栏 解锁全文
15万+

被折叠的 条评论
为什么被折叠?



