| 对比维度 | PSW(程序状态字,Program Status Word) | FLAGS(标志寄存器,Flags Register) |
|---|---|---|
| 核心定义 | 存储 CPU 当前运行状态的完整状态字,是反映程序执行状态和 CPU 控制状态的集合 | 存储算术逻辑运算(ALU)结果特征及部分 CPU 状态的寄存器,是 PSW 的核心组成部分 |
| 本质属性 | 一个状态字(数据结构),可由多个寄存器共同承载(部分架构中 PSW 是独立寄存器,本质仍为状态集合) | 一个专用寄存器(硬件实体),直接由 CPU 硬件修改和访问 |
| 包含范围 | 范围广,包含以下 3 类核心信息:1. 标志位(即 FLAGS 寄存器的全部内容);2. 程序计数器(PC);3. 栈指针(SP);4. 中断屏蔽位(IM);5. 特权级(PL);6. 指令寻址模式等控制信息 | 范围窄,仅包含标志位,具体分为:1. 状态标志(ZF、SF、CF、OF、AF、PF);2. 控制标志(DF、IF、TF)(部分架构将控制标志归为 PSW 其他字段,408 默认 FLAGS 包含两类) |
| 主要功能 | 1. 保存程序执行的完整上下文(支持进程切换、中断返回);2. 控制 CPU 的运行模式(如特权级、中断使能);3. 提供程序执行的状态反馈(通过包含的 FLAGS) | 1. 记录算术逻辑运算结果的特征(如是否为零、是否溢出、是否有进位);2. 控制特定指令的执行行为(如 DF 控制串操作的地址递增 / 递减);3. 支持条件转移指令的判断依据 |
| 修改方式 | 1.硬件修改:中断发生、进程切换时,CPU 自动保存 / 恢复 PSW;2. 软件修改:通过特权指令(如 LMSW、SMSW)修改控制字段(如特权级、中断屏蔽位) | 1. 硬件修改:算术逻辑运算(ADD、SUB、AND 等)、串操作指令自动修改状态标志;2. 软件修改:通过专用指令(如 CLC、STC、CLD、STD、CLI、STI)修改控制标志(状态标志一般不直接软件修改,需通过运算间接改变) |
| 访问方式 | 一般通过特权指令访问,用户态程序不可直接读写(避免破坏系统状态) | 1. 状态标志:用户态程序可通过指令间接读取(如 LAHF)或通过条件转移指令隐含使用;2. 控制标志:部分可由用户态指令修改(如 CLD、CLI),部分受特权级限制 |
| 408 考纲核心考点 | 1. PSW 的组成(标志位、PC、特权级等);2. PSW 在中断处理、进程切换中的作用(上下文保存与恢复);3. 特权指令与 PSW 的交互 | 1. 6 个状态标志(ZF、SF、CF、OF、AF、PF)的定义、计算规则;2. 3 个控制标志(DF、IF、TF)的功能;3. 标志位与条件转移指令的配合(如 JZ、JC、JO 等指令如何依据标志位跳转) |
| 典型架构示例(408 常考) | 1. 8086 架构:PSW 是 16 位寄存器(AX~DX 同级别),包含 FLAGS 的 16 位标志位(其中 9 位有效)+ 无 PC/SP(8086 中 PC、SP 是独立寄存器,PSW 仅含标志和部分控制字段);2. 通用架构:PSW 作为 "状态集合",整合 FLAGS、PC、特权级等,支持上下文切换 | 8086 架构:FLAGS 是 16 位寄存器,包含 6 个状态标志(ZF、SF、CF、OF、AF、PF)和 3 个控制标志(DF、IF、TF),是 PSW 的核心子集(408 真题常以 8086 架构为背景考查 FLAGS) |
包含关系 :FLAGS 是 PSW 的核心子集,PSW 必须包含 FLAGS 的全部标志位,才能完整反映程序执行状态;
功能互补:FLAGS 负责 "微观状态反馈与指令控制"(如运算结果特征、串操作方向),PSW 负责 "宏观上下文管理与 CPU 控制"(如进程切换、特权级管理);
协同工作 :例如执行ADD A,B指令时,首先 CPU 通过 PSW 确认当前特权级(是否允许执行),运算后 FLAGS 自动修改状态标志(如 CF、ZF),最终 PSW 保存更新后的 FLAGS,为后续条件转移指令(如JC)提供判断依据。
常考查 "FLAGS 标志位计算"(如给定运算,判断 CF、OF 是否为 1)和 "PSW 在中断 / 进程切换中的作用",需重点区分二者的功能边界
408 考纲明确 FLAGS 包含状态标志和控制标志