访问CP15寄存器指令的编码格式及语法说明如下:312827242321201916151211875430cond1110opcode_1Lcrnrd1111opcode_21crm说明: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}4.1.2CP15寄存器介绍CP15的寄存器列表如表4-1所示。表4-1ARM处理器中CP15协处理器的寄存器寄存器编号基本作用在MMU中的作用在PU中的作用0ID编码(只读)ID编码和cache类型1控制位(可读写)各种控制位2存储保护和控制地址转换表基地址Cachability的控制位3存储保护和控制域访问控制位Bufferablity控制位4存储保护和控制保留保留5存储保护和控制内存失效状态访问权限控制位6存储保护和控制内存失效地址保护区域控制7高速缓存和写缓存高速缓存和写缓存控制8存储保护和控制TLB控制保留9高速缓存和写缓存高速缓存锁定10存储保护和控制TLB锁定保留11保留12保留13进程标识符进程标识符14保留15因不同设计而异因不同设计而异因不同设计而异CP15的寄存器C0CP15中寄存器C0对应两个标识符寄存器,由访问CP15中的寄存器指令中的opcode_2指定要访问哪个具体物理寄存器,opcode_2与两个标识符寄存器的对应关系如下所示:opcode_2编码对应的标识符号寄存器0b000主标识符寄存器0b001cache类型标识符寄存器其他保留1)主标识符寄存器访问主标识符寄存器的指令格式如下所示:mrcp15,0,r0,c0,c0,0;将主标识符寄存器C0,0的值读到r0中ARM不同版本体系处理器中主标识符寄存器的编码格式说明如下。ARM7之后处理器的主标识符寄存器编码格式如下所示:31242320191615430由生产商确定产品子编号ARM体系版本号产品主编号处理器版本号位说明位[3:0]生产商定义的处理器版本号位[15:4]生产商定义的产品主编号,其中最高4位即位[15:12]可能的取值为0~7但不能是0或7位[19:16]ARM体系的版本号,可能的取值如下:0x1ARM体系版本40x2ARM体系版本4T0x3ARM体系版本50x4ARM体系版本5T0x5ARM体系版本5TE其他由ARM公司保留将来使用位[23:20]生产商定义的产品子编号,当产品主编号相同时,使用子编号来区分不同的产品子类,如产品中不同的高速缓存的大小等位[31:24]生产厂商的编号,现在已经定义的有以下值:0x41=AARM公司0x44=DDigitalEquipment公司0x69=Iintel公司ARM7处理器的主标识符寄存器编码格式如下所示:312423221615430由生产商确定A产品子编号产品主编号处理器版本号位说明位[3:0]生产商定义的处理器版本号位[15:4]生产商定义的产品主编号,其中最高4位即位[15:12]的值为0x7位[22:16]生产商定义的产品子编号,当产品主编号相同时,使用子编号来区分不同的产品子类,如产品中不同的高速缓存的大小等续表位说明位[23]ARM7支持下面两种ARM体系的版本号:0x0ARM体系版本30x1ARM体系版本4T位[31:24]生产厂商的编号,现在已经定义的有以下值:0x41=AARM公司0x44=DDigitalEquipment公司0x69=IIntel公司ARM7之前处理器的主标识符寄存器编码格式如下所示:312423221615430由生产商确定A产品子编号产品主编号处理器版本号位说明位[3:0]生产商定义的处理器版本号位[15:4]生产商定义的产品主编号,其中最高4位即为[15:12]的值为0x7位[22:16]生产商定义的产品子编号,当产品主编号相同时,使用子编号来区分不同的产品子类,如产品中不同的高速缓存的大小等位[23]ARM7支持下面两种ARM体系的版本号:0x0ARM体系版本30x1ARM体系版本4T位[31:24]生产厂商的编号,现在已经定义的有以下值:0x41=AARM公司0x44=DDigitalEquipment公司0x69=Iintel公司2)cache类型标识符寄存器访问cache类型标识符寄存器的指令格式如下所示:mrcp15,0,r0,c0,c0,1;将cache类型标识符寄存器C0,1的值读到r0中ARM处理器中cache类型标识符寄存器的编码格式如下所示:31292825242312110000属性字段S数据cache相关属性指令cache相关属性位说明位[28:25]指定控制字段位[24:0]指定的属性之外的cache的其他属性,详见表4-2位[24]定义系统中的数据cache和指令cache是分开的还是统一的:0系统的数据cache和指令cache是统一的;1系统的数据cache和指令cache是分开的位[23:12]定义数据cache的相关属性,如果位[24]为0,本字段定义整个cache的属性位[31:24]定义指令cache的相关属性,如果位[24]为0,本字段定义整个cache的属性其中控制字段位[28:25]的含义说明如下:表4-2cache类型标识符寄存器的控制字段位[28:25]编码cache类型cache内容清除方法cache内容锁定方法0b0000写通类型不需要内容清除不支持内容锁定0b0001写回类型数据块读取不支持内容锁定0b0010写回类型由寄存器C7定义不支持内容锁定0b0110写回类型由寄存器C7定义支持格式A0b0111写回类型由寄存器C7定义支持格式B控制字段位[23:12]和控制字段位[11:0]的编码格式相同,含义如下所示:1198653210000cache容量cache相联特性M块大小cache容量字段bits[8:6]的含义如下所示:编码M=0时含义(单位KB)M=1时含义(单位KB)0b0000.50.750b00111.50b010230b011460b1008120b10116240b11032480b1116496cache相联特性字段bits[5:3]的含义如下所示:编码M=0时含义M=1时含义0b0001路相联(直接映射)没有cache0b0012路相联3路相联0b0104路相联6路相联0b0118路相联12路相联0b10016路相联24路相联0b10132路相联48路相联0b11064路相联96路相联0b111128路相联192路相联cache块大小字段bits[1:0]的含义如下所示:编码cache块大小0b002个字(8字节)0b014个字(16字节)0b108个字(32字节)0b1116个字(64字节)CP15的寄存器C1访问主标识符寄存器的指令格式如下所示:mrcp15,0,r0,c1,c0{,0};将CP15的寄存器C1的值读到r0中mcrp15,0,r0,c1,c0{,0};将r0的值写到CP15的寄存器C1中CP15中的寄存器C1的编码格式及含义说明如下:31161514131211109876543210附加L4RRVIZFRSBLDPWCAM位说明M0:禁止MMU或者PU;1:使能MMU或者PUA0:禁止地址对齐检查;1:使能地址对齐检查C0:禁止数据/整个cache;1:使能数据/整个cacheW0:禁止写缓冲;1:使能写缓冲P0:异常中断处理程序进入32位地址模式;1:异常中断处理程序进入26位地址模式D0:禁止26位地址异常检查;1:使能26位地址异常检查L0:选择早期中止模型;1:选择后期中止模型B0:littleendian;1:bigendianS在基于MMU的存储系统中,本位用作系统保护R在基于MMU的存储系统中,本位用作ROM保护F0:由生产商定义Z0:禁止跳转预测功能;1:使能跳转预测指令I0:禁止指令cache;1:使能指令cacheV0:选择低端异常中断向量0x0~0x1c;1:选择高端异常中断向量0xffff0000~0xffff001cRR0:常规的cache淘汰算法,如随机淘汰;1:预测性淘汰算法,如round-robin淘汰算法L40:保持ARMv5以上版本的正常功能;1:将ARMv5以上版本与以前版本处理器兼容,不根据跳转地址的bit[0]进行ARM指令和Thumb状态切换:bit[0]等于0表示ARM指令,等于1表示Thumb指令附加:CP15的寄存器C2CP15中的寄存器C2保存的是页表的基地址,即一级映射描述符表的基地址。其编码格如下所示:310一级映射描述符表的基地址(物理地址)CP15的寄存器C3CP15中的寄存器C3定义了ARM处理器的16个域的访问权限。310D15D14D13D12D11D10D9D8D7D6D5D4D3D2D1D0CP15的寄存器C5CP15中的寄存器C5是失效状态寄存器,编码格式如下所示:31987430UNP/SBZP0域标识状态标识其中,域标识bit[7:4]表示存放引起存储访问失效的存储访问所属的域。状态标识bit[3:0]表示放引起存储访问失效的存储访问类型,该字段含义如表4-3所示(优先级由上到下递减)。表4-3状态标识字段含义引起访问失效的原因状态标识域标识C6终端异常(TerminalException)0b0010无效生产商定义中断向量访问异常(VectorException)0b0000无效有效地址对齐0b00x1无效有效一级页表访问失效0b1100无效有效二级页表访问失效0b1110有效有效基于段的地址变换失效0b0101无效有效基于页的地址变换失效0b0111有效有效基于段的存储访问中域控制失效0b1001有效有效基于页的存储访问中域控制失效0b1101有效有效基于段的存储访问中访问权限控制失效0b1111有效有效基于页的存储访问中访问权限控制失效0b0100有效有效基于段的cache预取时外部存储系统失效0b0110有效有效基于页的cache预取时外部存储系统失效0b1000有效有效基于段的非cache预取时外部存储系统失效0b1010有效有效CP15中的寄存器C6CP15中的寄存器C5是失效地址寄存器,编码格式如下所示:310失效地址(虚拟地址)CP15中的寄存器C7CP15的C7寄存器用来控制cache和写缓存,它是一个只写寄存器,读操作将产生不可预知的后果。访问CP15的C7寄存器的指令格式如下所示:mcrp15,0,rd,c7,crm,opcode_2;rd、crm和opcode_2的不同取值组合实现不同功能CP15中的寄存器C8CP15的C8寄存器用来控制清除TLB的内容,是只写寄存器,读操作将产生不可预知的后果。访问CP15的C8寄存器的指令格式如下所示:mcrp15,0,rd,c8,crm,opcode_2;rd、crm和opcode_2的不同取值组合实现不同功能,见第4.2节CP15中的寄存器C9CP15的C9寄存器用于控制cache内容锁定。访问CP15的C9寄存器的指令格式如下所示:mcrp15,0,rd,c9,c0,opcode_2