RTEMS实时操作系统精要(2)-FLAGS、EFLAGS寄存器

本文详细介绍了Intel x86架构中的FLAGS、EFLAGS寄存器,包括其历史、作用以及各个标志位的功能,如进位、奇偶、辅助进位、零、符号和溢出标志,以及控制标志如方向、中断允许和追踪标志等。内容涵盖了这些标志如何影响指令执行和程序控制,并提及了32位扩展后的I/O特权、嵌套任务和虚拟8086模式标志。
摘要由CSDN通过智能技术生成

FLAGS寄存器是Intel x86微处理器中的状态寄存器,它包含处理器的当前状态。这个寄存器是16位宽的。它的后继者EFLAGS和RFLAGS寄存器的宽度分别为32位和64位。较宽的寄存器保持了与较小的前辈的兼容性。
位位置1、3和5的固定位,进位、奇偶校验、调整、零和标志标志都继承自更早的体系结构8080和8085。调整标志在8080中被称为辅助进位,在Zilog Z80架构中被称为半进位。
在这里插入图片描述

所有标志寄存器都包含条件码,标志位可以让一个机器语言指令的结果影响另一个指令。算术和逻辑指令设置部分或全部标志,而条件跳转指令根据某些标志的值采取可变的动作。例如,jz(如果为0则跳转)、jc(如果进位则跳转)和jo(如果溢出则跳转)取决于特定标志。其他条件跳转测试几个标志的组合。
标记寄存器可以从堆栈中移动或移动到堆栈中。这是保存和恢复处理器上下文工作的一部分,相对于一个例程,例如中断服务例程,它对寄存器的更改不应该被调用代码看到。以下是相关说明:

PUSHF和POPF指令传送16位标志寄存器。
PUSHFD/POPFD(在i386架构中引入)传输32位双寄存器eflag。
PUSHFQ/POPFQ(在x64架构中引入)传输64位四字寄存器的RFLAGS。
在64位模式下,PUSHF/POPF和PUSHFQ/POPFQ可用,而PUSHFD/POPFD不可用
标志寄存器的下8位也可以直接由SAHF和LAHF进行加载/存储操作(将AH加载/存储到标志中)

推入和弹出( push and pop)标志寄存器能使程序能够操作标志中的信息,而不需要机器语言指令方式:
cld和std指令分别清除和设置方向标志(DF);但是没有指令来补充DF
这可以通过以下汇编代码实现:

pushf          ; Use the stack to transfer the FLAGS
pop   ax       ; ...into the AX register
push  ax       ; and copy them back onto the stack for storage
xor   ax, 400h ; Toggle (complement) DF only; other bits are unchanged
push  ax       ; Use the stack again to move the modified value
popf           ; ...into the FLAGS register
; Insert here the code that required the DF flag to be complemented
popf          ; Restore the original value of the FLAGS

与英特尔Cpu相关的定义和常量

//cpu\i386\include\rtems\score\registers.h

/**
 * @file
 * 
 * @brief Intel CPU Constants and Definitions
 * 
 * @addtogroup RTEMSScoreCPUi386
 * 
 * This file contains definition and constants related to Intel Cpu
 */

/*
 *  COPYRIGHT (c) 1998 valette@crf.ca
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值