NASM手册阅读笔记(4) - 预处理器之条件汇编
基本格式
%if<condition>
%elif<condition>
……;elif 的数量不限制
%elif<condition>
%else ;else也可由可无
%endif
所以基本就是C 的语法
条件判断
指令
%if <condition>
%elif <condition>
说明
这就是最基本的条件判断了 <condition> 可以是一个表达式, 当然表达式的值必须能在编译阶段求出才行。
测试单行宏
指令
%ifdef MACRO
%ifndef MACRO
%elifdef MACRO
%elifndef MACRO
说明
这个宏就是判断某个单行宏的定义存不存在的,这在C/C++里面是经常用到的,尤其是 判断DEBUG和RELEASE的时候
测试多行宏
指令
%ifmacro MyMacro 1-3
%ifnmacro MACRO
%elifmacro MACRO
%elifnmacro MACRO
说明
和单行宏的测试是一样的,只不过是需要当上宏参数个数的
判断上下文堆的栈顶的名称
指令
%ifctx ctxname
%ifnctx ctxname
%elifctx ctxname
%elifnctx ctxname
说明
这是判断山下文堆的栈顶的元素的名称的,上下文堆之后会将
字符串判断
指令
%ifidn / %ifidni
格式
%ifidn text1, text2
说明
当text1 与 text2 相等时成立 text1 和 text2 不需要引号括起来 %ifidn abc,cde 这样即可
%ifidn 区分大小写
%ifidni 不区分大小写
%macro pushparam 1
%ifidni %1,ip
call %%label
%%label:
%else
push %1
%endif
%endmacro
类型判断
指令
%ifid / %ifnum / %ifstr
说明
判断数据是否是 标识符(label) 字符串 数字
比如
%macro writefile 2-3+
%ifstr %2 ; 当参数2 是字符串的时候
jmp %%endstr
%else
%%endstr:
%endif
%macroend