欢迎光临
我们一直在努力

8086 FLAGS标志位详解

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


一、状态标志(6位)

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

标志位英文全称含义置1条件
CF Carry Flag 进位/借位标志 加法产生进位或减法产生借位
PF Parity Flag 奇偶标志 结果低8位中“1”的个数为偶数
AF Auxiliary Carry Flag 辅助进位标志 低4位向高4位产生进位/借位(BCD码运算用)
ZF Zero Flag 零标志 运算结果为0
SF Sign Flag 符号标志 运算结果的最高位为1(即负数,有符号数视角)
OF Overflow 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行为。

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

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

  • IF → STI (置1),CLI (置0)

  • DF → STD (置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 / XOR 0 0 ?
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 单步陷阱 调试器实现

赞(0)
未经允许不得转载:171主机测评 » 8086 FLAGS标志位详解
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址