引用自 ARMMRC
文档,
MRC{2}<c><q> <coproc>, #<opc1>, <Rt>, <CRn>, <CRm>{, #<opc2>}
where:
2
如果指定,则选择编码 T2 / A2。如果省略,则选择编码 T1/A1。
<c><q>
请参阅第 A8-7 页的标准汇编器语法字段。 ARM MRC2 指令必须是无条件的。
<coproc>
协处理器的名称。标准通用协处理器名称为 p0、p1、...、p15。
<opc1>
是协处理器特定的操作码,范围为 0 到 7。
<Rt>
是目标 ARM 核心寄存器。该寄存器可以是 R0-R14 或 APSR_nzcv。最后一种形式将传输值的位 [31:28] 写入 N、Z、C 和 V 条件标志,并通过将编码的 Rt 字段设置为 0b1111 来指定。在 UAL 之前的汇编语法中,用 PC 代替 APSR_nzcv 来选择这种形式。
<CRn>
是包含第一个操作数的协处理器寄存器。
<CRm>
是附加源或目标协处理器寄存器。
<opc2>
是协处理器特定的操作码,范围为 0 到 7。如果省略,<opc2>
假设为 0。
If MRC
意味着将单个协处理器寄存器的内容复制到单个ARM寄存器中,原因是什么CRm
?另外,我不太确定原因是什么opcode
是其中之一,但这无关紧要。
user786653 的这个链接可能一语中的。
我知道旧的 fpu、fpa 使用协处理器接口,如果您解码 fpa 浮点指令,我想您会发现它们与通用协处理器 (mrc/mcr) 的操作码模式一致。
我的观点是,我不会对该指令中的每个字段都感到兴奋,就协处理器而言,某些字段可能不关心。 ARM 处理器和汇编器不一定知道您连接了什么,这是将位模式放入机器指令的通用方法。您需要关注您正在交谈的特定协处理器,其 TRM 特别是具有该逻辑的匹配版本号的 TRM(如果可能,如果来自 ARM)假设该协处理器来自 ARM,如果它是其他人的协处理器,则使用他们的文档。希望该协处理器中每个操作所使用的字段都定义得足够好。如果他们不谈论其中一个字段的含义,我会认为他们不在乎。剪切并粘贴手册中的 mrc/mcr 行(如果有),如果没有,则可能会找到一些已经使用良好的代码,然后剪切并粘贴该模式和/或为未定义的字段尝试不同的操作,看看是否会改变操作。
一般来说,尽管 mrc/mcr 字段定义不是一成不变的,但供应商可以创建协处理器并对这些字段执行任何他们想要的操作。就像 FPA 一样,可能甚至会更改汇编器/反汇编器来创建指令集的新扩展。 ARM核心可能关心ARM寄存器本身,如果协处理器接口本身有一个TRM,如果协处理器读取有一条控制线告诉ARM是否根据协处理器修改指定的ARM寄存器,我不会感到惊讶驱动该信号。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)