汇编-标志寄存器
8086CPU的flag寄存器的结构如图所示
注意:
在8086CPU的指令集中,有的指令的执行是影响标志寄存器的,比如:add、sub、mul、div、inc、or、and等,它们大都是运算指令(进行逻辑或算术运算);
有的指令的执行对标志寄存器没有影响,比如:mov、push、pop等,它们大都是传送指令
ZF标志(零标志位)
flag的第6位是ZF, 零标志位。它记录相关指令执行后, 其结果是否为0。
如果结果为0,那么zf=1,debug显示ZR
如果结果不为0,那么zf=0,debug显示NZ
【是否为0】
PF奇偶标志位
相关指令执行后, 其结果的所有bit位中1的个数是否为偶数:
如果1的个数为偶数,pf=1,debug显示PE
如果为奇数,那么pf=0,debug显示 PO
【是否为偶】
SF符号标志位
相关指令执行后,其结果是否为负:
如果结果为负,sf=1,debug显示NG
如果非负,sf=0,debug显示PL
【是否为负】
SF标志, 就是CPU对有符号数运算结果的一种记录, 它记录数据的正负。
在我们将数据当作有符号数来运算的时候,可以通过它来得知结果的正负。
如果我们将数据当作无符号数来运算,SF的值则没有意义,虽然相关的指令影响了它的值。
CF进位标志位
一般情况下, 在进行无符号数运算的时候, 它记录了运算结果的最高有效位向更高位的进位值,或从更高位的借位值。
有进位或者借位时CF=1,并且debug显示为CY;否则CF=0,debug显示为NC
注意:inc loop 不会影响CF
OF溢出标志位
数据值超出范围就是溢出
有符号数运算的结果是否发生了溢出:
如果发生溢出,OF=1,debug显示OV
如果没有,OF=0,debug显示NV
DF方向标志位
在串处理指令中(movsb和movsw),控制每次操作后si、di的增减。
df=0每次操作后si、di递增;
df=1每次操作后si、di递减。
TF单步中断标志位
CPU在执行完一条指令之后, 如果检测到标志寄存器的TF位为1, 则产生单步中断
IF中断标志
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)