版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/Apollon_krj/article/details/71239549

8086CPU的flag寄存器(16位)各标志位如下(这是32位EFLAG的低十六位图,但是32位与16位是一样的,只不过32位多了16位且高16位没有使用到):

标志位寄存器中保存的是当前指令运算的信息状态,比如进位信息保存在CF标志位(注意:是运算结果的标志,比如add、sub、mul、div、and、or等,而mov、push等不会改变标志位)。

**需要强调一点:**PF标志位,是奇偶标志位,但是这个奇偶指的是最低八位是奇数还是偶数,和高位没有关系。即使是16位寄存器/16位内存/32位寄存器/32位内存…也只由低八位的1的奇偶个数决定。(2017年7月31日14:29:36注)

其中CF为进位标志(Carry Flag),OF为溢出标志(Overflow Flag)。标志位只占以为以为着一个标志只能有0(假)或1(真)两种结果。而不同标志位在Debug中显示的真与假其显示方式是不同的,具体如下表:

如图所示为一部分:

我们通常认为溢出(上溢)就是因为进位时当前存储格式(1B、2B、4B等)的位数(8bit、16bit、32bit)不够而引起的。比如8位寄存器:11111111B+1B=100000000B超过了八位的1被认为是溢出寄存器(放不下),当然也是进位进上去的1。但是CF标志位的进位标志与OF标志位的溢出标志是不同的概念。

CF针对无符号数(将寄存器中的操作数都看作是无符号数)
OF针对有符号数(将寄存器中的操作数都看作是有符号数)
有符号无符号指的是最高位是否是符号位,即是以补码的形式看待还是以原码的形式看待。
CF范围:0~255/0X00~0XFF(8位)、0~65535/0X0000~0XFFFF(16位)、…
OF范围:-128~127/0X80~0XEF(8位)、-32768~32767/0X8000~0XEFFF(16位)、…

我们再画张图来说明CF与OF的数据范围的区别:

区别:

其监测的结果数据范围不同:
以8位寄存器作为操作种数据来源为例,如果一个运算的结果最终超过[-128,127]无论是大于127还是小于-128就被认为是溢出,OF被置为1,如果结果在[-128,127]就认为没溢出OF被置为0,。
而对于OF:如果计算的结果超过[0,255]的范围,就有进位,CF就被置为1,如果结果再[-128,127]范围内,就是没有进位CF被置为0。

共同点:

我们经常会将溢出与进位这两个概念混为一谈,就是因为这两个的共同点都是“存不下了”。什么叫存不下了?(依然以8位寄存器为例)。我们先举个例子(寄存器宽度为8位):
(1)、8H+8H:
对于signed:(8)+(8)=16,没超过[-128,127]的范围,OF为0
对于unsigned:(8)+(8)=16,没超过[0,255]的范围,CF为0
(2)、80H+81H:
对于signed:(-128)+(-127)=-255,超过[-128,127]的范围,OF为1
对于unsigned:(128)+(129)=257,超过[0,255]的范围,CF为1
(3)、FCH+05H:
对于signed:(-4)+(5)=1,没有超过[-128,127]的范围,OF为0
对于unsigned:(252)+(5)=257,超过[0,255]的范围,CF为1
(4)、7FH+2H:
对于signed:(127)+(2)=129,超过[-128,127]的范围,OF为1
对于unsigned:(127)+(2)=129,没超过[0,255]的范围,CF为0

我们看到超过表示范围的原因都是值太大,当前位数表示不了,但是对于同样位数的寄存器,有符号与无符号就不一样了。同样的位数,OF除了符号位外能表示的值只有七位是数据,而CF认为有八位是数据位。但是我们知道这只是其共同点,不代表这两个有关系,上例也表示,OF、CF的0与1是没有直接联系的。只要记住有符号与无符号的数据范围,并且记住OF是对于有符号数,CF对于无符号数即可。

标志位寄存器与CF、OF标志位的区分相关推荐

  1. 汇编中有符号与无符号数以及CF,OF标志位的区分

    汇编中有符号与无符号数以及CF,OF标志位的区分 一. 只有一个标准! 首先需要知道,计算机对数值的存储采用补码形式存储,一来避免了+0和-0的尴尬,二来数值的加法和减法可以统一为补码的加法. 在汇编 ...

  2. 【汇编】流程转移——标志寄存器(ZF—零标志、PF—奇偶标志、SF—符号标志、CF—进位标志、OF—溢出标志)、adc进位加法指令、sbb借位减法指令、cmp指令、DF标志、REP指令、std、cld

    11.1 标志寄存器 8086CPU中有14个寄存器,在历来文章中已经介绍过大部分,还有一个标志寄存器,在cpu中也担任着重要的位置. 在标志寄存器中是按位来起作用的,也就是说其中每一位的0和1都有着 ...

  3. Intel 64/x86_64/x86/IA-32处理器标志寄存器详解(4) - 32位EFLAGS - 状态标志与控制标志

    Status Flags 状态标志位(比特位0,2,4,6,7和11)指示了算术指令的结果,例如ADD,SUB,MUL,与DIV指令. 标志位 描述 CF(bit 0) 进位/借位Carry.如果算术 ...

  4. Intel 64/x86_64/x86/IA-32处理器标志寄存器详解(3) - 32位EFLAGS - 概述

    32位标志寄存器中的标志位/域可以分成3组:状态标志位,控制标志位,以及系统标志位.下图定义了这些标志位以及对应的比特位编号.在处理器刚刚初始化之后(通过激活RESET引脚或者INIT引脚),EFLA ...

  5. 通用寄存器与标志位寄存器OF/DF/IF/TF/SF/ZF/AF/PF

    文章目录 1 通用寄存器 2 标志寄存器 2.1 CF 进位标志位 2.2 ZF 零标志位 2.3 SF 符号标志位 2.4 OF 溢出标志位 2.5 PF 奇偶标志位 2.6 AF 辅助进位标志 2 ...

  6. 汇编语言中常用指令对标志位寄存器的影响

    参考了<汇编语言 基于x86处理器>第七版 转载请注明出处 如果有错误的地方请指正,谢谢. 文章目录 算术运算(ADD/SUB)影响标志位 ADD指令 SUB指令 NEG指令 INC/DE ...

  7. Intel 64/x86_64/x86/IA-32处理器标志寄存器详解(6) - 64位RFLAGS

    64位标志寄存器RFLAGS 在64位模式下,RFLAGS标志寄存器扩展到了64个比特位,但是最高32比特位全部是保留位.RFLAGS(64位模式)与EFLAGS(兼容模式)的系统标志位一致,没有增加 ...

  8. Intel 64/x86_64/x86/IA-32处理器标志寄存器详解(5) - 32位EFLAGS - 系统标志

    System Flags/Fields 标志寄存器的系统标志位与IO特权级(IOPL)域可以用来控制I/O,可屏蔽硬件中断,程序调试,任务切换,以及设置虚拟8086模式(参看下图).只有特权代码(通常 ...

  9. 微型计算机DEC影响零标志位吗,汇编语言中常用指令对标志位寄存器的影响

    参考了<汇编语言 基于x86处理器>第七版 转载请注明出处 如果有错误的地方请指正,谢谢. 文章目录 算术运算(ADD/SUB)影响标志位 ADD指令 SUB指令 NEG指令 INC/DE ...

  10. 微型计算机状态标志,微机原理--指令系统--判断状态标志位!尤其是OF和CF!!...

    如何判断状态标志位??OF和CF到底怎么计算???? 之前,一直被OF和CF这对神仙眷侣搞得云里雾里,总之三个字:看不懂!!! 不过不会也是要整滴~不然越拖越多,今天偶然发现其中的奥秘,不过也可能是以 ...

最新文章

  1. 评论:苹果APP STORE面临失贞可能?
  2. FPGA之道(35)Verilog中的并行与串行语句
  3. 【数据结构与算法】之深入解析“组合总和”的求解思路与算法示例
  4. JAVA 13 (集合框架)
  5. jquery datatable的详细用法
  6. 如何用JS实现音乐播放、暂停
  7. 奥鹏C语言专科在线作业答案,电子科大12春《C语言(专科)》在线作业三
  8. Glance - 直接操作image
  9. pandas 下一行减去上一行
  10. Java解析HTML之NekoHTML
  11. 编写优质嵌入式C程序
  12. 知群产品经理必修TOP班-31期学习笔记
  13. python虚拟变量回归_虚拟变量提升多元线性回归模型精度(附Python代码与数据)...
  14. mysql 内置函数大全 mysql内置函数大全
  15. 关于消防系统安装的一些规范
  16. 13个可以为网站创建360度全景视图的工具
  17. 变分推断 python_变分推断(Variational Inference)
  18. php实现视频转gif,一种在线视频转GIF的方法与流程
  19. Android基础——RecycleView
  20. COGNOS8 Transformer使用IQD做为数据源时报 TR1008 错误

热门文章

  1. ADAS倒车雷达超声波传感器elmos524.03驱动
  2. vue中自己实现的页面切换标签手动关闭功能
  3. median _matlab 中值滤波函数
  4. 免费WiFi上网软件是什么?怎么用?
  5. 运算放大器参数的详细解释和分析-运放压摆率(SR)
  6. Android之常见UI控件
  7. QT 自定义类访问UI控件的几种方法
  8. 数据库与MPP数仓(三十):pigsty部署
  9. 转贴:Spring vs. EJB
  10. PCIe扫盲——PCI总线的三种传输模式