ARM汇编指令MCR/MRC

原文链接:https://www.cnblogs.com/lifexy/p/7203786.html

协处理器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包含1632位的寄存器,其编号为015

而访问CP15寄存器的指令主要是MCRMRC这两个指令。

例如协处理器15CP15),ARM处理器使用协处理器15的寄存器来控制cacheTCM和存储器管理。

 而访问CP15寄存器的指令主要是MCRMRC这两个指令:

MRC协处理器寄存器ARM处理器寄存器的数据传送指令(读出协处理器寄存器)

MCRARM处理器寄存器到协处理器寄存器数据传送指令(写入协处理器寄存器)

 

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

上一篇:如何让Docker镜像飞起来


下一篇:交叉编译OpenSSL和paho.mqtt.c