汇编指令学习总结
MRC:协处理器寄存器到ARM处理器寄存器的数据传送指令(读出协处理器寄存器)。
MCR:ARM处理器寄存器到协处理器寄存器的数据传送指令(写入协处理器寄存器)。
在基于ARM的嵌入式应用系统中,存储系统的操作通常是由协处理器CP15完成的。CP15包含16个32位的寄存器,其编号为0~15。
访问CP15寄存器的指令主要是MCR和MRC这两个指令。
协处理器15(CP15),ARM处理器使用协处理器15的寄存器来控制cache、TCM和存储器管理。
MRC{cond}p15,,,,,
MCR{cond}p15,,,,,
cond:为指令执行的条件码。当cond忽略时指令为无条件执行。
Opcode1:协处理器的特定操作码。对于CP15寄存器来说,opcode10
Rd:作为源寄存器的ARM寄存器,其值将被传送到协处理器寄存器中,或者将协处理器寄存器的值传送到该寄存器里面,通常为R0
CRn:作为目标寄存器的协处理器寄存器,其编号是CC15。
CRm:协处理器中附加的目标寄存器或源操作数寄存器。如果不需要设置附加信息,将CRm设置为c0,否则结果未知
Opcode2:可选的协处理器特定操作码。(用来区分同一个编号的不同物理寄存器,当不需要提供附加信息时,指定为0)
1。1示例:mrcp15,0,r0,c1,c0,0将CP15的寄存器C1的值读到r0中
mcrp15,0,r0,c7,c7,0关闭ICaches和DCaches
mcrp15,0,r0,c8,c7,0使无效整个数据TLB和指令TLB
1。2在C函数中使用汇编示例:
asm(mrcp15,0,r1,c1,c0,0使用asm可以在C函数中执行汇编语句
orrr1,r1,0xc0000000
mcrp15,0,r1,c1,c0,0
:::r1:::r1向GCC声明:我对r1作了改动
);
2。CP15中的寄存器介绍
CP15的寄存器列表如表所示:
寄存器编号
基本作用
在MMU中的作用
在PU中的作用
0hrID编码(只读)
ID编码和cache类型
1hr控制位(可读写)
各种控制位
2hr存储保护和控制
地址转换表基地址
Cachability的控制位
3hr存储保护和控制
域访问控制位
Bufferablity控制位
4hr存储保护和控制
保留
保留
5hr存储保护和控制
内存失效状态
访问权限控制位
6hr存储保护和控制
内存失效地址
保护区域控制
7hr高速缓存和写缓存
高速缓存和写缓存控制
8hr存储保护和控制
TLB控制
保留
9hr高速缓存和写缓存
高速缓存锁定
10hr存储保护和控制
TLB锁定
保留
11hr保留
12hr保留
13hr进程标识符
进程标识符
14hr保留
15hr因不同设计而异
因不同设计而异因不同设计而异
2。1CP15的寄存器C0
CP15中寄存器C0对应两个标识符寄存器,由访问CP15的寄存器指令指定要访问哪个具体物理寄存器,与两个标识符寄存器的对应关系如下所示:
opcode2编码
对应的标识符号寄存器
0b000
主标识符寄存器
0b001
cache类型标识符寄存器
其他
保留
1、主标识符寄存器
指令格式:MRCP15,0,R0,C0,C0,0将主标示符寄存器的内容读到AMR寄存器R0中
主标示符的编码格式对于不同的ARM处理器版本有所不同。对于AMR7之后的处理器,其主标示符编码格式如下:
30~24
23~20
19~16
15~4
3~0
由生产商确定
产品子编号
ARM体系版本号
产品主编号
处理器版本号
各部分的编码详细含义如下表所示:
2、cache类型标识符寄存器
指令格式:MRCP15,0,R0,C0,C0,1将cache类型标识符寄存器的内容读到AMR寄存器R0中
ARM处理器中cache类型标识符寄存器的编码格式如下所示:
3129
2825
24hr2312
110
000hr属性字段
S
数据cache相关属性
指令cache相关属性
各部分的编码详细含义如下表所示:
位
含义
位〔28:25〕
主要用于定义对于写回类型的cache的一些属性
位〔24〕
定义系统中的数据cache和指令cache是分开的还是统一的:
0:系统的数据cache和指令cache是统一的
1:系统的数据cache和指令cache是分开的
位〔23:12〕
定义数据cache的相关属性,如果位〔24〕为0,本字段定义整个cache的属性
位〔31:24〕
定义指令cache的相关属性,如果位〔24〕为0,本字段定义整个cache的属性
控制字段位〔28:25〕的含义
主要用于定义对于写回类型的cache的一些属性,cache类型标识符寄存器的控制字段位〔28:25〕:
编码
cache类型
cache内容清除方法
cache内容锁定方法
0b0000
写通类型
不需要内容清除
不支持内容锁定
0b0001
写回类型
数据块读取
不支持内容锁定
0b0010
写回类型
由寄存器C7定义
不支持内容锁定
0b0110
写回类型
由寄存器C7定义
支持格式A
0b0111
写回类型
由寄存器C7定义
支持格式B
控制字段位〔23:12〕及控制字段位〔11:0〕含义
〔23:12〕用于定义数据cache的属性,〔11:0〕用于定义指令cache的属性。编码格式如下:
119
86
53
2hr10
000hrcache容量
cache相联特性
M
块大小
其中bits〔1:0〕含义如下:
编码
cache块大小
0b00
2个字(8字节)
0b01
4个字(16字节)
0b10
8个字(32字节)
0b11
16个字(64字节)
其中bits〔5:3〕含义如下:
编码
M0时含义
M1时含义
0b000
1路相联(直接映射)
没有cache
0b001
2路相联
3路相联
0b010
4路相联
6路相联
0b011
8路相联
12路相联
0b100
16路相联
24路相联
0b101
32路相联
48路相联
0b110
64路相联
96路相联
0b111
128路相联
192路相联
其中bits〔8:6〕含义如下:
编码
M0时含义
M1时含义
0b000
0。5KB
0。75KB
0b001
1KB
1。5KB
0b010
2KB
3KB
0b011
4KB
6KB
0b100
8KB
12KB
0b101
16KB
24KB
0b110
32KB
48KB
0b111
64KB
96KB
2。2CP15的寄存器C1
CP15中的寄存器C1是一个控制寄存器,它包括以下控制功能:禁止或使能MMU以及其他与存储系统相关的功能配置存储系统以及ARM处理器中的相关部分的工作
指令如下:
mrcp15,0,r0,c1,c0{,0};将CP15的寄存器C1的值读到r0中
mcrp15,0,r0,c1,c0{,0};将r0的值写到CP15的寄存器C1中
CP15中的寄存器C1的编码格式及含义说明如下:
C1中的控制位
含义
M(bit〔0〕)
0:禁止MMU或者PU
1:使能MMU或者PU
如果系统中没有MMU及PU,读取时该位返回0,写入时忽略该位。
A(bit〔1〕)
0:禁止地址对齐检查
1:使能地址对齐检查
C(bit〔2〕)
当数据cache和指令cache分开时,本控制位禁止使能数据cache。当数据cache和指令cache统一时,该控制位禁止使能整个cache。
0:禁止数据整个cache
1:使能数据整个cache
如果系统中不含cache,读取时该位返回0。写入时忽略
当系统中不能禁止cache时,读取时返回1。写入时忽略
W(bit〔3〕)
0:禁止写缓冲
1:使能写缓冲
如果系统中不含写缓冲时,读取时该位返回0。写入时忽略
当系统中不能禁止写缓冲时,读取时返回1。写入时忽略
P(bit〔4〕)
对于向前兼容26位地址的ARM处理器,本控制位控制PROG32控制信号
0:异常中断处理程序进入32位地址模式
1:异常中断处理程序进入26位地址模式
如果本系统中不支持向前兼容26位地址,读取该位时返回1,写入时忽略
D(bit〔5〕)
对于向前兼容26位地址的ARM处理器,本控制位控制DATA32控制信号
0:禁止26位地址异常检查
1:使能26位地址异常检查
如果本系统中不支持向前兼容26位地址,读取该位时返回1,写入时忽略
L(bit〔6〕)
对于ARMv3及以前的版本,本控制位可以控制处理器的中止模型
0:选择早期中止模型
1:选择后期中止模型
B(bit〔7〕)
对于存储系统同时支持bigendian和littleendian的ARM系统,本控制位配置系统的存储模式
0:littleendian
1:bigendian
对于只支持littleendian的系统,读取时该位返回0,写入时忽略
对于只支持bigendian的系统,读取时该位返回1,写入时忽略
S(bit〔8〕)
在基于MMU的存储系统中,本位用作系统保护
R(bit〔9〕)
在基于MMU的存储系统中,本位用作ROM保护
F(bit〔10〕)
由生产商定义
Z(bit〔11〕)
对于支持跳转预测的ARM系统,本控制位禁止使能跳转预测功能
0:禁止跳转预测功能
1:使能跳转预测功能
对于不支持跳转预测的ARM系统,读取该位时返回0,写入时忽略
I(bit〔12〕)
当数据cache和指令cache是分开的,本控制位禁止使能指令cache
0:禁止指令cache
1:使能指令cache
如果系统中使用统一的指令cache和数据cache或者系统中不含cache,读取该位时返回0,写入时忽略。当系统中的指令cache不能禁止时,读取时该位返回1,写入时忽略
V(bit〔13〕)
对于支持高端异常向量表的系统,本控制位控制向量表的位置
0:选择低端异常中断向量0x00x1c
1:选择高端异常中断向量0xffff00000xffff001c
对于不支持高端异常向量表的系统,读取时该位返回0,写入时忽略
PR(bit〔14〕)
如果系统中的cache的淘汰算法可以选择的话,本控制位选择淘汰算法
0:常规的cache淘汰算法,如随机淘汰
1:预测性淘汰算法,如roundrobin淘汰算法
如果系统中cache的淘汰算法不可选择,写入该位时忽略。读取该位时,根据其淘汰算法是否可以比较简单地预测最坏情况返回0或者1
L4(bit〔15〕)
对于ARM版本5及以上的版本,本控制位可以提供兼容以前的ARM版本的功能
0:保持ARMv5以上版本的正常功能
1:将ARMv5以上版本与以前版本处理器兼容,不根据跳转地址的bit〔0〕进行ARM指令和Thumb状态切换:bit〔0〕等于0表示ARM指令,等于1表示Thumb指令
Bits〔31:16〕)
这些位保留将来使用,应为UNPSBZP
2。3CP15的寄存器C2
C2寄存器的别名:Translationtablebase(TTB)register
C2寄存器用来保存页表的基地址,即一级映射描述符表的基地址。其编码格如下所示:
310
一级映射描述符表的基地址(物理地址)
2。4CP15的寄存器C3
CP15中的寄存器C3定义了ARM处理器的16个域的访问权限。
在CP15的C3寄存器中,划分了16个域,每个区域由两位构成,这两位说明了当前内存的检查权限:
00:当前级别下,该内存区域不允许被访问,任何的访问都会引起一个domainfault,这时AP位无效
01:当前级别下,该内存区域的访问必须配合该内存区域的段描述符中AP位进行权检查
10:保留状态(我们最好不要填写该值,以免引起不能确定的问题)
11:当前级别下,对该内存区域的访问都不进行权限检查。这时AP位无效
所以只有当相应域的编码为01时,才会根据AP位和协处理器CP15中的C1寄存器的R,S位进行权限检查
2。5CP15的寄存器C5
CP15中的寄存器C5是失效状态寄存器,分为指令状态失效和数据状态失效。
MRCp15,0,,c5,c0,0访问数据失效状态寄存器
MRCp15,0,,c5,c0,1访问指令状态失效寄存器
编码格式如下所示:
319
8hr74
30
UNPSBZP
0hr域标识
状态标识
其中,域标识bit〔7:4〕表示存放引起存储访问失效的存储访问所属的域。状态标识bit〔3:0〕表示放引起存储访问失效的存储访问类型,该字段含义如下表所示(优先级由上到下递减)。
2。4CP15的寄存器C6
CP15中的寄存器C6是失效地址寄存器,其中保存了引起存储访问失效的地址,分为数据失效地址寄存器和指令失效地址寄存器。
MRCp15,0,,c6,c0,0访问数据失效地址寄存器
MRCp15,0,,c6,c0,2访问指令失效地址寄存器
编码格式如下所示:
310
失效地址(虚拟地址)
2。5CP15的寄存器C7
CP15的C7寄存器用来控制cache和写缓存,它是一个只写寄存器,读操作将产生不可预知的后果。访问CP15的C7寄存器的指令格式为:mcrp15,0,Rd,CRn,CRm,opcode2。具体含义如下表所示(表中的数据是指Rd中的数据)
2。6CP15的寄存器C8
系统协处理器CP15的寄存器C8就是清除TLB内容的相关操作。它是一个只写的寄存器。
MCRp15,0,Rd,c8,CRm,opcode2
Rd中为要写入C8寄存器的内容,CRm和opcode2的不同组合决定指令执行的不同操作。
2。7CP15的寄存器C12
CP15寄存器C12用来设置异常向量基地址,其编码格式如下所示:
MCRp15,0,,c12,c0,0;Rd中存放要修改的异常向量基地址
315
40
异常向量基地址
Reserve
注:只有ARM11和cortexa可以任意修改异常向量基地址。arm7,ARM9,ARM10只可以在0地址或0xffff0000中
2。8CP15的寄存器C13
CP15中的寄存器C13用于快速上下文切换。其编码格式如下所示
3125
240
PID
其中,在读操作时,结果中位〔31::25〕返回PID,其他位的数值是不可以预知的。写操作将设置PID的值。当PID的值为0时,MVAVA(0(PID)25),MVAVA,相当于禁止了FCSE。系统复位后PID即为0。当PID的值不为0时,相当于使能了FCSE。
张馨予演过的电视剧张馨予电影电视剧剧情剧照盘点张馨予电视剧电影作品盘点,张馨予还演过那些电影电视剧介绍:说道张馨予,相信很多人都知道女星张馨予,但是并不是所有的人都了解张馨予。相信很多人了解张馨予是从那些娱乐八卦跟黑历史开……
使徒行者3评价好看吗?豆瓣评分曝光及演员阵容一览使徒行者3评价好看吗?在我心目当中,电视剧《使徒行者3》还算可以,感觉剧情方面还是比较精彩的。虽然谈不上多惊艳,但至少也不算差了。(注:个人观看,仅供讨论)但,目前《使徒……
复仇者联盟3看懂了没这些背景和梗你需要了解下《复仇者联盟3》看懂了没:这些背景和梗你需要了解下终于有一部电影能在票房上超越让人烦心的《后来的我们》了,就是《复仇者联盟3》。今年是漫威电影宇宙10周年,《复联3》也被……
神州数码入选Forrester中国云迁移现代化和管理服务现状当前,随着云在中国的普及,与开发、迁移、现代化和跨混合云环境的工作负载管理相关的挑战也在持续增加。近日,全球最具影响力的独立研究咨询公司之一Forrester发布首份中国云迁移……
金扫帚奖提名名单公布名单上面竟然有他近日,金扫帚奖提名的名单已经公布出来了,大家都来围观今年的金扫帚奖都有哪些演员上了名单,这次金扫帚奖名单上面一共有28名演员,其中,肖战、鹿晗和杨紫均在名单上面,一起来看一下具……
小宋佳主演的电视剧有哪些?小宋佳老公是谁?小宋佳主演的电视剧有《白狼》、《出水芙蓉》、《闯关东》、《跟我的前妻谈恋爱》、《故乡的云》、《红日》、《圣天门口》、《天地民心》、《雾里看花》、《真情无限之继母》等。小宋……
最值得看的十部军旅电视剧(上品佳作军旅迷入坑必看)2022热播军旅剧《特战荣耀》大家追了吗?真的非常好看,但就是感觉跟不上啊!今天给大家奉上最值得看的十部军旅电视剧汇总,每一部都是非常的精彩,剧情节跌宕起伏,而剧中的演员更是可……
你会放弃微信吗?我不会放弃微信的。微信在我现实生活中带来了许多的方便。比如出去买东西。拿上一部手机就搞定。比如到某一个火车站坐火车,我就用微信小程序里面的网证就可以搞定。最起码不用带身份证。但……
梦华录具体播出时间,梦华录主要讲的是什么励志剧《梦华录》安排在2022年6月2日播出,所给带来三个女人经历各种困境来携手勇闯汴京,还在皇城司指挥使顾千帆的帮助下,最终姐妹齐心努力把永安楼变成汴京最大酒楼的创业事情。……
软件开发成本评估常见问题汇总1。开发移动应用(APP)如何评估成本?答:开发移动应用,对于同时适用于Android和iOS系统的需求,功能点计数项仅识别一次,不乘2。因为现在混合式移动应用开发工具已……
西游记中硬功力最高的妖怪,孙悟空打不赢他如来佛祖也打不过西游记中硬功力最高的妖怪,孙悟空打不赢他如来佛祖也打不过可以说,在西游记唐僧,孙悟空,猪八戒,沙僧所遇到的全部妖怪当中,没有后台的妖怪的只有白骨精,黑熊精,豹子精,牛魔王……
小欢喜丁一跳楼是第几集小欢喜乔英子为什么跳桥小欢喜中丁一的出现让整个剧显得有点沉闷起来,丁一的跳楼让乔英子彻底看清了自己小欢喜丁一跳楼是第几集?小欢喜乔英子跳桥是第几集?我们一起来看一下。小欢喜丁一跳楼是第几集……