ARMv8-A Process State, PSTATE

在ARMv8架构中,使用PSTATE用来描述当前处理器的状态信息。如下的图描述了PSTATE的每个字段的意义

上面是PSTATE的各个bit位的含义,我们可以将其分为三组

  • 状态标志位
    • N
    • Z
    • C
    • V
  • 异常状态控制位
    • SS
    • IL
    • nRW
    • EL
    • SP
  • 异常屏蔽位
    • D
    • A
    • I
    • F

下面来详细描述下各个字段的含义:

  • 状态标志位
    1. N(Negative)代表的是当前指令的结果,如果是1则是负数,如果是0则是正数或者0
    2. Z(Zero)代表当前指令指令的结果,如果是1则是-0,否则是其他
    3. C(Carry Condition flag)携带环境标志,1代表携带,0代表没有
    4. V(Overflow Condition flag)溢出标志位,1代表溢出,0没有
  • 异常屏蔽位
    1. D(Debug exception Mask bit)
    2. A(SError Interrupt mask bit)
    3. I(IRQ interrupt mask bit)
    4. F(FIQ interrupt mask bot)
    5. 对每个状态,1代表屏蔽,0代表没有屏蔽

 

访问PSTATE的各个bit位

在ARMv8-A中可以使用特殊功能的寄存器MRS对PSTATE进行读,使用MSR寄存器来对PSTATE进行写操作

ARMv8提供了一些特殊的寄存器,可以直接来操作PSTATE的各个域

比如可以直接使用NZCV来直接操作NZCV各个bit的值

 

通用在ARMv7中使用的是CPSR寄存器来描述处理器的状态,只不过在ARMv8-A中已经取消了CPSR寄存器

下来看下ARMv7中CPSR寄存器的格式

其中NZCV和AIF和ARMv8是保持一致的。别的位不说了,有兴趣的可以去看armv7的手册

 

举例说明:

比如内核中的disable_local_irq和enable_local_irq的在ARM64架构的最终实现,就是通过daifset和daifclr指令实现的

static inline void arch_local_irq_enable(void)
{
	asm volatile(
		"msr	daifclr, #2		// arch_local_irq_enable"
		:
		:
		: "memory");
}

static inline void arch_local_irq_disable(void)
{
	asm volatile(
		"msr	daifset, #2		// arch_local_irq_disable"
		:
		:
		: "memory");
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值