flag寄存器(传送指令不会影响标志寄存器)
flag的1、3、5、12、13、14、15位在8086cpu中没有使用,不具有任何含义。而其余的都有特殊含义
ZF:0标志位
如果结果为0,则ZF=1
如果结果非0,则ZF=0
PF:奇偶标志位
如果1的个数为偶数,则PF=1,否则为0
SF:符号标志位
结果为负数,SF=1,否则为0
CF:进位标志位
OF:溢出标志位
adc:带进位的加法指令,利用了CF位上记录的进位值
sbb:带借位减法指令,利用了CF位上记录的借位值
cmp:是比较指令,功能相当于减法指令,不保存结果。只关心哥哥标志寄存器发生的相应变化
检测比较结果的条件转移指令:
检测那些标志位:被cmp影响的那些标志位
je 相等则转移 只检测ZF的值
jne 不相等
jb 低于
jnb 不低于
ja 高于
jna 不高于
j jump e equal n not b below a above
以上都是cmp进行无符号比较
实例:如果(ah)=(bh)则(ah)=(ah)+(ah),否则(ah)=(ah)+(bh)
结果:
cmp ah,bh
je s
add ah,bh
jmp short ok
s:add ah,ah
ok:ret
DF和串传送指令
DF:方向标志位
DF=0:每次操作后si,di递增;否则递减
movsb:将ds:si指向的内存单元中的字节送入es:di中,然后根据标志寄存器DF位的值,将si和di递增或者递减
movsw:以字的单位传送
一般都和rep指令配合使用
rep movsb:
rep的作用是根据cx的值,重复执行后面的字符串送指令
8086提供了两条指令对DF继续努力设置
cld:设置DF=0 clear
std:设置DF=1 set
pushf和popf
将标志寄存器的值压入栈
从栈中弹出值放入标志寄存器