本帖最后由 山东电子小菜鸟 于 2018-8-5 17:21 编辑
在 USR 模式下将 R0 和 R13 的值置为 0:
MOV R0, #0
MOV R13, #0
此时,发生了从 USR 模式到 IRQ 模式的切换,然后在 IRQ 模式下将 R0 和 R13 加 1:
ADD R0, R0, #1
ADD R13, R13, #1
R0 是不可备份寄存器,因此上述操作是对同一个 R0 寄存器操作的。在 USR 模式下先
将 R0 置为 0,然后在 IRQ 模式下将 R0 加 1,最后 R0 的值为 1。而 R13 是可备份寄存器 ,
在 USR 模式下先将 USR 模式下的 R13 置为 0,进入 IRQ 模式后将 IRQ 模式下的 R13 加 1 ,
最后 USR 模式下的 R13 的值仍为 0,而 IRQ 模式下的 R13 值在它原有的基础上加了 1。在
上述操作中,虽然软件使用的都是 R13 这同一个名字,但芯片会根据不同模式而对不同模
式下的 R13 寄存器进行操作,上述对 R13 的操作就是对不同的 2 个 R13 寄存器进行的操作。
FIQ 的可备份寄存器是 R8~R14,其它模式的可备份寄存器是 R13~R14,包括 IRQ 模式 ,
因此切换到 FIQ 模式时需要备份的寄存器少一些,因此 FIQ 要比 IRQ 快一些。
|