引用ARM MRC文档的话,
MRC{2},#,,,{,#}
其中:
如果指定了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.
如果MRC打算将单个协处理器寄存器的内容复制到单个ARM寄存器中,那么CRm的原因是什么?而且,我也不太清楚opcode的原因是什么,但这不是很重要。
发布于 2011-10-07 17:45:56
user786653可能用这个链接击中了钉子的头部。
我知道旧的fpu fpa使用协处理器接口,如果您解码fpa浮点指令,我想您会发现它们与通用协处理器(mrc/mcr)的操作码模式一致。
我的观点是,我不会对指令中的每一个字段都感到激动,对于协处理器来说,有些字段可能并不在意。ARM处理器和汇编程序不一定知道您已经连接了什么,这是一种将位模式放入机器指令的通用方法。您需要专注于您正在交谈的特定协处理器,它的TRM --特别是TRM --与该逻辑的版本号(如果可能的话,来自ARM)进行匹配,假设协处理器来自arm,如果是某人的协处理器,则使用他们的文档。希望协处理器中的每个操作所使用的字段定义得足够好。如果他们不谈论其中的一个领域意味着什么,我会认为这是一个不关心。在手册中剪切和粘贴他们的mrc/mcr行,如果没有google的话,可能会找到一些已经很好使用的代码,然后剪切和粘贴这个模式,或者尝试对未定义的字段进行不同的操作,看看这是否改变了操作。
一般说来,虽然mrc/mcr字段定义不是一成不变的,但是供应商可以创建协处理器,并对这些字段做他们想做的任何事情。就像FPA一样,可能会更改汇编程序/反汇编程序,以便为指令集创建一个新的扩展。arm核心可能关心ARM寄存器本身,如果协处理器接口本身存在TRM,如果协处理器读取的控制线告诉arm根据驱动该信号的协处理器来修改指定的arm寄存器,我不会感到惊讶。
https://stackoverflow.com/questions/7688372
复制相似问题