一、
1、8086CPU的标志寄存器有16位,存储的信息通常被称为程序状态字(PSW)
2、8086CPU的flag寄存器的结果:
2、flag 和其他寄存器不一样,其他寄存器是用来存放数据的,都是整个寄存器具有一个含义。而flag 寄存器是按位起作用的,也就是说,它的每一位都有专门的含义,记录特定的信息
3、flag的1、3、5、12、13、14、15在8086CPU中没有使用,不具任何意义。而0、2、4、6、7、8、9、10、11位都具有特殊的意义
二、ZF标志:
1、ZF标志是flag的第6位,零标志位,它记录相关指令执行后的结果
结果为0,ZF = 1
结果不为0,ZF = 0
三、PF标志:
1、PF标志是flag的第2位,奇偶标志位,它记录相关指令执行后,结果的所有二进制位中1的个数
为偶数,PF = 1
为奇数,PF = 0
四、SF标志:
1、SF标志是flag的第7位,符号标志位,它记录相关指令执行后
结果为负,SF = 1
结果为正,SF = 0
2、SF标志,就是cpu对有符号数运算结果的一种记录,它用于记录数据的正负
五、CF标志:
1、SF标志是flag的第0位,进位标志标志位
六、OF标志:
七、adc指令:
1、adc是带进位加法指令,它利用了CF位上记录的进位值
2、指令格式:adc 操作对象1 , 操作对象2
功能:操作对象1=操作对象1+操作对象2+CF
例如:adc ax,bx实现的功能是:(ax)=(ax)+(bx)+CF
八、sbb指令:
1、sbb是带进位减法指令,它利用了CF位上记录的借位值
2、指令格式:sbb 操作对象1 , 操作对象2
功能:操作对象1=操作对象1-操作对象2-CF
例如:sbb ax,bx实现的功能是:(ax)=(ax)-(bx)-CF
九、cmp指令:
1、cmp是比较指令,功能相当于减法指令,只是不保存结果。cmp指令执行后,将对标志寄存器产生影响
2、指令格式:cmp 操作对象1 , 操作对象2
功能:操作对象1-操作对象2但并不保存结果,仅仅根据计算结果对标志寄存器进行设置
例如:cmp ax,ax,做(ax)-(ax)的运算, 结果为0,但并不在ax中保存,仅影响flag的相关各位
十、检测比较结果的条件转移指令:
十一、DF标志和传送指令:
1、DF标志是flag的第10位,方向标志位
2、在串处理指令中,控制每次操作后si、di的增减
DF=0:每次操作后si、di递增
DF=1:每次操作后si、di递减
3、格式1:movsb
功能:以字节为单位传送
movsb的功能是将ds:si指向的内存单元中的字节送入es:di中,然后根据标志位寄存器DF位的值,将si和di递增或递减
4、格式2:movsw
功能:以字为单位传送
将ds:si指向的内存字单元中word送入es:di中,然后根据标志寄存器DF位的值,将si:di递增2或递减2
5、movsb 和 movsw 进行的是串传输操作中的一个步骤,一般来说,movsb 和 movsw 都和rep 配合使用,格式如下:rep movsb
6、8086 CPU提供以下两条指令对DF位进行设置:
①、cld指令:将标志寄存器DF位置0
②、std指令:将标志寄存器DF位置1
十二、pushf 和 popf
1、pushf:将标志寄存器的压入栈
2、popf:从栈中弹出数据,送入标志寄存器中
3、pushf 和 popf,为直接访问标志寄存器提供了一种方法