测试某些示志位的情况来设置字节的指令
这是一大类指令,格式为: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:…