测试标志位指令

测试某些示志位的情况来设置字节的指令 
 
这是一大类指令,格式为:SETxx reg8/mem8 
 
它的功能是:若条件xx成立,则字节寄存器reg8或节存储器单元被设置为1,否则被设置为0.条件xx 见下表: 
 
SETZ/SETE                 ZF=1              等于零/相等 
 
SETNZ/SETNE               ZF=0              不等于零/不相等 
 
SETS                      SF=1              符号为负 
 
SETNS                     SF=0              符号为正 
 
SETP/SETPE                PF=1              1的个数为偶 
 
SETNP/SETPO               PF=0              1的个数为奇 
 
SETO                      OF=1              溢出 
 
SETNO                     OF=0              无溢出 
 
SETC/SETB/SETNAE          CF=1              进位/低于/不高于等于 
 
SETNC/SETNB/SETAE         CF=0              无进位/不低于/高于等于 
 
SETBE/SETNA               CF=1或ZF=1        低于等于/不高于 
 
SETNBE/SETA               CF=0且ZF=0        不低于等于/高于 
 
SETL/SETNGE               SF不等于NF        小于/不大于等于 
 
SETNL/SETGE               SF=OF             不小于/大于等于 
 
SETLE/SETNG               ZF不等于OF或ZF=1  小于等于/不大于 
 
SETNLE/SETG               SF=OF且ZF=0       不小于等于/大于 
 
例1 如下程序段测试寄存器EAX中的8位16进制数是否有一位为0.BH=0表示没有一位为0. 
 
     MOV BH,0 
     MOV CX,0 
NEXT:TEST AL,0FH 
     SETZ BL 
     ROR EAX,4 
     LOOP NEXT 
 
例2 如下程序段统计DS:SI所指向的字节数据缓冲区中正数和负数的个数,假定缓冲区以0结尾. 
     XOR DX,DX 
NEXT:LODSB 
     CMP AL,0 
     JZ SHORT OVER 
     SETG BL 
     SETL BH 
     ADD DL,BL 
     ADD DH,BH 
     JMP NEXT 
OVER:... 

你可能感兴趣的:(测试,存储)