宏汇编语言中的寄存器检查、编译时数组及宏的高级应用
1. 寄存器检查
在处理汇编代码时,我们常常需要检查操作数是否为寄存器,以及确定具体是哪个寄存器和其大小。虽然 opattr 运算符能告知操作数是否为 x86 - 64 寄存器,但它无法提供更多详细信息,如具体寄存器名称、寄存器类型(通用、XMM、YMM 等)以及寄存器大小。不过,借助 MASM 的条件汇编语句和其他运算符,我们可以获取这些信息。
1.1 isReg 宏函数
以下是一个简单的宏函数 isReg ,它根据操作数是否为寄存器返回 1 或 0:
isReg macro parm
local result
result textequ %(((opattr &parm) and 10h) eq 10h)
exitm <&result>
endm
这个函数只是对 opattr 运算符的简单封装,返回第 4 位的设置情况,并没有提供比 opattr 更多的信息。
1.2 寄存器名称与数值的映射
有一组宏和等值定义(equates)可以帮助我们处理寄存器操作数。这些等值定义使用 regXXX 形式的符号,其中 XXX 是寄存器名称(全大写),例如
超级会员免费看
订阅专栏 解锁全文
1196

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



