【问题标题】:Would ARM banked register confilct?ARM银行的寄存器会冲突吗?
【发布时间】:2019-03-21 03:56:50
【问题描述】:

阅读ARM Generic Interrupt Controller第4.1.4节,有以下解释:

寄存器银行是指在同一地址提供多个寄存器副本。寄存器访问的属性决定了寄存器的哪个副本被寻址。

我对@9​​87654326@ 有点困惑。 例如如果 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


【解决方案1】:

“GIC”和R12 没有很多共同点。 GIC 是一个控制器(由一些,但不是每个 ARM CPU 使用),可以通过内存地址访问。根据安全模式和/或 cpu 节点,相同的地址可以提供对不同内部寄存器的视图。

R12 是一个 CPU 寄存器。由于效率原因(例如,为了避免在离开 FIQ 时恢复之前的值),FIQ 模式有一个专用的高位寄存器组 (r8-r15)。

堆栈指针 (r13) 和 lr (r14) 也可以存储起来,例如IRQ 模式可以有自己的堆栈或在lr 中指示某些状态(例如堆栈对齐)。

【讨论】:

  • 对不起,我的描述很糟糕,实际上参考部分来自 stackoverflow.com/questions/13432297/…> 中的享受生活的回答。在您的第二段中,您提到了FIQ mode has a dedicated bank of the upper registers (r8-r15)。我猜你想说 r8_fiq 到 r15_fiq。我注意到dedicated 这个词,你的意思是 r8_fiq 与 r8_usr 不同吗?对于第三段,我已在《ARM 架构参考手册》第 2.3 节中阅读了此内容。
  • 我很困惑的是enjoylife的参考: > 注册银行是指在同一地址提供多个注册副本。如果这在 ARM 中是真的,我认为 r8_riq 与 r8_usr 相同,尽管 r8_fiq 只能在 fiq 模式下访问。在fiq模式下,我认为处理器只能访问r8_fiq(我想强调它不能访问r8_usr等)。如果处理器改变了 r8_fiq 中的数据,那么 r8_usr 中的数据也会改变吗?如果 r8_usr 和 r8_fiq 相同,我想它也会改变。你怎么看?
  • 抱歉,断线好像不行,不知道怎么修复。
  • 您不能直接访问r8_fiq。当您在 FIQ 模式下执行 mov r8, #0 时,您在 r8_fiq 中写入 #0;当您在其他模式下执行此操作时,您会写入r8_usr
  • 我想我最好把问题分成小块。 (1) 你同意Register banking refers to providing multiple copies of a register at the same address.这句话吗? (2)我同意那句话,我想根据at the same address知道,是不是说R8_usr和R8_fiq是同一个寄存器,只是在两种不同的模式下命名不同? (3) 如果你不同意那句话,你认为 R8_usr 和 R8_fiq 是不同的寄存器,就像 R1 和 R5 的区别一样吗? (4) 由于您的回答,将提出更多问题。 (5) 提前致谢。
猜你喜欢
  • 2017-08-06
  • 1970-01-01
  • 2013-02-07
  • 2015-04-07
  • 2012-10-02
  • 2015-07-20
  • 2014-07-06
  • 2011-01-18
  • 1970-01-01
相关资源
最近更新 更多