了解ARM7上的MRC

时间:2013-10-23 14:34:59

标签: assembly arm

我是ARM新手并试图了解MRC指令。

据我所知,MRC是读取协处理器寄存器并将其放入主Core寄存器。

现在,协处理器连接到主核心,用于控制主核心的内存子系统。如何将协处理器连接到主核心处理器。是否有人指向一些好的Digram?

现在这篇关于arm7 cpu core的说明

  /* 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.Second Argument是协处理器的opcode1(不确定)。

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

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

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

由于

1 个答案:

答案 0 :(得分:22)

ARM中的

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

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

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