ARM 处理器有二十七个存放器,其间一些是在必定条件下运用的,所以一次只能运用十六个…
存放器 0 到存放器 7 是通用存放器并能够用做任何意图。不象 80×86 处理器那样要求特定存放器被用做栈拜访,或许象 6502 那样把数学核算的成果放置到一个累加器中,ARM 处理器在存放器运用上是高度灵敏的。
存放器 8 到 12 是通用存放器,但是在切换到 FIQ 形式的时分,运用它们的影子(shadow)存放器。
存放器 13 典型的用做 OS 栈指针,但可被用做一个通用存放器。这是一个操作系统问题,不是一个处理器问题,所以假如你不运用栈,只需你今后康复它,你能够在你的代码中自在的占用(corrupt)它。每个处理器形式都有这个存放器的影子存放器。
存放器 14 专职持有回来点的地址以便于写子例程。当你履行带衔接的分支的时分,把回来地址存储到 R14 中。同样在程序第一次运转的时分,把退出地址保存在 R14 中。R14 的一切实例有必要被保存到其他存放器中(不是实际上有用)或一个栈中。这个存放器在各个处理器形式下都有影子存放器。一旦现已保存了衔接地址,这个存放器就能够用做通用存放器了。
存放器 15 是程序计数器。它除了持有指示程序当时运用的地址的二十六位数之外,还持有处理器的状况。
为更明晰一些… 供给下列图表:
User 形式 SVC 形式 IRQ 形式 FIQ 形式 APCS
R0 ——- R0 ——- R0 ——- R0 a1
R1 ——- R1 ——- R1 ——- R1 a2
R2 ——- R2 ——- R2 ——- R2 a3
R3 ——- R3 ——- R3 ——- R3 a4
R4 ——- R4 ——- R4 ——- R4 v1
R5 ——- R5 ——- R5 ——- R5 v2
R6 ——- R6 ——- R6 ——- R6 v3
R7 ——- R7 ——- R7 ——- R7 v4
R8 ——- R8 ——- R8 R8_fiq v5
R9 ——- R9 ——- R9 R9_fiq v6
R10 —— R10 —— R10 R10_fiq sl
R11 —— R11 —— R11 R11_fiq fp
R12 —— R12 —— R12 R12_fiq ip
R13 R13_svc R13_irq R13_fiq sp
R14 R14_svc R14_irq R14_fiq lr
————- R15 / PC ————- pc
最右侧的列是 APCS 代码运用的姓名,关于 APCS 的概况拜见这儿。
程序计数器结构如下:
位 31 30 29 28 27 26 25————2 1 0
N Z C V I F 程 序 计 数 器 S1 S0
对 R15 的具体解说,请拜见 psr.html。
下面是你想知道的”形式”,比方上面提及的”FIQ”形式。
用户形式,运转应用程序的一般形式。约束你的内存拜访而且你不能直接读取硬件设备。
超级用户形式(SVC 形式),首要用于 SWI(软件中止)和 OS(操作系统)。这个形式有额定的特权,答应你进一步操控核算机。例如,你有必要进入超级用户形式来读取一个插件(podule)。这不能在用户形式下完结。
中止形式(IRQ 形式),用来处理建议中止的外设。这个形式也是有特权的。导致 IRQ 的设备有键盘、 VSync (在产生屏幕改写的时分)、IOC 定时器、串行口、硬盘、软盘、等等…
快速中止形式(FIQ 形式),用来处理建议快速中止的外设。这个形式是有特权的。导致 FIQ 的设备有处理数据的软盘,串行端口(比方在 82C71x 机器上的 A5000) 和 Econet。
IRQ 和 FIQ 之间的区别是关于 FIQ 你有必要赶快处理你工作并脱离这个形式。IRQ 能够被 FIQ 所中止但 IRQ 不能中止 FIQ。为了使 FIQ 更快,所以有更多的影子存放器。FIQ 不能调用 SWI。FIQ 还有必要禁用中止。假如一个 FIQ 例程有必要从头启用中止,则它太慢了并应该是 IRQ 而不是 FIQ。