【问题标题】:Understanding MRC on ARM7了解 ARM7 上的 MRC
【发布时间】:2013-11-01 21:45:47
【问题描述】:

我是 ARM 新手,正在尝试理解 MRC 指令。

据我了解,MRC是读取协处理器寄存器并将其放入主核心寄存器。

现在协处理器连接到主核,用于控制主核的内存子系统。协处理器如何连接到主核处理器。有人能指出一些好的图表吗?

下面是关于arm7 cpu核心的指令

  /* workaround to disable secure state */
     mrc     p15, #0, r0, c1, c1, #0
     orr     r0, r0, #1
     mcr     p15, #0, r0, c1, c1, #0
     isb

现在我只是在此处的 mrc 指令中找不到发生了什么

1.mrc 的第一个参数是协处理器号(p0 与 p15 有何不同)。

2.第二个参数是协处理器的opcode1(不确定)。

3.第三个参数是主核心寄存器(OK)。

4.第四和第五个参数是协处理器寄存器(c1,#0的结果是否存储到c1)?

5.Agin final Argument 是 opcode2(不确定)。

谢谢

【问题讨论】:

  • MRC/MCR 指令是通用的。你必须参考具体的文件。 VFPNeonCP15CP15 是指令集中未内置功能的包罗万象,适用于 OS 程序员。它可能包括MMU缓存控制保护单元快速上下文切换write bufferTrustZoneHyperVisorVector tableCP15没有与指令集一样保持向后兼容。
  • 感谢@artlessnoise 提供这些有用的链接。
  • 您的意思是 ARMv7 而不是 ARM7?

标签: assembly arm


【解决方案1】:
ARM 中的

协处理器 是一个误导性概念。它是未通过核心指令集公开的可选功能的简写。 ARM CPU 是模块化的。架构的实现者可能会或可能不会将一些 CPU 硬件放置在芯片上。内存管理单元(MMU)就是一个例子;还有其他的,例如硬件调试工具。实际上,这些是由协处理器编号 (pXX) 标识的,因此可以同时存在多个协处理器。 MMU 的协处理器编号传统上是 p15。协处理器 p0..p14 与内存管理无关,可能不存在。例如,调试子系统是 p14。

MRC 和 MCR 命令用于向协处理器发送命令。助记符再次有点误导 - 命令的效果可能不仅仅是寄存器移动。它更像是 MRC 代表“向协处理器发送命令并取回一些数据”,而 MCR 是“向协处理器发送命令并传递一些数据”。这样想吧。这就是操作码的用途——这是对协处理器的命令。有时,带有特定 coproc # 和操作码的 MCR/MRC 命令甚至会在汇编程序中获得单独的助记符(例如 FPU 命令)。

协处理器操作码和寄存器编号的具体细节因协处理器而异。由于这是您感兴趣的 MMU,请阅读该特定的 MMU;它将解释特定操作如何映射到操作码和 coproc 寄存器号。

【讨论】:

  • 感谢@Seva 的友好回答。可能是愚蠢的问题,但我可以说协处理器不是物理实体,它只是另一组指令运行并控制各种子系统,如 MMU 子系统?还有您能否提供一些文档,让我可以阅读您建议我阅读的内容。
  • 像缓存和fpu等它是一个物理实体。您应该能够查看 arm 核心的技术参考手册,以查看可用于启用/禁用逻辑等的可选表带。尽管您实际上在没有 arm 逻辑的情况下获得了其中的一些。请注意,浮点单元传统上也只是协处理器,您可以从指令的机器编码中看出这一点。
  • 它不是单独的芯片,但它是物理的。它是 CPU 芯片上实现功能的区域。
  • 可以说MMU子系统是一个协处理器,FPU是另一个协处理器。
  • 这基本上是正确的。 CP15MMU 多;是 ARM 实现的额外功能吗?普通用户空间应该不需要接触CP15代码;而在 user 模式下使用其他类型的 co-processors 是常见的/可能的。请参阅:ldccdpstc 以及特殊用途说明。 Heyrick's co-processor commands 也是一个很好的参考。一般来说,在所有现代 ARM 中,Seva 是对的,它们在同一个芯片中。但是,由于它们是作为 co-pro 实现的,因此通常是一个选项
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-16
  • 2012-02-24
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 2014-03-15
  • 2011-01-12
相关资源
最近更新 更多