协处理器CP15介绍一MCR/MRC指令: https://www.cnblogs.com/lifexy/p/7203786.html
ARM汇编指令MCR/MRC学习https://blog.csdn.net/juxianliyu/article/details/42168347
概述:在基于ARM的嵌入式应用系统中,存储系统的操作通常是由协处理器CP15完成的。CP15包含16个32位的寄存器,其编号为0~15。
而访问CP15寄存器的指令主要是MCR和MRC这两个指令。
例如协处理器15(CP15),ARM处理器使用协处理器15的寄存器来控制cache、TCM和存储器管理。
而访问CP15寄存器的指令主要是MCR和MRC这两个指令:
MRC:协处理器寄存器到ARM处理器寄存器的数据传送指令(读出协处理器寄存器)。
MCR:ARM处理器寄存器到协处理器寄存器的数据传送指令(写入协处理器寄存器)
1.MRC/MCR指令读取CP15寄存器格式:
MRC{cond} p15,<Opcode_1>,<Rd>,<CRn>,<CRm>,<Opcode_2>
MCR{cond} p15,<Opcode_1>,<Rd>,<CRn>,<CRm>,<Opcode_2>
cond:为指令执行的条件码。当cond忽略时指令为无条件执行。
Opcode_1:协处理器的特定操作码. 对于CP15寄存器来说,opcode1=0
Rd:作为源寄存器的ARM寄存器,其值将被传送到协处理器寄存器中,或者将协处理器寄存器的值传送到该寄存器里面 ,通常为R0
CRn:作为目标寄存器的协处理器寄存器,其编号是C~C15。
CRm:协处理器中附加的目标寄存器或源操作数寄存器。如果不需要设置附加信息,将CRm设置为c0,否则结果未知
Opcode_2:可选的协处理器特定操作码。(用来区分同一个编号的不同物理寄存器,当不需要提供附加信息时,指定为0)
看几个例子就明白
MRC p2,5,r3,c5,c6
协处理器p2把c5和c6经过5操作的结果赋给r3
MCR p6,0,r4,c5,c6
协处理器p6把r4执行0操作后将结果存放进c6
MRC p3,9,r3,c5,c6,2
协处理器p3把c5和c6经过9操作(类型2)的结果赋给r3
4.13.6 举例
MRC 2,5,R3,c5,c6 ;请求协处理器2 执行操作5 ,操作数为c5和c6,
; 传送结果到R3 (单次32位字)
MCR 6,0,R4,c6 ; 请求协处理器6执行操作0,操作数为R4
;结果送到c6