对于CPSR寄存器,选择用户模式且使用快速中断FIQ,禁止iqr中断,Thumb状态,则cpsr的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对于CPSR寄存器,选择用户模式且使用快速中断FIQ,禁止iqr中断,Thumb状态,则cpsr的相关的知识,希望对你有一定的参考价值。

对于CPSR寄存器,选择用户模式且使用快速中断FIQ,禁止iqr中断,Thumb状态,则cpsr的值为? 求解

参考技术A

  CPSR格式构成如下(8-31位省略)

位置 :  31--8        7          6              5            4       3       2       1    0


内容:    ......       I(IRQ)   F(FIQ)   T(Thumb)    M4    M3   M2  M1   M0

用户模式下M0-M5为10000,使用快速中断FIQ则第六位为0(1表示禁止),禁止IQR中断则第7位为1(0表示使用),Thumb状态下第五位为1(0表示ARM状态);

综上CPSR低8位为10110000=0xB0

参考技术B 程序状态寄存器:nzcvq(8位状态保留)i(普通中断1禁止)f(快速中断0允许)t(1为thumb)(低五位模式选择,用户模式10000)
-孙智灵
参考技术C 0x000000B0

MSR CPSR_C,#0x13 不能使用 ARM 程序集?

【中文标题】MSR CPSR_C,#0x13 不能使用 ARM 程序集?【英文标题】:MSR CPSR_C, #0x13 doesn't work using ARM assembly? 【发布时间】:2013-12-18 08:27:50 【问题描述】:

我正在为 ARM Cortex A9 处理器编写裸机代码(无操作系统)。

我需要读取一个只能在主管模式下访问的寄存器(多处理器关联寄存器,MPIDR)。

当我处于用户模式并尝试使用调试器逐步执行以下指令(进入超级用户模式)时,没有任何反应。

MSR CPSR_C, #0x13

如果我尝试读取 MPIDR 寄存器,我的程序会进入未定义模式

请问你知道我错过了什么吗?

当我使用调试器窗口时,将 CPSR 寄存器的前五位强制为 b10011,它可以工作,我转到主管。

【问题讨论】:

您确定写信给CPSR_C 不是特权操作吗?保护东西没有多大意义,如果打破保护那么容易...... 我不确定,当我强制使用调试器并进入 irq 模式,然后执行相同的指令时,它可以工作。 但是如果是特权操作,我怎么能从用户模式进入超级用户模式,这不可能吗? @rony 您确实执行了“svc #0”并从用户模式执行并将执行更改为主管模式。 在此基础上进行扩展,使用来自用户的 svc/swi 指令是通往主管处理程序的直接路径,在该处理程序中,您可以做任何您想做的事情。与应用程序层和内核层不同,您必须或应该在内核中做一些事情,其他事情可以在您选择的任何地方完成。当然,您将需要编写一个 svc/swi 处理程序,并且有一种方法可以与处理程序通信您希望它做什么(因为它是一个处理程序并且您可能希望它做多件事情)立即是诱人的但是最好只使用寄存器,例如 r0。 【参考方案1】:

您不能使用直接写入 CPSR 的指令在模式之间切换 用户模式中的模式位。正确的方法是使用svc(主管调用)并执行请求的必要指令。

【讨论】:

【参考方案2】:

使用cps指令,例如

# Disable ABT, IRQ, FIQ and set SVC mode
cpsid aif, #0x13

【讨论】:

请提供一些解释,为什么您认为您提出的解决方案可能对 OP 有所帮助。

以上是关于对于CPSR寄存器,选择用户模式且使用快速中断FIQ,禁止iqr中断,Thumb状态,则cpsr的的主要内容,如果未能解决你的问题,请参考以下文章

6th.关于中断结构系统

arm 标志寄存器 CPSR SPSR 图解

(转)ARM汇编学习笔记——CPSR寄存器CPSR_C

ARM(ARM内部寄存器及SFR异常处理中断向量表)

MSR和MRS指令操作CPSR寄存器

学习总结之ARM处理器的运行模式及ARM寄存器