程序状态字(Program Status Word, PSW)是一个特殊的寄存器,存储着处理器当前的状态和控制信息。它通常包括条件码寄存器、中断控制位、特权位等等。不同的处理器体系结构实现的状态字可能会有所不同,但是它们都扮演了重要的角色。
不同的处理器架构实现的状态字位数和格式可能会不同。例如,x86处理器实现了一个64位的PSW,其中32位是条件码寄存器,用于存储指令执行的结果信息,另外32位则包含了中断控制位、特权位和对齐控制位等等。而ARM Cortex-M处理器实现的PSW只有32位,其中包含了当前处理器模式、状态标志、中断控制标志等等。
程序状态字的主要作用包括:
(1)保存当前执行进程的状态,以便在中断、异常或进程切换时能够恢复现场;
(2)记录上一条指令的处理结果,为下一条指令的执行提供依据;
(3)控制CPU的执行流程,包括指令的跳转、中断的发生等等。
条件码寄存器是PSW的一个重要组成部分,它记录着指令执行的结果,以及相应的标志位。常见的条件码包括零标志位(Z),进位标志位(C),负数标志位(N)等等。在执行每条指令时,处理器都会根据条件码的值来判断下一步应该执行哪条指令。
例如,在x86架构中执行一条ADD指令时,会将两个操作数相加,并将结果存储到第一个操作数中。同时,处理器会根据操作数的符号和结果的值来更新条件码寄存器,以便在下一条指令中使用。如果相加结果为0,则设置零标志位;如果有进位发生,则设置进位标志位;如果结果为负数,则设置负数标志位。
中断控制位用于控制处理器在发生中断或异常时的行为。通常,中断控制位包括中断屏蔽位和中断优先级位。中断屏蔽位用于关闭或打开中断请求,以便处理器能够集中精力处理重要的任务。中断优先级位用于控制中断请求的优先级,以便处理器能够先处理重要的中断请求。
例如,在ARM Cortex-M处理器中,中断控制位包括PRIMASK和FAULTMASK。PRIMASK用于控制可屏蔽中断的优先级,取值为0到255,数值越小代表中断请求的优先级越高。FAULTMASK用于控制非可屏蔽中断和异常的优先级,当FAULTMASK置位时,处理器将无法响应非可屏蔽中断和异常。