汇编爱好者通过本文主要向大家介绍了汇编无条件跳转,汇编条件跳转,汇编条件转移指令,汇编语言条件转移指令,汇编条件语句等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
</div>
汇编后展开形成 : 1 PUSH AX 1 PUSH BX 1 PUSH CX 1 PUSH DX 汇编程序能根据条件把一段源程序包括在汇编语言程序内或者把它排除在外 , 这时就用到条件伪操作 , 条件汇编伪指令在汇编过程中,根据条件决定汇编的语句。格式: IFxx 表达式 ; 满足,汇编分支语句体 1 分支语句体 1 [ ELSE ; 不满足,汇编分支语句体 2 分支语句体 2 ] ENDIF ; 条件汇编结束 自变量必须在汇编程序第一遍扫后就成为确定的数值 . 条件伪操作中的 XX 表示条件如下 : IF expression :汇编程序求出表达式的值 , 如此值不为 0 则满足条件 . IFE expression : 如求出表达式的值为 0 则满足条件 . IFDEF symbol :如符号已在程序中定义 , 或者已用 EXTRN 伪操作说明该符号是在外部定义的 , 则满足条件 . IFNDEF symbol :如符号未定义或未通过 EXTRN 说明为外部符号则满足条件 . IFB : 如自变量为空则满足条件 IFNB : 如自变量不为空则满足条件 IFIDN , :如果字符串 和字符串 相同 , 则满足条件 . IFDIF , :如果字符串 和字符串 不相同 , 则满足条件 . 上述 IF 和 IFE 的表达式中可以使用关系操作符 EQ , NE , LT , LE , GT 和 GE 。如: IF 表达式 1 EQ 表达式 2 等。 条件伪操作可以用在宏定义体内 , 也可以用在宏定义体外,也允许嵌套任意次。 例 : 宏指令 MAX 把三个实参中的最大值放在 AX 中 , 而且使实参不同时产生不同的程序段 . 宏定义 : MAX MACRO K,A,B,C LOCAL NEXT,OUT MOV AX,A IF K-1 IF K-2 CMP C,AX JLE NEXT MOV AX,C ENDIF NEXT: CMP B,AX JLE OUT MOV AX,B ENDIF OUT: ENDM 宏调用 : MAX 1,P MAX 2,P,Q MAX 3,P,Q,R 宏展开 : MAX 1,P 1 MOV AX,P 1 ??0001: MAX 2,P,Q 1 MOV AX,P 1 ??0002:CMP Q,AX 1 JLE ??0003 1 MOV AX,Q 1 ??0003: MAX 3,P,Q,R 1 MOV AX,P 1 CMP R,AX 1 JLE ??0004 1 MOV AX,R 1 ??0004:CMP Q,AX 1 JLE ??0005 1 MOV AX,Q 1 ??0005: 宏定义: PDATA MACRO NUM IF NUM LT 100 ;; 如果 num < 100 ,则汇编如下语句 DB NUM DUP(?) ELSE ;; 否则,汇编如下语句 DB 100 DUP(?) ENDIF ENDM 宏调用: … PDATA 12 … PDATA 102 宏展开: … DB 12 DUP(?) … DB 100 DUP(?) 例 : 宏指令 PDATA 根据实参不同时产生不同的程序段 . 例:宏指令 GOTO L,X,REL,Y( 其中 REL 可以是 Z,NZ,L,NL 等 ) 可以根据不同情况产生无条件转移指令或比较和条件转移指令 . 宏定义 : GOTO MACRO L,X,REL,Y IFB JMP L ELSE MOV AX,X CMP AX,Y J&REL L ENDIF ENDM 宏调用 : ... GOTO LOOP,SUM,NZ,15 ... GOTO EXIT ... 宏展开 : ... 1 MOV AX,SUM 1 CMP AX,15 1 JNZ LOOP ... 1 JMP EXIT 宏定义可允许递归调用 , 此时条件伪操作可用来结束宏递归。 例:宏指令 POWER 可以用来实现 X 和 2N 相乘 . 这只需对 X 左移 N 次可实现 , 可以设 COUNT 为递归次数的计数值 , 当该数与 N 相等时即可结束递归调用 宏定义 : POWER MACRO X,N SAL X,1 COUTN=COUT+1 IF COUNT-N POWER X,N ENDIF ENDM 宏调用 : COUTN=0 & 您可能想查找下面的文章: |