汇编-标志寄存器

 

 

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中断标志

看:https://blog.csdn.net/lm68140318/article/details/132766812?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22132766812%22%2C%22source%22%3A%22lm68140318%22%7D

 

 

 

 

 

 

 

posted @   天子骄龙  阅读(61)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示

目录导航