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

猜你喜欢

转载自www.cnblogs.com/alwaysking/p/12287441.html