标志寄存器

标志寄存器又被称之为程序状态字,主要用于存放运算结果标志和状态控制标志,它与一般的寄存器不同,其功能是按照每个比特位来区分的,配合跳转指令使用,能够实现很强大的功能。本文的最后还会列出使用Windbg调试经常遇到的不同标志位的英文代码。

8086/8088的16位标志寄存器标志寄存器

1.1. 运算结果标志,运算结果标志主要有6个,受加减运算 和 逻辑运算结果的影响

  • 进位标志CF(Carry Flag)(无符号数谈进位)

如果(无符号数)的运算结果的最高位产生一个进位或者借位,则CF被置为1,否则CF被置为0同时,移位指令也可把最高位或者最低位移入CF中

MOV AL, 90H
ADD AL, AL ; 执行后,(AL) = 20H, 有进位产生,CF = 1
ADD AL, AL ; 执行后,(AL) = 40H, 无进位产生,CF = 0

MOV AL, 90H
SUB AL, 91H ; 执行后,(AL) = FFH, 有借位产生,CF = 1
SUB AL, AL ; 执行后,(AL) = 0H, 无借位产生,CF = 0

CF也常作为子程序的出口参数之一

  • 零标志ZF(Zero Flag)

运算结果为0,则ZF被置为1,否则ZF被置为0

MOV AX, 1
SUB AX, 1 ; 执行后,结果为0, 则ZF = 1

MOV AX, 2
SUB AX, 1 ; 执行后,结果部位0, 则ZF = 0

  • 符号标志SF(Sign Flag)(有符号数)

运算结果最高位为1,SF被置为1,否则为0。反映了有符号数的运算结果,对无符号数没有意义

MOV AL, 1000 0001B
ADD AL, 1 ; 执行后,最高位为1, 所以SF=1

  • 溢出标志OF(Overflow Flag)(有符号数才谈溢出)

溢出标志OF用于反映有符号数加减运算是否引起溢出(超出指定位数有符号数的表示范围)。溢出,OF被置为1,否则被置为0

MOV AL, 98D
ADD AL, 99D ; 指令执行后,从有符号(范围[-128,127])角度解析,明显溢出了,所以OF=1。从无符号角度解析(8位无符号范围[0,255]),没有进位,故CF=0
注意: 溢出时,表明运算结果已经不正确了。 两个符号相同的数进行加运算,得出的结果与该符号不一致时就可判断为溢出,溢出只对有符号数有意义

  • 奇偶标志PF(Parity Flag)

用于反映运算结果中“1”的个数,如果“1”的个数为偶数,则OF被置为1,否则OF被置为0

MOV AL, 1
ADD AL, 10 ; 执行后,结果为 0000 1011B, 结果中有 3 个 1,故 PF = 0

  • 辅助进位标志AF(Auxiliary Carry Flag)

在字节运算中,发生低半字节向高半字节进位或借位;在字操作中,发生低字节向高字节进位或借位,则辅助进位标志AF被置为1,否则AF被清0

 

1.2. 状态控制标志 状态控制标志控制处理器的操作

  • 方向标志DF(Direction Flag)

DF=1,则串操作指令按减方式改变有关的寄存器指针值

DF=0,则串操作指令按加方式改变有关的寄存器指针值

STD指令设置方向标志DF, CLD指令清除方向标志

  • 中断允许标志IF(Interrupt – enable Flag)

IF=1,CPU能够响应外部的可屏蔽中断请求

IF=0,CPU不响应外部的可屏蔽中断请求

STI指令设置终端允许标志,CLI指令清除中断允许标志

  • 追踪标志TF(Trap Flag)

TF=1,CPU进入单步模式。

2 调试过程中经常遇到标志代码

标志位 标志位名称/英文 =1 =0
CF 进位标志/Carry Flag CY/Carry/进位 NC/No Carry/无进位
PF 奇偶标志/Parity Flag PE/Parity Even/偶 PO/Parity Odd/奇
AF 辅助进位标志/Auxiliary Carry Flag AC/Auxiliary Carry/进位 NA/No Auxiliary Carry/无进位
ZF 零标志/Zero Flag ZR/Zero/等于零 NZ/Not Zero/不等于零
SF 符号标志/Sign Flag NG/Negative/负 PL/Plus/正
TF 陷阱标志/Trap Flag
IF 中断标志/Interrupt Flag EI/Enable Interrupt/允许 DI/Disable Interrupt/禁止
DF 方向标志/Direction Flag DN/Down/减少 UP/增加
OF 溢出标志/Overflow Flag OV/Overflow/溢出 NV/Not Overflow/未溢出



发表评论

电子邮件地址不会被公开。 必填项已用*标注