System Flags/Fields

标志寄存器的系统标志位与IO特权级(IOPL)域可以用来控制I/O,可屏蔽硬件中断,程序调试,任务切换,以及设置虚拟8086模式(参看下图)。只有特权代码(通常是操作系统或者管理代码)被允许修改这些标志位。

标志位

描述

TF(bit 8)

陷阱Trap。当设置为1时,启用程序调试单步模式;否则,禁用单步模式。在单步模式下,处理器在每条指令执行完毕后,会产生一个调试异常。通过这个异常,可以检查每条指令执行后的程序状态。如果应用程序使用POPF/POPFD/IRET指令设置了TF标志位,紧跟着POPF/POPFD/IRET之后的指令才会产生调试异常。例如

PUSHF

; set TF=1 in stack

POPF

ADD ; debug exception after this instruction

IF(bit 9)

中断启用Interrupt enable。控制处理器如何响应可屏蔽硬件中断(通过INTR引脚或local APIC发送给处理器的外部中断)。当设置为1时,处理器会响应可屏蔽中断;否则,不响应可屏蔽中断(注:刚加电时默认不响应可屏蔽中断,防止影响处理器初始化)。IF标志不影响异常的产生与非屏蔽中断(NMI中断)请求。当前特权级(CPL),IO特权级(IOPL),以及CR4控制寄存器中VME标志位的状态联合确定IF标志是否可以通过CLI/STI/POPF/POPFD/IRET指令修改。

IOPL(bit 12:13)

I/O特权级IOPL。当前执行的程序或任务的I/O特权级。当前正在运行的程序或任务的当前特权级CPL必须小于或等于IOPL(即CPL<=IOPL)才能访问I/O地址空间。只有CPL等于0时,POPF/IRET指令才可以修改这个域。

IOPL也提供了一种机制用于控制对中断允许IF标志的修改以及在虚拟8086模式下,当启用虚拟模式扩展时(CR4.VME=1),控制对中断的处理。

NT(bit 14)

嵌套任务Nested task。控制被中断任务新调用的任务的关系链。当通过CALL指令,中断或者异常调用一个新任务时,处理器会设置这个标志。当某个任务执行IRET指令返回时,处理器会检查并修改这个标志位。这个标志位可以显示地通过POPF/POPFD指令设置或清除;但是,改变这个状态标志可能会导致程序产生无法意料的异常。

RF(bit 16)

继续执行Resume。控制处理器对指令断点条件的响应行为。当设置为1时,在指令在断点处,这个标志临时禁止处理器产生调试异常(#DB,其他的异常条件依然可以产生异常。当设置为0时,指令断点会产生调试异常。

RF标志的主要功能是用于支持产生调试异常的指令在异常处理之后的重启动。这里,调试软件在使用IRETD(为了避免指令断点产生另一个调试异常)指令返回到被中断的程序之前,必须设置栈上被中断程序的EFLAGS寄存器的RF标志位。这样,当产生调试异常的指令正常执行后,处理器会自动地清除这个标志,从而允许指令断点异常继续产生。

VM(bit 17)

虚拟8086模式virtual-8086。当设置为1时,启用虚拟8086模式;当清除时,返回到保护模式。

AC(bit 18)

对齐检查或访问控制alignment check or access control。如果CR0寄存器的AM (alignment mask)标志为1,当且仅当AC标志也为1时,才启用用户模式下数据访问的对齐检查。当引用非对齐的操作数时,处理器会产生一个对齐检查异常,例如访问位于奇地址上的单字,或访问双字但是地址并不起始于4的整数倍。

只有在用户模式下(特权级3)才可能会产生地址检查异常。默认是特权级0的地址引用,例如加载段描述符,即便是在用户模式下执行指令,也不会才生异常。

对齐检查异常可以用来检测数据的对齐方式。如果要与某些处理器交换数据且这些处理器要求所有的数据都必须对齐,这个检查就很有必要。对齐检查异常也可以被解释器使用,通过将指针设置为非对齐,来标示这些特殊指针。这样可以减少/消除对每一个指针进行检查的成本,而只需要处理那些特殊指针。

如果CR4寄存器的SMAP(supervisor-mode access prevention)标志位被设置为1,当且仅当AC标志也为1时,才允许显示地从特权模式(supervisor-mode)访问用户模式的页面数据。

VIF

(bit 19)

虚拟中断virtual interrupt。包含IF标志的虚拟映像(virtual image of IF flag)。这个标志位与VIP标志位(参看下一条)联合使用。只有当控制寄存器CR4的VME(启用virutal-8086 mode extension)标志位或PVI(启用protected mode virtual interrupt)标志位设置为1且IOPL<3(即处于特权I/O模式)时,处理器才识别VIF标志。

VIP

(bit 20)

虚拟中断等待处理virtual interrupt pending。由软件设置通知处理器有中断等待处理;清除则表示没有中断等待处理。这个标志与VIF标志(参看上条)联合使用。处理器会读取但是永远不会修改这个标志。只有当控制寄存器CR4的VME(启用virutal-8086 mode extension)标志位或PVI(启用protected mode virtual interrupt)标志位设置为1且IOPL<3(即处于特权I/O模式)时,处理器才识别VIP标志。

ID

标识identification。程序/过程通过设置或清除这个标志来侦测处理器是否支持CPUID指令。

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

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

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

  2. Intel 64/x86_64/x86/IA-32处理器标志寄存器详解(2) - 32位EFLAGS - 80386(386, Intel386)/80486(486, Intel486)

    80386/386/Intel386标志寄存器EFLAGS 80386增加了RF/VM标志位,用于支持虚拟8086模式与指令断点调试. 80486/486/Intel486标志寄存器EFLAGS (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. 五、CPU详解、寄存器详解、标志寄存器详解

    控制器.运算器.寄存器组成CPU 控制器:领导 运算器:员工,计算数据 寄存器:寄存数据信息,在内存与运算器之间 硬盘运算速度<内存运算速度<寄存器运算速度 寄存器:(寄存器16位[寄存器 ...

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

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

  6. Intel 64/x86_64/x86/IA-32处理器操作模式/运行模式

    Processor Operation Mode IA-32架构支持3种操作模式,和一种类操作模式(quasi-operating mode): 实地址模式/实模式(real-address mode ...

  7. Intel 64/x86_64/x86/IA-32处理器串行化指令(1) - 概述

    Serializing Instructions 注:串行化指令的概念非常容易理解,但是要用好(在哪里用,何时用)则需要深厚的处理器架构和流水线乱序执行的功底.好在大部分应用程序不会用到这类指令. I ...

  8. Intel 64/x86_64/x86/IA-32处理器串行化指令(2) - 参考

    下面总结一下本节提及的串行化指令及其用法,备考. 串行化指令 指令格式 用途及用法 INVD INVD 无效化内部缓存:启动外部缓存无效化过程 注:这条指令简单暴力,不会将修改状态的缓存行回写至内存, ...

  9. Intel 64/x86_64/x86/IA-32处理器的指令指针(IP/EIP/RIP)

    Instruction Pointer 指令指针IP/EIP/RIP的基本功用是指向要执行的下一条地址.在8080 8位微处理器上的寄存器名称是PC(program counter,程序计数器),从8 ...

最新文章

  1. Android 动画 ViewPropertyAnimator 的使用
  2. MongoDB sharding迁移那些事(一)
  3. python基础知识资料-Python学习--最完整的基础知识大全
  4. 一般纳米材料是指尺度为_纳米材料及纳米材料在高分子领域的应用
  5. 未检测到正确安装的网络适配器_电脑网络适配器有感叹号怎么解决?
  6. 修改fragment的进入动画_3DsMax—牛顿摆球(动量守恒摆球)动画
  7. django之上传图片
  8. struts配置通配符*来匹配方法,实现动态调用
  9. 贺利坚老师汇编课程37笔记:把六个字符串里的头一个字母改写成大写字母
  10. 团队作业9——展示博客(Beta版本)
  11. asp.net控件开发学习(1)
  12. mysql自增字段重排 或 归零
  13. 使用 Spring Boot 开发邮件系统
  14. 麦肯锡 “金字塔原理”:职场人结构化思维、表达和解决问题的利器
  15. 在 OpenBSD 系统下的安装PHP
  16. 腾讯开源运维 PaaS 平台
  17. 软件工程实践 第四周第二次会议讨论
  18. 用Python自制随机点名程序,压迫感来了~
  19. 瑞幸咖啡2022,摆脱困境,迎来坦途
  20. 计算机视觉基础之IoU和mIoU

热门文章

  1. 创建选修专业表oracle,数据库及数据表的创建与删除 (Oracle实验)
  2. 【spring boot基础知识】java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
  3. Node.js抓取网页信息并展示(cheerio网络爬虫)
  4. html倒计时timer,js如何使用定时器实现倒计时功能
  5. java非侵入式接口实现,C++编写非侵入式接口
  6. debian 7 mysql_debian7.2+nginx+mysql
  7. _Linux内核分析(二)-内核模块简介和简单内核模块实现
  8. bat中文乱码_详解Windows下获取时间bat脚本总结,值得收藏
  9. 浏览器皮肤_和平精英返场皮肤投票时间是什么时候?投票地址入口介绍-手游资讯...
  10. cad vba 打开文件对话框_CAD每次打开系统都会新建一个Acad.vlx文件,如何解决呢?...