标志位:
ZF(zero flag)为零标志位,当指令进行逻辑运算或算数运算后,若结果为0 ZF为1否则为0
PF(parity flag)为奇偶标志位,当指令进行逻辑运算或算数运算后,若结果二进制1的数量为偶数则为1否则为0
SF(symbol flag)为符号标志位,当指令进行逻辑运算或算数运算后,若结果为负数则为1否则为0
CF(carry flag)为进位标志位,当指令进行无符号运算后,结果有向高位进位或借位 CF为1否则为0
OF(over flow flag)为溢出标志位,当指令进行有符号运算后,若结果超出表示范围 OF为1否则为0
DF(direction flag)为方向标志位,指令cld令DF为0,指令std令DF为1。若DF为0则si,di递增反之递减
指令:
adc指令为带位加法指令,指令格式:adc 操作对象1,操作对象2。功能:操作对象1=操作对象1+操作对象2+CF
sbb指令为带位减法指令,指令格式:adc 操作对象1,操作对象2。功能:操作对象1=操作对象1-操作对象2-CF
cmp为比较指令 格式:cmp 操作对象1,操作对象2。功能:计算操作对象1-操作对象2 但不保存结果,影响flag
je 等于则转移
jne 不等于则转移
jb 低于则转移
jnb 不低于则转移
ja 高于则转移
jna 不高于则转移
以上转移指令常与cmp指令结合使用
检测11.3
1)jb ja
2)jna jnb
movsb指令 相当于mov es:[di],byte ptr ds:[si]
若df为0则inc di,inc si
若df为1则dec di,dec si
movsw指令 相当于mov es:[di],word ptr ds:[si]
若df为0则add di,2 add si,2
若df为1则sub di,2 sub si,2
pushf指令将flag压栈,popf指令将栈中数据弹出至flag
检测点11.4
第一个popf将栈中数据弹出至flag,此时flag值为0
add ax,0010h执行后结果为10000h,则ax=0所以ZF为1,PF为1,SF为0,CF为1
有符号数0fffh为-16 有符号数0010h为16 则-16+16=0没有溢出所以OF为0
pushf 将flag压栈
pop ax 将flag弹出至AX 此时ax=0000000001000101b(假设其他PSW为0)
and al,11000101b
and ah,00001000b
上两条指令执行后ax值为0000000001000101b=69=45h