计算机符号标志nf,测试标志位指令

  • Post author:
  • Post category:其他


测试某些示志位的情况来设置字节的指令

这是一大类指令,格式为: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:…