【问题标题】:Concept of bank registers in ARMARM中银行寄存器的概念
【发布时间】:2013-11-01 09:54:58
【问题描述】:

我是ARM 的新手,对银行寄存器的概念有点困惑。Arm 相关文档说 除用户模式外,每种模式都有自己的一组存储寄存器。我的困惑是 每种模式都有来自r0-r15+banked register.If 的寄存器。那么FIQ 模式的可用寄存器数量最多,总共 23 个寄存器。

另外,据说ARM寄存器在总共37个寄存器中,20个寄存器在不同时间对程序隐藏。这是什么意思??

【问题讨论】:

标签: assembly arm


【解决方案1】:

【讨论】:

  • 谢谢@auselen。你能确认一下这个说法吗,每个模式都有来自 r0-r15+banked 寄存器的寄存器,并且 FIQ 模式有最多的可见寄存器。
  • 也许有帮助,Linux FIQLinux multi-FIQLinux FIQ register source。例如,Linux FIQ 寄存器源 使用内存位置来加载所有存储的 FIQ 寄存器。所有寄存器(banked/non-banked)都存在于每种模式中(它们被保存/不被清除);只能访问 r0-r15。
  • @artless noise ,我在采访中被问到 ARM 中哪个模式的寄存器数量最多,面试官自己告诉 FIQ 模式有 23 个可用的寄存器,FIQ 模式必须维护这个所有寄存器列表r从中断返回的时间和时间,它将存储的寄存器恢复到正常的寄存器。
  • @AmitSinghTomar 那是错误的。所有存储的寄存器都保存。您只能在 FIQ 模式下访问 FIQ 版本的 r8-r12。您必须切换模式才能获得其他版本。模式堆栈指针也是如此。通常,模式lr 由异常设置。与 banked 不同,异常 lr 在概念上类似于另一种含义。对于硬件人员来说,他们只会称其为 banked;当您返回用户模式时,用户lr 状态将保留。
  • 例如有 7 个独立的堆栈指针寄存器。但是作为程序员,您一次只能使用一个,取决于您所处的模式。有 30 个通用寄存器,但您一次只能访问 16 个。当您发现所有这些时,您应该阅读上面的图表,完整地描述了答案。根据您所处的模式,您可以访问一列寄存器 r0-r15,有些是用户/系统模式,有时会使用其他模式。
猜你喜欢
  • 2017-08-06
  • 2019-03-21
  • 2016-11-05
  • 1970-01-01
  • 1970-01-01
  • 2014-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多