ARM CPU模式SVC指令

时间:2014-01-20 05:02:18

标签: arm bootloader

这是ARM的bootloader的起始代码,并将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)服务到底是什么?

2 个答案:

答案 0 :(得分:2)

CPSR包含更多状态,然后只是cpu模式。

enter image description here

例如,它包含State bit,告知CPU是在ARM模式还是在Thumb模式下执行。 在不保留其他状态的情况下写入CPSR很可能会使cpu进入未定义状态。因此,你总是进行读 - 修改 - 写。

在大多数documents from ARM中,还指出了保留保留位状态以便将来兼容的重要性。

  

保持与未来ARM处理器的兼容性,同样如此   实践中,强烈建议您使用读 - 修改 - 写策略   当你改变CPSR时。

答案 1 :(得分:1)

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

我被设置(屏蔽IRQ) F设置(Masking FIQs)

MODE设置为0b10011

由于读取 - 修改 - 写入序列(顺便回答关于指令1的有用性的问题),左位未改变。