"); //-->
访问CP15寄存器指令的编码格式及语法说明如下:
31 28 |
27 24 |
23 21 |
20 |
19 16 |
15 12 |
11 8 |
7 5 |
4 |
3 0 |
cond |
1 1 1 0 |
opcode_1 |
L |
cr n |
rd |
1 1 1 1 |
opcode_2 |
1 |
crm |
说明:
<opcode_1>:协处理器行为操作码,对于CP15来说,<opcode_1>永远为0b000,否则结果未知。
<rd>:不能是r15/pc,否则,结果未知。
<crn>:作为目标寄存器的协处理器寄存器,编号为C0~C15。
<crm>:附加的目标寄存器或源操作数寄存器,如果不需要设置附加信息,将crm设置为c0,否则结果未知。
<opcode_2>:提供附加信息比如寄存器的版本号或者访问类型,用于区分同一个编号的不同物理寄存器,可以省略<opcode_2>或者将其设置为0,否则结果未知。
指 令 |
说 明 |
语法格式 |
mcr |
将ARM处理器的寄存器中的数据写到CP15中的寄存器中 |
mcr{<cond>} p15, <opcode_1>, <rd>, <crn>, <crm>, {<opcode_2>} |
mrc |
将CP15中的寄存器中的数据读到ARM处理器的寄存器中 |
mcr{<cond>} p15, <opcode_1>, <rd>, <crn>, <crm>, {<opcode_2>} |
CP15的寄存器列表如表4-1所示。
表4-1 ARM处理器中CP15协处理器的寄存器
寄存器编号 |
基本作用 |
在MMU中的作用 |
在PU中的作用 |
0 |
ID编码(只读) |
ID编码和cache类型 |
|
1 |
控制位(可读写) |
各种控制位 |
|
2 |
存储保护和控制 |
地址转换表基地址 |
Cachability的控制位 |
3 |
存储保护和控制 |
域访问控制位 |
Bufferablity控制位 |
4 |
存储保护和控制 |
保留 |
保留 |
5 |
存储保护和控制 |
内存失效状态 |
访问权限控制位 |
6 |
存储保护和控制 |
内存失效地址 |
保护区域控制 |
7 |
高速缓存和写缓存 |
高速缓存和写缓存控制 |
|
8 |
存储保护和控制 |
TLB控制 |
保留 |
9 |
高速缓存和写缓存 |
高速缓存锁定 |
|
10 |
存储保护和控制 |
TLB锁定 |
保留 |
11 |
保留 |
|
|
12 |
保留 |
|
|
13 |
进程标识符 |
进程标识符 |
|
14 |
保留 |
|
|
15 |
因不同设计而异 |
因不同设计而异 |
因不同设计而异 |
· CP15的寄存器C0
CP15中寄存器C0对应两个标识符寄存器,由访问CP15中的寄存器指令中的<opcode_2>指定要访问哪个具体物理寄存器,<opcode_2>与两个标识符寄存器的对应关系如下所示:
opcode_2编码 |
对应的标识符号寄存器 |
0b000 |
主标识符寄存器 |
0b001 |
cache类型标识符寄存器 |
其他 |
保留 |
1)主标识符寄存器
访问主标识符寄存器的指令格式如下所示:
mrc p15, 0, r0, c0, c0, 0 ;将主标识符寄存器C0,0的值读到r0中
ARM不同版本体系处理器中主标识符寄存器的编码格式说明如下。
ARM7之后处理器的主标识符寄存器编码格式如下所示:
31 24 23 20 19 16 15 4 3 0 |
||||
由生产商确定 |
产品子编号 |
ARM体系版本号 |
产品主编号 |
处理器版本号 |
位 |
说 明 |
位[3: 0] |
生产商定义的处理器版本号 |
位[15: 4] |
生产商定义的产品主编号,其中最高4位即位[15:12]可能的取值为0~7但不能是0或7 |
位[19: 16] |
ARM体系的版本号,可能的取值如下: 0x1 ARM体系版本4 0x2 ARM体系版本4T 0x3 ARM体系版本5 0x4 ARM体系版本5T 0x5 ARM体系版本5TE 其他 由ARM公司保留将来使用 |
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。
![]() 最近文章
|