8086 FLAGS标志位详解
2026/6/4 8:49:47 网站建设 项目流程

8086微处理器有一个16位的标志寄存器(FLAGS),其中只使用了9位,分为状态标志(6位)和控制标志(3位)。


一、状态标志(6位)

反映ALU运算结果的特征,供后续条件跳转指令判断。

标志位英文全称含义置1条件
CFCarry Flag进位/借位标志加法产生进位或减法产生借位
PFParity Flag奇偶标志结果低8位中“1”的个数为偶数
AFAuxiliary Carry Flag辅助进位标志低4位向高4位产生进位/借位(BCD码运算用)
ZFZero Flag零标志运算结果为0
SFSign Flag符号标志运算结果的最高位为1(即负数,有符号数视角)
OFOverflow Flag溢出标志有符号数运算结果超出范围
CF 与 OF 的区别:
  • CF针对无符号数:超出 0~65535(或 0~255)时置1

  • OF针对有符号数:结果超出 -32768~+32767(或 -128~+127)时置1

  • 示例:
MOV AL, 0x7F ; 127 ADD AL, 1 ; 结果 0x80 (128) ; CF=0, OF=1(有符号溢出), SF=1(最高位为1), ZF=0

二、控制标志(3位)

由程序员设置,控制CPU行为。

标志位英文全称作用
IFInterrupt Flag中断允许标志:1=允许可屏蔽中断,0=禁止
DFDirection Flag方向标志:1=串操作地址递减,0=递增
TFTrap Flag陷阱标志:1=单步调试模式(每执行一条指令产生一次中断)

控制标志只能通过专用指令修改:

  • IFSTI(置1),CLI(置0)

  • DFSTD(置1),CLD(置0)

  • TF→ 无直接指令,需通过PUSHF/POPF修改


三、未使用的标志位

8086的FLAGS寄存器共16位,实际只用9位,其余位(bit 1, 3, 5, 12~15)保留,读出不固定,写入应置0以保证兼容性。

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 [ 保留 ] [ OF ] [DF] [IF] [TF] [SF] [ZF] [ 保留 ] [AF] [ 保留 ] [PF] [ 保留 ] [CF]

四、常用指令对标志位的影响

指令CFOFSFZFAFPF
ADD / ADC
SUB / SBB
INC / DEC
MUL / DIV变化变化变化?变化
AND / OR / XOR00?
NOT
CMP同SUB同SUB同SUB同SUB同SUB同SUB
MOV

✓ = 受影响,— = 不影响,? = 未定义


五、典型应用场景

1. 判断无符号数大小(利用CF)
CMP AX, BX JA label ; AX > BX (CF=0 and ZF=0) JB label ; AX < BX (CF=1)
2. 判断有符号数大小(利用OF和SF)
CMP AX, BX JG label ; AX > BX JL label ; AX < BX
3. 多字节加法(利用CF)
ADD AL, BL ; 低8位相加 ADC AH, BH ; 高8位加上低位进位
4. 单步调试(利用TF)

TF=1时,CPU执行每条指令后自动触发INT 1,调试器可利用此功能。

5. 快速数组复制(利用DF)
CLD ; DF=0,地址递增 REP MOVSB ; 正向复制 STD ; DF=1,地址递减 REP MOVSB ; 反向复制

总结表速查

标志含义最常用时机
CF无符号数加减进位/借位多精度运算、无符号比较
OF有符号数溢出有符号比较、算术运算错误检测
ZF结果为零相等判断、循环计数
SF结果为负有符号数符号判断
AF低4位进位BCD码调整(DAA/DAS)
PF低8位1的个数为偶通信数据校验
IF可屏蔽中断开关临界区保护、中断控制
DF串操作方向字符串/数组复制方向控制
TF单步陷阱调试器实现

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询