ARM CPU模式SVC指令

ARM CPU模式SVC指令,arm,bootloader,Arm,Bootloader,这是ARM引导加载程序的启动代码,并将CPU配置为svc模式: 1) mrs r0, cpsr 2) bic r0, r0, #0x1F 3) orr r0, r0, #0xD3 4) msr cpsr, r0 我的问题是为什么我们必须使用第一条指令“msr r0,cpsr”?我的意思是,我们不能只使用2)3)获取0xD3并直接写入cpsr吗?1) 服务于什么 CPSR比cpu模式包含更多的状态 例如,它包含告诉CPU是在ARM模式还是在Thumb模式下执行的状态位。

这是ARM引导加载程序的启动代码,并将CPU配置为svc模式:

1)    mrs r0, cpsr
2)    bic r0, r0, #0x1F
3)    orr r0, r0, #0xD3
4)    msr cpsr, r0

我的问题是为什么我们必须使用第一条指令“msr r0,cpsr”?我的意思是,我们不能只使用2)3)获取0xD3并直接写入cpsr吗?1) 服务于什么

CPSR
比cpu模式包含更多的状态

例如,它包含告诉CPU是在ARM模式还是在Thumb模式下执行的
状态位。
在不保留其他状态的情况下写入CPSR很可能会使cpu处于未定义状态。因此,您总是执行读修改写操作

在大多数情况下,还说明了保留位的状态对于未来兼容性的重要性

保持与未来ARM处理器的兼容性 实践中,强烈建议您使用读修改写策略 当您更改CPSR时


实际上,指令2和指令3操作位7,6和4,3,2,1,0:

I已设置(掩蔽IRQ) F已设置(屏蔽FIQ)

模式设置为0b10011

由于读-修改-写序列(顺便说一句,它回答了您关于指令1有用性的问题),左位保持不变。

我理解,指令2)和3)只操作最低的5位,我误解了。你说得对,我们需要保留其他部分。谢谢