【发布时间】:2019-03-21 03:56:50
【问题描述】:
阅读ARM Generic Interrupt Controller第4.1.4节,有以下解释:
寄存器银行是指在同一地址提供多个寄存器副本。寄存器访问的属性决定了寄存器的哪个副本被寻址。
我对@987654326@ 有点困惑。 例如如果 R12 和 R12_fiq 是同一个寄存器,处理器如何保证在 fiq 模式下不会覆盖 R12 中的原始数据。是否需要保证?
我在网上搜索了很长时间。但是没有用。 All the related questions 对我没有帮助。
我认为 Benoit 在 What does 'bank'ing a register mean? 中的回答有点帮助,但我不确定。
提前致谢。
------------已更新-----
由于多门的回答,R8_usr 和 R8_fiq 是两个不同的寄存器。抱歉,我不知道如何投票给他。而且我还注意到,在 ensc 的回答中提到了“专用”一词,也许他知道它们是不同的。但由于我描述不好,他没有强调这一点。
【问题讨论】:
-
GIC 银行业务用于安全/正常世界(或 CP15 的 NS 位)。如果您不使用 trustzone,则它不适用。对于 ARM 模式(R8_FIQ、LR_IRQ 等),对寄存器进行操作的常规 arm 指令会影响该模式的分组寄存器。 GIC 银行业务不同,因为它位于内存映射的寄存器地址。可以从特权模式访问分组寄存器的特殊上下文切换指令。它可以让相同的代码在不同的模式下运行,而无需保存寄存器;或者在其他情况下,它提供了一些方法来保存/恢复非银行/共享寄存器。
-
在 stackoverflow 上看到很多 Q/A on ARM banked registers。
-
@artlessnoise 实际上我对 GIC 并不熟悉,我只是从链接 stackoverflow.com/questions/13432297/… 中的享受生活的回答中提到了这一点。 |我在我的问题陈述中提到,我已经阅读了熟悉您给定链接的相关问题。 |无论如何,感谢您对 GIC 银行业务的清晰解释。
-
只是 GIC bank 可能有相同的名称,但它在功能上与 ARM registers bank 完全不同。它在概念上是相同的。我只是想确保查看问题的人需要知道一个不会 100% 映射到另一个(以及帮助您理解)。
标签: arm cpu-registers