鸿 网 互 联 www.68idc.cn

汇编语言---条件设置字节指令

来源:互联网 作者:佚名 时间:2015-10-09 05:47
条件 设置 字节 指令 (Set ByteConditionally)是80386及其以后的CPU所具有的一组 指令 ;它们在测试 条件 方面与 条件 转移是一致的,但是在功能方面,它们不是转移,而是根据测试 条件 的值来 设置 其 字节 操作数的内容为0或1; 条件 设置 字节 指令 的一般格式

条件设置字节指令(Set Byte Conditionally)是80386及其以后的CPU所具有的一组指令;它们在测试条件方面与条件转移是一致的,但是在功能方面,它们不是转移,而是根据测试条件的值来设置字节操作数的内容为0或1;
条件设置字节指令的一般格式如下:
SETnn reg/mem ;80386+
其中,nn表示测试条件,操作数只能是8位的寄存器或字节单元;
这组指令的执行不会影响任何标志位;
条件设置字节指令列表:
指令助记符             操作数与检测条件之间的关系
SETZ/SETE                 reg/mem = ZF
SETNZ/SETNE               reg/mem = not ZF
SETS                      reg/mem = SF
SETNS                     reg/mem = not SF
SETO                      reg/mem = OF
SETNO                     reg/mem = not OF
SETP/SETPE                reg/mem = PF
SETNP/SETPO               reg/mem = not PF
SETC/SETB/SETNAE          reg/mem = CF
SETNC/SETNB/SETAE         reg/mem = not CF
SETNA/SETBE               reg/mem = (CF or ZF)
SETA/SETNBE               reg/mem = not (CF or ZF)
SETL/SETNGE               reg/mem = (SF xor OF)
SETNL/SETGE               reg/mem = not (SF xor OF)
SETLE/SETNG               reg/mem = (SF xor OF) or ZF
SETNLE/SETG               reg/mem = not ((SF xor OF) or ZF)

例子:编写一段程序:检测32位寄存器EAX的8个十六进制中有几个0H,并把统计结果存入BH中;
方法一:用条件转移指令来实现
      XOR BH,BH
      MOV CX,8         ;测试寄存器EAX---8次;
AGAIN:TEST AL,0FH      ;测试第四位二进制是否为0H(ZF=1)
      JNZ NEXT         ;不相等(不为0,ZF=0),则继续测试下一个4位;
      INC BH           ;相等(为0,ZF=1),则统计计数器BH累加1
NEXT: ROR EAX,4        ;向右循环移动4位,为测试高4位做准备
      LOOP AGAIN

方法二、用条件设置字节指令来实现
      XOR BH,BH
      MOV CX,8
AGAIN:TEST AL,0FH
      SETZ BL          ;如果AL的低4位为0(ZF=1),则置BL为1,否则,置BL为0;
      ADD BH,BL        ;统计计数器BH加上BL的值
      ROR EAX,4
      LOOP AGAIN

网友评论
<