Assembly 理解ARM7上的MRC

Assembly 理解ARM7上的MRC,assembly,arm,Assembly,Arm,我是ARM新手,试图理解MRC指令 据我所知,MRC是读取协处理器寄存器并将其放入主核心寄存器 现在协处理器连接到主核,用于控制主核的内存子系统。协处理器是如何连接到主核处理器的。有人能指出一些好的Digram吗 下面是ARM7CPU内核上的指令 /* workaround to disable secure state */ mrc p15, #0, r0, c1, c1, #0 orr r0, r0, #1 mcr p15, #0,

我是ARM新手,试图理解MRC指令

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

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

下面是ARM7CPU内核上的指令

  /* 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.第四个和第五个argumnet是协处理器寄存器(是c1的结果,#0存储到c1)

5.Agin的最后一个参数是opcode2(不确定)


感谢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是另一个协处理器。这基本上是正确的。CP15大于MMU;这是ARM实现的额外功能。正常用户空间不需要触摸CP15代码;然而,在用户模式下使用其他类型的协处理器是常见的/可能的。请参阅:
ldc
cdp
stc
以及专用说明。也是一个很好的参考。一般来说,在所有现代武器中,塞瓦是对的,他们在同一个芯片中。但是,由于它们是作为co-pro实现的,所以这通常是一个选项。请查看。例如,
MRC
/
MCR
指令是通用指令。你必须参考具体的文件。VFP、霓虹灯和CP15。CP15是一款非内置于指令集的万能工具,面向操作系统程序员。它可能包括MMU、缓存控制、保护单元、快速上下文切换、写缓冲区、信任区、虚拟机监控程序、向量表等。CP15不像指令集那样保持向后兼容。感谢@artlessnoise提供这些有用的链接。您是指ARMv7而不是ARM7吗?