8086/8088 CPU寄存器组包括4个16位数据寄存器,两个16位指针寄存器,两个16位变址寄存器,一个16位指令指针,4个16位段寄存器,1个16位标志寄存器。一共14个16位寄存器。
    image.png
    AH&AL=AX(accumulator):累加寄存器
    BH&BL=BX(base):基址寄存器
    CH&CL=CX(count):计数寄存器
    DH&DL=DX(data):数据寄存器
    —————————————————————————-
    SP(Stack Pointer):堆栈指针寄存器
    BP(Base Pointer):基址指针寄存器
    SI(Source Index):源变址寄存器
    —————————————————————————-
    DI(Destination Index):目的变址寄存器
    IP(Instruction Pointer):指令指针寄存器
    —————————————————————————-
    CS(Code Segment):代码段寄存器
    DS(Data Segment):数据段寄存器
    SS(Stack Segment):堆栈段寄存器
    ES(Extra Segment):附加段寄存器

    寄存器 用途
    AX 字乘法,字除法,字I/O,累加器, 使用频率最高, 被特殊优化的寄存器, 一般用于存放运算结果;
    BX 存储器指针,基址寄存器, 一般用于放某结构的首地址, 如数组,结构体等等;
    CX 字节乘法,字节除法,字节I/O,十进制算术运算
    DX 字乘法,字除法,间接I/O,数据寄存器, 用于和其他寄存器组合表示大于一个寄存器的数值;
    AH 计算器, 一般用于循环等其他需要计数操作的寄存器;
    AL 字节乘法,字节除法
    CL 移位计数器
    SI 存储器指针(串操作中的源指针),源变址寄存器, 一般用于存放内存拷贝的源地址
    DI 存储器指针(串操作中的目的指针),目标变址寄存器, 一般用于存放内存拷贝的目标地址
    BP 存储器指针(存取堆栈的指针),一般指向栈低
    SP 堆栈指针,一般指向栈顶

    标志位

    标志位 =1 =0
    ZF 零标志位(Zero Flag) ZR[Zero] NZ[Not Zero]
    PF 奇偶标志位(Parity Flag) PE[Parity Even] PO[Parity Odd]
    SF 符号标志位(Sign Flag) NG[Negative] PL[Plus]
    CF 进位标志位(Carry Flag) CY[Carry] NC[No Carry]
    OF 溢出标志位(Overflow Flag) OV[Overflow] NV[Not Overflow]
    AF 辅助进位标志位(Auxiliary Flag) AC[Auxiliary Carry] NA[No Auxiliary Carry]
    DF 方向标志位(Direction Flag) DN[Down] UP[UP]
    IF 中断标志位(Interrupt Flag) EI[Enable Interrupt] DI[Disable Interrupt]
    1. ZF
    2. 零标志位(Zero Flag)
    3. 判断结果是否为0。运算结果0,ZF置1,否则置0。
    4. PF
    5. 奇偶标志位(Parity Flag)
    6. 反映运算结果低8位中'1'的个数。'1'的个数为偶数,PF置1,否则置0。
    7. SF
    8. 符号标志位(Sign Flag)
    9. 反映运算结果的符号。运算结果为负,SF置1,否则置0。
    10. CF
    11. 进位标志位(Carry Flag)
    12. 反映无符号运算是否产生进位或借位。运算结果的最高有效位向更高位进位或者借位,CF置1,否则置0。
    13. OF
    14. 溢出标志位(Overflow Flag) 反映有符号运算是否溢出。运算结果超过了8位或者16位有符号数的表示范围,OF置1,否则置0。
    15. AF
    16. 辅助进位标志位(Auxiliary Flag)
    17. 在字节操作时低半字节向高半字节进位或借位。字操作时低字节向高字节进位或借位,AF置1,否则置0。
    18. 这个标志位在PC目前很少用, 和二进制显示屏有关;
    19. DF
    20. 方向标志位(Direction Flag)
    21. 决定串处理指令控制每次操作后si、di的增减。df=0,则每次操作后si、di递增,否则递减。
    22. IF
    23. 中断标志位(Interrupt Flag)

    进位标志CF
    image.png
    执行了以下片段

    1. mov al,98
    2. add al,al

    0x98+0x98=0x130,所以需要进位由NC变成CY

    零标志ZF
    image.png
    执行了以下片段

    1. mov al,1
    2. sub al,al

    AX寄存器低位赋1,然后低位相减,最后为0,标志位由原来的NZ变为ZR

    符号标志位SF
    image.png
    执行了以下片段

    1. mov al,80
    2. add al,1

    反映运算结果的符号位。SF与运算结果的最高位相同,如果运算结果的最高位为1,则SF被置1(NG),否则SF清零(PL)。由于在8086/8088系统中,有符号数采用补码的形式表示,所以SF反映了运算结果的符号。如果运算结果为正,则SF被清零,否则SF被置1

    溢出标志OF
    image.png
    执行了以下片段

    1. mov al,98
    2. add al,al

    反映有符号加减运算是否引起溢出。如果运算结果超过了8位或16位有符号数的表示范围,即在字节运算时大于127或小于-128,在字运算时大于32767或小于-32768时,称为溢出。如果溢出,则OF被置1,否则OF被清零

    奇偶标志PF
    image.png
    执行了以下代码段

    1. mov al,3
    2. add al,al

    用于反映运算结果中“1”的个数。如果“1”的个数为偶数,则OF被置1,否则OF被清零。利用PF可以进行奇偶校验检查,或产生奇偶校验位。
    此案例,以为0x3+0x3=0110B的,所以PE标志位结果位PE。

    辅助进位标志AF
    在字节操作时,如果发生低半字节向高半字节进位或借位;在字操作时,如发生低字节向高字节进位或借位,则辅助进位标志AF被置1,否则AF被清零。十进制算术运算调整指令自动根据该标志产生相应的调整动作。

    方向标志DF
    方向标志DF决定串操作指令执行时有关指针寄存器调整方向。当DF=1时,串操作按减方式改变有关存储器指针值;当DF=0时,串操作按加方式改变有关存储器指针值。8086/8088提供专门用于设置方向标志DF的指令是STD,专门用于清DF的指令CLD。

    1. std
    2. cld

    中断允许标志IF
    中断允许标志决定CPU是否响应外部可屏蔽中断请求。当IF=1时,CPU能够响应外部的可屏蔽中断请求;当IF=0时,则不响应外部可屏蔽中断请求。但此标志的状态对于外部非屏蔽中断请求,或内部产生的中断不起作用。8086/8088提供的专门用于设置中断允许标志IF的指令是STI,专门用于清IF的指令是CLI。

    1. cli
    2. sti

    追踪标志TF
    当追踪标志TF被置1后,CPU进入单步方式。所谓单步方式指在一条指令执行后,产生一个单步中断。这主要用于程序的调试。8086/8088没有专门设置和清除TF标志的指令,要通过其他方法设置或清除TF。

    image.png