image.png
    一、
    1、8086CPU的标志寄存器有16位,存储的信息通常被称为程序状态字(PSW)
    2、8086CPU的flag寄存器的结果:
    image.png
    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的相关各位

    十、检测比较结果的条件转移指令:
    image.png

    十一、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,为直接访问标志寄存器提供了一种方法