对于CPSR寄存器,选择用户模式且使用快速中断FIQ,禁止iqr中断,Thumb状态,则cpsr的
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对于CPSR寄存器,选择用户模式且使用快速中断FIQ,禁止iqr中断,Thumb状态,则cpsr的相关的知识,希望对你有一定的参考价值。
对于CPSR寄存器,选择用户模式且使用快速中断FIQ,禁止iqr中断,Thumb状态,则cpsr的值为? 求解
参考技术ACPSR格式构成如下(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的的主要内容,如果未能解决你的问题,请参考以下文章