MCR指令将ARM处理器寄存器中的数据传输到协处理器寄存器中。如果协处理器不能成功执行该操作,则未定义的指令将异常中断。
指令的语法格式:
MCR{<cond>} p15, 0, <Rd>, <CRn>, <CRm>{,<opcode_2>}
MCR2 p15, 0, <Rd>, <CRn>, <CRm>{,<opcode_2>}
其中,<cond>执行指令的条件码。<cond>忽略时指令为无条件执行。MCR2中,<cond>为Ob指令是无条件执行指令。
<opcode_1>为协处理器执行的操作代码。CP对于15协处理器, <opcode_1>永远为0b000,当<opcode_1>不为0b000时,指令操作结果不可预测。
<Rd>元寄存器ARM寄存器的值被传送到得协处理器寄存器。
<Rd>不能为PC,当其为PC指令操作结果不可预测。
<CRn>协处理器寄存器作为目标寄存器,其编号可能是C0,C1...C15。 <CRm>用于区分同一编号的不同物理寄存器的附加目标寄存器或原始操作数寄存器。当指令中不需要附加信息时,C0指定为<CRm>,否则,指令操作结果不可预测。 <opcode_2>为区分同一编号的不同物理寄存器提供额外信息。省略指令中指定的附加信息<opcode_2>或将其指定为0,否则指令操作结果不可预测。
MRC指令将协处理器寄存器中的数值传输到ARM在处理器的寄存器中。如果协处理器不能成功执行此操作,则未定义的指令将异常中断。
指令的语法格式:
MRC{<cond>} p15, 0, <Rd>, <CRn>, <CRm>{,<opcode_2>}
MRC2 p15, 0, <Rd>, <CRn>, <CRm>{,<opcode_2>}
ARM协处理器cp15.有16个寄存器。《ARM系统结构与编程
这里我大概说一下MRC与MCR参考这两个协处理器的操作《s3c2440》元件手册P140页
这两个命令是用来的ARM寄存器与协处理器寄存器之间操作的,一个协处理器与寄存器之前操作的例子就是,一个浮点值在协处理器中转换成32位整型,然后它的结果传送到ARM920T的寄存器中MRC。相反则为MCR。
最重要的应用是通过命令从协处理器交换控制信息ARM920T CPSR相应标识位
看几个例子就明白了
MRC p2,5,r3,c5,c6
协处理器p2把c5和c65操作结果给出r3
MCR p6,0,r4,c5,c6
协处理器p6把r执行0操作后,将结果存放进去c6
MRC p3,9,r3,c5,c6,2
协处理器p3把c5和c6给出9操作(类型2)的结果r3
详细写下格式
MCR{cond} p15,{opcode_1},<Rd>,<CRn>,<CRm>{,opcode_2}
其中{cond} 是可选的执行条件
p15指定哪个协处理器,ARM920T好像有两个1514
<opcode_1>对于协处理器将执行的操作代码CP总是为了15ob00,即0,如果没有,结果是不同的预测
<Rd>作为源寄存器ARM寄存器
<CRn>目标寄存器的协处理器寄存器
<CRm>用于区分相同数量的不同物理寄存器的附加目标寄存器或源操作数寄存器,如果不需要,则设置为C0,否则结果不可预测
<opcode_2>附加信息用于区分同一编号的不同物理寄存器。如果省略或0,则表示不附加。如果没有,后果是不可预测的
mrc是协处理器的命令。在协处理器中读取寄存器的数据ARM在处理器的寄存器中。这句话的意思应该是读取协会处理器中的寄存器数据ARM处理器的r0里面。应该是ARM访问MMU,一般cp15就是MMU。
<MCR|MRC>{cond} p#, <expression1>,Rd,cn,cm{, <expression2>} MRC 移动协处理器ARM7寄存器(L=1) MCR 从ARM77将寄存器移到协处理器(L=0) {cond} 两个字符的条件代码 p# 被要求获得协会处理器的唯一标志是傅 <expression1> 计算常量并放入CP Opc域 Rd 是表达式计算ARM7有效寄存器序号 cn 和cm 计算有效协处理器寄存器CRn CRm序号 <expression2> 计算常量并放入CP域 4.13.6 举例 MRC 2,5,R3,c5,c6 ;请求协处理器2 执行操作5 ,操作数为c5和c6, ; 传送结果到R3 (单次32位字) MCR 6,0,R4,c6 ; 请求协处理器6执行操作0,操作数为R4 ;结果送到c6 来自ARM7 数据手册
将协处理器p15的寄存器中的数据传送到ARM处理器寄存器r其中1是协处理器操作码1,0是协处理器操作码2,c1存放第一个操作数的协处理器寄存器,c存储第二个操作数的协处理器寄存器
读取控制寄存器,包括 MMU,cache,writebuffer 开关. 读出修改后再使用 mcr p15,0,r0,c1,c0,0 写回去.