11

我是 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.第三个参数是主核心寄存器(好吧)。

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

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

谢谢

4

1 回答 1

30

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

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

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

于 2013-10-23T17:09:48.773 回答