汇编语言学习笔记(十一)标志寄存器

时间:2021-06-13 01:26:18
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
将标志寄存器的值压入栈
从栈中弹出值放入标志寄存器