cp15协处理器指令详解.
- 格式:doc
- 大小:181.50 KB
- 文档页数:17
arm汇编cp15格式-回复CP15格式是一个用于ARM架构处理器中的协处理器格式。
它被用于实现对特殊寄存器和一些特权操作的访问和控制。
在本文中,我们将一步一步地回答一些关于CP15格式的问题,包括它的功能、如何使用它以及它的一些使用示例。
一、什么是CP15格式?CP15格式是ARM架构中的一个协处理器格式。
它被用来实现对一些特殊寄存器和特权操作的访问和控制。
这些特殊寄存器和特权操作对于操作系统和处理器架构之间的通信和控制至关重要。
二、CP15格式的功能是什么?CP15格式的主要功能包括:1. 访问系统控制寄存器(System Control Registers,SCR)和体系结构版本寄存器(Architectural Version Registers,AVR)等特殊寄存器;2. 控制处理器的访问权限和特权级别;3. 提供对异常处理的支持,例如中断处理和系统调用;4. 管理cpu缓存和内存管理单元(MMU)等。
5. 提供对TLB(Translation Lookaside Buffer)的访问和控制。
三、怎么使用CP15格式?使用CP15格式,我们需要通过特殊的指令来进行访问和控制。
在ARM 汇编语言中,这些指令通常以"MCR"(Move to Co-processor Register)或"MRC"(Move from Co-processor Register)开头,后跟协处理器编号和寄存器编码。
下面是一些使用CP15格式的示例:1. 读取系统控制寄存器的值:MRC p15, 0, R1, c1, c0, 0这条指令读取CP15寄存器1(c1)中的值,并将其放入R1寄存器中。
2. 更新系统控制寄存器的值:MCR p15, 0, R0, c1, c0, 0这条指令将R0寄存器的值写入CP15寄存器1(c1)中,从而更新系统控制寄存器的值。
四、CP15格式的使用示例1. 启用或禁用MMU:MRC p15, 0, R1, c1, c0, 0 读取系统控制寄存器的值ORR R1, R1, #0x1 << 0 将R1寄存器中的Bit 0位置1以启用MMUMCR p15, 0, R1, c1, c0, 0 更新系统控制寄存器的值通过读取和更新系统控制寄存器的值来启用或禁用MMU。
协处理器CP15使用介绍一、访问CP15寄存器的指令访问CP15寄存器指令的编码格式及语法说明如下:说明:<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寄存器介绍CP15的寄存器列表如下所示。
1.CP15的寄存器C0CP15中寄存器C0对应两个标识符寄存器,由访问CP15中的寄存器指令中的<opcode_2>指定要访问哪个具体物理寄存器,<opcode_2>与两个标识符寄存器的对应关系如下所示:1)主标识符寄存器访问主标识符寄存器的指令格式如下所示:mrc p15, 0, r0, c0, c0, 0 ;将主标识符寄存器C0,0的值读到r0中ARM不同版本体系处理器中主标识符寄存器的编码格式说明如下。
ARM汇编指令集汇编指令集的介绍,包括指令和伪指令。
指令和概念指令指令指的是CPU机器指令的助记符,是由CPU的指令集提供的,经过编译之后,会以机器码的形式由CPU读取执⾏伪指令伪指令本质上不是指令,和CPU的机器指令没有任何关系,只是和指令⼀起写在代码中⽽已,是由环境提供的,其⽬的是⽤于指导编译过程,伪指令经过编译后不会⽣成⼆进制机器码,仅仅在编译阶段有效果指令编程风格ARM官⽅风格官⽅风格指令⼀般使⽤⼤写,例如:LDR R0,[R1],Windows中常使⽤这种风格GUN Linux风格指令⼀般使⽤⼩写字母,例如:ldr r0,[r1],Linux环境中常⽤这种风格ARM汇编特点LDR/STR架构1. 采⽤RISC架构,CPU本⾝不能直接读取内存,⽽需要把内存中的数据加载到CPU的通⽤寄存器中,才能被CPU处理2. ldr(load register)将内存中的数据加载到通⽤寄存器3. str(store register)将寄存器内容存⼊内存空间4. ldr和str组合,可以实现ARM CPU和内存的数据交换8种寻址⽅式1. 寄存器寻址:move r1,r2:把r2的值赋值到r1寄存器中2. ⽴即寻址:move r0,#0xFF00:把⽴即数0xFF00赋值给r0寄存器3. 寄存器移位寻址:move r0,r1,lsl #3:把r1左移三位(*8)之后的值赋值给r0寄存器4. 寄存器间接寻址:ldr r1,[r2]:寄存器有中括号,表⽰内存地址对应的数据,所以这⾥r2表⽰⼀个内存地址,[]表⽰取r2指针对应的数据,这句代码的意思是把r2对应的内存中的数据赋值给r15. 基址变址寻址:ldr r1,[r2,#4]:将指针r2的值(内存地址)+4之后指向的数据赋值给r16. 多寄存器寻址:ldmia r1!,{r2 - r7,r12}:这种情况下,r1是⼀个指针,⾥边存放的内存地址,然后以r1⾥边的内存地址为基地址,向后以此加1得到{}⾥的寄存器数量个内存地址,然后将刚才得到的这些内存地址指向的变量的值赋值给{}⾥的对应位置的寄存器,类似从内存中读取数组,然后把数组的元素依次赋值给这些寄存器7. 堆栈寻址:stmfd sp!,{r2 - r7,lr}:和多寄存器类似,区别是将栈SP中连续访问{}数量个字节,然后依次赋值给{}⾥的寄存器8. 相对寻址:beq flag::flag:标号⽤于标记标号后⾯那句指令的地址,常⽤来表⽰⼊⼝点,函数名就是⼀个标号,C语⾔中的goto就可以跳转到⼀个标号,在ARM汇编中⽤指令b flag:就可以跳转到flag:对应的标号处执⾏,和beq flag:是⼀样的,其原理是相对于PC程序位置寄存器做⼀个偏移指令后缀1. ARM中的指令可以带后缀,从⽽丰富该指令的功能,这种形式叫做指令族,常⽤的后缀有:2. B(byte):功能不变,操作长度变为8位(依赖CPU位数,以下相同)3. H(Halfword):功能不变,操作长度变为16位3. H(Halfword):功能不变,操作长度变为16位4. S(signed):功能不变,操作数变为有符号数5. S(S标识):影响CPSR⾥的NZCV标识位,6. 举例:1. ldr指令族:ldrb,ldrh,ldrsb ldrsh,从内存中加载指定长度的数据2. mov指令族:movs r0,#0,结果是0,赋值会影响CPSR的NZCV标识,将Z位置为1条件执⾏后缀1. 条件执⾏后缀⽤于限制该执⾏执⾏的,只有在符合条件之后才能够执⾏该指令2.3. 举例:moveq r0,r1,如果eq成⽴,执⾏mov r0,r1,不成⽴则该条不执⾏,和C语⾔中的条件判断类似4. 条件后缀成⽴与否,不是取决于本条指令,⽽是取决于之前指令运⾏后的结果5. 条件后缀决定了本条指令是否执⾏,不会影响之前和之后指令6. 条件后缀和CPSR的NZCV位相关,例如,如果上⼀句代码执⾏的结果将Z置为1,下⼀句带有eq条件后缀的语句就会被执⾏多级指令流⽔线1. 多级流⽔线⽤于增加处理器处理指令的速度,2. 允许CPU同时异步的执⾏多条指令,⽽⾮上⼀条指令全部执⾏完毕之后才会执⾏下⼀条指令3. 多级可以简单那理解为把⼀条指令分为多个步骤来异步执⾏,例如:1. CPU把⼀条指令分为[取址,解码,执⾏]3个步骤,则为3级指令流⽔线2. 第⼀条指令进⾏取值操作3. 第⼀条指令取值完毕,进⼊解码操作,第⼆条指令紧随其后就开始执⾏取值操作4. 第⼀条指令解码完毕,进⼊执⾏操作,第⼆条指令紧接着进⼊解码操作,同时第三条指令进⼊取值操作5. 第⼀条指令执⾏完毕,第⼆条指令进⼊执⾏操作,第三条指令进⼊解码操作,第四条指令进⼊取值操作,依次类推4. 可见,多级流⽔线可以提⾼同时执⾏指令的数量,从⽽加速指令执⾏5. 需要注意的是,PC指向的是正在取值的指令,⽽⾮正在执⾏的指令,之间的差值就是流⽔线级数和单字节长度的乘积,在中断返回到PC的时候需要注意这个问题ARM指令数据处理指令数据传输指令mov:move,在两个寄存器之间或者⽴即数和寄存器之间传递数据,将后⼀个寄存器上的值或者⽴即数赋值给前⼀个寄存器 例如:mov r1,r0mov r1,#0xFF:将⽴即数0xFF赋值给寄存器r1mvn:和mov⽤法⼀致,区别是mvn会把后⼀个寄存器的值或者⽴即数按位取反后赋值给前⼀个寄存器 例如:mvn r0,#0xFF,则r0的值为0xffffff00(32位数据)算术运算指令add:加法运算sub:减法运算rsb:反减运算adc: 带进位的加法运算sbc: 带进位的减法运算rsc:带进位的反减指令逻辑指令and:与操作orr:或操作eor:异或操作bic:位清除操作⽐较指令cmp:⽐较⼤⼩cmn:取反⽐较tst:按位与运算teq:按位异或运算乘法指令mvl: mla: umull: umlal: smull: smlal:前导0计数clz:统计⼀个数的⼆进制位前⾯有⼏个0CPSR访问指令mrs⽤于读取CPSR和SPSRmsr⽤于写CPSR和SPSRCPSR和SPSRCPSR是程序状态寄存器,整个Soc只有⼀个SPSR在五种异常模式下各有⼀个,⽤于从普通模式进⼊异常模式的时候,保存普通模式下的CPSR,在返回普通模式时可以恢复原来的CPSR跳转分⽀指令b指令: ⽆条件直接跳转,没打算返回bl指令:跳转前把返回地址放⼊lr中,以便返回,常⽤在函数中bx指令:跳转同时切换到ARM模式,⽤于异常处理的跳转内存访问指令ldr:加载指定内存地址的数据到寄存器,按照字节访问str:加载指定寄存器数据到内存地址中,按照字节访问ldm:和ldr功能⼀样,⼀次多字节多寄存器访问stm:和str功能⼀样,⼀次多字节多寄存器访问swp:内存和寄存器互换指令,⼀边读⼀边写,例如:swp r1,r2,[r0]:读取指针r0的数据到r1中,同时把r2的数据赋值给r0指针指向的变量软中断指令swi(software interrupt),在软件层模拟产⽣⼀个中断,这个中断会传送给CPU,常⽤于实现系统调⽤⽴即数⾮法与合法ARM指令都是32为,除了指令标记和操作标记外,只能附带少位数的⽴即数,所以有⾮法与合法之分⾮法⽴即数:合法⽴即数:经过任意位数的移位后,⾮0部分可以⽤8位表⽰就是合法⽴即数协处理器与指令协处理器协处理器属于Soc中另外⼀颗核⼼,⽤于协助主CPU实现某些功能,被主CPU调⽤来执⾏任务,协处理器和MMU,Cache,TLB有功能和管理上的联系ARM设计可以⽀持多达16个协处理器,但是⼀般只实现其中的CP15协处理器指令mrc:读取CP15中的寄存器mcr:向CP15中的寄存器写数据指令⽤法:mcr{<”cond”>} p15,<”opcode_1”>,<”Rd”>,<”Crn”>,<”Crm”>,{<”opcode_2”>} opcode_1:对于CP15永远为0Rd:ARM通⽤寄存器Crn:CP15寄存器,取值范围c0~c15Crm:CP15寄存器,⼀般为c0opcode_2:省略或者为0ldm,stm和栈ldm,stmldr与str只能访问4个字节,当数据较⼤的时候,就会明显的降低效率,这时就需要使⽤到ldm和stm,ldm与stm是⼤量的从寄存器与内存交换数据的⽅式,常⽤于在内存和寄存器之间⼤量读取和写⼊数据:stmia sp {r0 - r12}:stm表⽰进⾏批量数据操作,ia的意思是将r0存⼊SP的内存地址处,然后SP内存地址+4(32位),将r1存⼊该地址,内存地址再+4,存⼊r2,依次存到r12,这就是⼀个寄存器和内存交换⼤量数据的⽰例,在⼀个周期内完成了多个内存地址和多个寄存器的操作。
常用CP 指令不当之处,敬请谅解。
仅供参考,具体指令格式和用法请查ALEX 进行确认。
XLF一、CP1、CP 的工作方式DPWSP; 显示CP 状态。
我们可以看到如下信息:CP STATEMAU SB SBSTATE NRM B WO从上面我们可以看到,MAU 的状态为NORMAL ,备用边为B 边,状态为WO 。
与CP 状态相关的指令:DPSWI ;交换CP 两侧的状态。
SB-WO → EX ;EX → SB-WO DPHAS ;Halt CP 一侧。
SB-WO → SB-HA DPSES ;分离备用侧。
SB-WO → SB-SEDPPAI ;并边,命令SB-HA 或SB-SE 侧进行更新。
命令下达后备用侧状态变成SB-UP ,最终CP-A 变成EX ,CP-B 变成SB-WO 。
———————————————————————————————————————2、备份,按操作过程列出sybue; 打死CP 自动备份功能sybfp:file; 查看CP 备份文件信息,常用文件:RELFSW0 RELFSW1 RELFSW2 sybup:file; CP 备份,提示备份到RELFSW2中,输入两次 ; 确认 sytuc; 轮转CP 备份,2-0 0-1 1-2sybui:disc; 或 sybui; 激活CP 自动备份功能SYTUC其他:SYBMP; 查看主存备份信息SYBFP:MS; 查看主存备份信息SYBCI:FILE=RELFSW0;对RELFSW0进行校验SYBRP; 最后一次启动信息———————————————————————————————————————3、启动和reloadsyrei:rank=small,expl=other;系统小启动syrei:rank=large,expl=other; 系统大启动syrei:rank=reload,expl=other;系统reloadsyati:restart; 系统大启动SYRBI;关闭自动RELOAD,伴随出现告警“Backup information fault”,在FUNCTION CHANGE期间只有CP的执行侧接受该指令。
协处理器指令系统协处理器共有68条不同的指令,汇编程序在遇到协处理器指令助记符时,都会将其转换成机器语言的ESC指令,ESC指令代表了协处理器的操作码。
协处理器指令在执行过程中,需要访问内存单元时,CPU会为其形成内存地址。
协处理器在指令执行期间内利用数据总线来传递数据。
80287协处理器利用I/O地址00FAH~00FFH来实现其与CPU 之间的数据交换,而80387~Pentium系列芯片,则是利用I/O地址800000FAH~800000FFH来实现这两者之间的数据交换。
一.指令操作符的命名规则协处理器指令的操作符(或助忆符)在命名设计时,遵循了下列规则:1、在操作符后面加上字母P:表示该指令执行完后,还进行一次堆栈弹出操作,弹出栈顶数据以后要对其它的寄存器进行相应的调整。
如:FADDP/FSUBP/FSUBRP /FMULP/FDIVP /FDIVRP等;2、在操作符后面加上字母R:表示将两个操作数的源/目的位置交换再进行运算,它仅限于减法、除法指令,因为加法和乘法不受源/目的操作数的位置影响结果。
如:FSUBR和FDIVR等;不加R时——目的操作数=目的操作数op 源操作数加R模式——目的操作数=源操作数op 目的操作数假设:栈顶数据st(0)为10,内存变量data的值为1,分别执行下列指令将有不同的结果。
F SUB data ; ST(0)=ST(0)-dataF SUBR data ;ST(0)=data-ST(0)F SUB ST(3), ST(0) ;指令执行后,ST(3)=ST(3)-ST(0)F SUBR ST(3), ST(0) ;指令执行后,ST(3)=ST(0)-ST(3)3、操作符的第2个字母是I:表示内存操作数是整数(注意:不能是BYTE类型)。
它对加、减、乘、除指令以及堆栈操作指令都有效。
FIADD data ——整数加法,它表示内存单元data是一个整数,把该整数加到栈顶的浮点数上(ST(0)=ST(0)+data)。
协处理器的三大类数据传送指令
协处理器共有68条不同的指令,汇编程序在遇到协处理器指令助记符时,都会将其转换成机器语言的ESC指令,ESC指令代表了协处理器的操作码。
协处理器指令在执行过程中,需要访问内存单元时,CPU会为其形成内存地址。
协处理器在指令执行期间内利用数据总线来传递数据。
80287协处理器利用I/O地址00FAH~00FFH来实现其与CPU之间的数据交换,而80387~PenTIum系列芯片,则是利用I/O地址800000FAH~800000FFH来实现这两者之间的数据交换。
协处理器的三大类数据传送指令数据传送指令
为了满足协处理器和CPU之间进行数据交流的需求,就需要实现内存单元和协处理器之间进行数据传送的指令。
协处理器的指令系统中有三大类数据传送指令:BCD传送指令、浮点数传送和整数传送指令。
一、BCD传送指令。
关于mrc?p15,0,r0,c1,c0,0
mrc是协处理器命令。
用于读取协处理器中的寄存器的数据到ARM处理器的寄存器里面。
mrc p15,0,r0,c1,c0,0 这句话的意思应该是读协处理器中的寄存器数据到ARM处理器的r0里面。
应该是ARM访问MMU,一般cp15就是MMU。
<MCR|MRC>{cond} p#, <expression1>,Rd,cn,cm{, <expression2>}
MRC 从协处理器移到ARM7寄存器(L=1)
MCR 从ARM7寄存器移到协处理器(L=0)
{cond} 两个字符的条件代码
p# 被请求得协处理器的惟一标识苻
<expression1> 计算一个常量并放到CP Opc域
Rd 是一个表达式计算ARM7有效寄存器序号
cn 和cm 是计算有效协处理器寄存器CRn CRm序号
<expression2> 计算一个常量,并放到CP域
举例:
MRC 2,5,R3,c5,c6 ;请求协处理器2 执行操作5 ,操作数为c5和c6,
; 传送结果到R3 (单次32位字)
MCR 6,0,R4,c6 ; 请求协处理器6执行操作0,操作数为R4
;结果送到c6。
arm汇编cp15格式-回复[ARM汇编CP15格式] 是一种用于ARM架构的处理器指令集。
在本文中,我们将详细介绍CP15格式并逐步解答相关问题。
CP15格式,也称为协处理器15(Co-processor 15),是ARM体系结构中的一种特殊指令格式。
它用于访问处理器的系统控制寄存器(System Control Registers),这些寄存器可以对系统的整体行为进行配置和控制。
首先,让我们了解一下CP15格式的基本结构。
CP15指令由四部分组成:协处理器代码(coproccode)、操作码(opcode)、操作数(operand)、和目标寄存器(destination register)。
协处理器代码(coproccode)指定要访问的协处理器的类型,例如CP15。
操作码(opcode)指定进行的具体操作,例如读取或写入寄存器。
操作数(operand)用于指定操作数的来源或目标位置。
目标寄存器(destination register)用于存储操作的结果。
现在,我们来回答一些与CP15格式相关的问题。
问题一:CP15格式有什么作用?CP15格式允许程序访问处理器的系统控制寄存器,从而配置和控制系统的各种行为。
例如,通过CP15指令,程序可以访问处理器的缓存控制寄存器,从而控制缓存的策略和行为。
此外,CP15指令还可以用于访问处理器状态寄存器,从而查询或修改一些处理器的状态信息。
问题二:CP15格式常用的操作有哪些?CP15指令提供了广泛的操作,用于对系统进行配置、查询和控制。
常见的操作包括读取和写入寄存器、查询和修改处理器状态、控制缓存和内存管理等。
问题三:如何使用CP15格式进行寄存器读写操作?要使用CP15格式进行寄存器读写操作,首先需要指定相应的协处理器代码(coproccode)。
对于CP15来说,该代码是15。
然后,在操作码(opcode)中指定读取或写入操作,并在操作数(operand)中指定寄存器的标识符。
ARM处理器中CP15协处理器的寄存器注意:You can only access CP15 registers with MRC and MCR instructions in a privileged mode (只能在特权模式下,对cp15进行MRC,MCR操作)。
1.访问CP15寄存器的指令访问CP15寄存器指令的编码格式及语法说明如下:31 2827 2423 212019 1615 1211 87 54 3 0cond 1 1 1 0opcode_1L Cr n Rd 1 1 1 1opcode_21Cr m说明:Opcode_1 :协处理器行为操作码,对于CP15来说,永远为0b000,否则结果未知。
Rd:处理器核心的寄存器名称,不能是r15/pc,否则,结果未知。
Crn:作为目标寄存器的协处理器寄存器名称,编号为C0~C15。
Crm:协处理器中附加的目标寄存器或源操作数寄存器,如果不需要设置附加信息,将Crm设置为c0,否则结果未知。
Opcode_2 :提供附加信息,比如寄存器的版本号或者访问类型,用于区分同一个编号的不同物理寄存器,可以省略或者将其设置为0,否则结果未知。
指令语法格式说明:mcr :将ARM处理器的寄存器中的数据写到CP15中的寄存器中mcr{ } p15, , , , , { }mrc 将CP15中的寄存器中的数据读到ARM处理器的寄存器中mcr{ } p15, , , , , { }2 .CP15寄存器介绍CP15中的寄存器列表如表4-1所示。
表4-1 ARM处理器中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编码对应的标识符号寄存器0b000主标识符寄存器(ID编码)0b001cache类型标识符寄存器(cache类型)其他保留)主标识符寄存器 (通俗:标明该处理器的某些型号信息访问主标识符寄存器的指令格式如下所示:mrc p15, 0, r0, c0, c0, 0 ;将主标识符寄存器C0的值读到r0中,两个c0作用不同的。
1.c0:表示协处理器中的源寄存器;2.c0:表示未使用附加的寄存器,这是要写c0。
ARM不同版本体系处理器中主标识符寄存器的编码格式说明如下。
✌之后处理器的主标识符寄存器编码格式如下所示: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体系版本40x2 ARM体系版本4T0x3 ARM体系版本50x4 ARM体系版本5T0x5 ARM体系版本5TE其他由ARM公司保留将来使用位[23: 20]生产商定义的产品子编号,当产品主编号相同时,使用子编号来区分不同的产品子类,如产品中不同的高速缓存的大小等位[31: 24]生产厂商的编号,现在已经定义的有以下值:0x41 =A ARM公司0x44 =D Digital Equipment公司0x69 =I intel公司处理器的主标识符寄存器编码格式如下所示:31 24 23 22 16 15 4 3 0由生产商确定A产品子编号产品主编号处理器版本号位说明位[3: 0]生产商定义的处理器版本号位[15: 4]生产商定义的产品主编号,其中最高4位即位[15:12]的值为0x7位[22: 16]生产商定义的产品子编号,当产品主编号相同时,使用子编号来区分不同的产品子类,如产品中不同的高速缓存的大小等续表位说明位[23]ARM7支持下面两种ARM体系的版本号:0x0 ARM体系版本30x1 ARM体系版本4T位[31: 24]生产厂商的编号,现在已经定义的有以下值:0x41 =A ARM公司0x44 =D Digital Equipment公司0x69 =I Intel公司ARM7之前处理器的主标识符寄存器编码格式如下所示:31 24 23 22 16 15 4 3 0由生产商确定A产品子编号产品主编号处理器版本号位说明位[3: 0]生产商定义的处理器版本号位[15: 4]生产商定义的产品主编号,其中最高4位即为[15:12]的值为0x7位[22: 16]生产商定义的产品子编号,当产品主编号相同时,使用子编号来区分不同的产品子类,如产品中不同的高速缓存的大小等位[23]ARM7支持下面两种ARM体系的版本号:0x0 ARM体系版本30x1 ARM体系版本4T位[31: 24]生产厂商的编号,现在已经定义的有以下值:0x41 =A ARM公司0x44 =D Digital Equipment公司0x69 =I intel公司2)cache类型标识符寄存器访问cache类型标识符寄存器的指令格式如下所示:mrc p15, 0, r0, c0, c0, 1 ;将cache类型标识符寄存器C0的值读到r0中,1表示cache标示ARM处理器中cache类型标识符寄存器的编码格式如下所示:31 29 28 25 24 23 12 11 00 0 0属性字段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的属性位[11: 0 ]定义指令cache的相关属性,如果位[24]为0,本字段定义整个cache的属性其中控制字段位[28:25]的含义说明如下:表4-2 cache类型标识符寄存器的控制字段位[28:25]编码cache类型cache内容清除方法cache内容锁定方法0b0000写通类型不需要内容清除不支持内容锁定0b0001写回类型数据块读取不支持内容锁定0b0010写回类型由寄存器C7定义不支持内容锁定0b0110写回类型由寄存器C7定义支持格式A0b0111写回类型由寄存器C7定义支持格式B 控制字段位[23:12]和控制字段位[11:0]的编码格式相同,含义如下所示:11 9 8 6 5 3 2 1 00 0 0cache容量cache相联特性M块大小cache容量字段bits[8: 6]的含义如下所示:编码M=0时含义(单位KB)M=1时含义(单位KB)0b000 0.5 0.750b001 1 1.50b010 2 30b011 4 60b100 8 120b101 16 240b110 32 480b111 64 96cache相联特性字段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访问控制位寄存器C1的指令格式如下:mrc p15, 0, r0, c1, c0{, 0} ;将CP15的寄存器C1的值读到r0中mcr p15, 0, r0, c1, c0{, 0} ;将r0的值写到CP15的寄存器C1中CP15中的寄存器C1的编码格式及含义说明如下:31 --16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0附加L4 RR V I Z F R S B L D P W C A M 位说明M 0:禁止MMU或者PU;1:使能MMU或者PUA 0:禁止地址对齐检查;1:使能地址对齐检查C 0:禁止数据/整个cache;1:使能数据/整个cacheW 0:禁止写缓冲;1:使能写缓冲P 0:异常中断处理程序进入32位地址模式;1:异常中断处理程序进入26位地址模式D 0:禁止26位地址异常检查;1:使能26位地址异常检查L 0:选择早期中止模型;1:选择后期中止模型B 0:little endian;1:big endianS 在基于MMU的存储系统中,本位用作系统保护R 在基于MMU的存储系统中,本位用作ROM保护F 0:由生产商定义Z 0:禁止跳转预测功能;1:使能跳转预测指令I 0:禁止指令cache;1:使能指令cacheV 0:选择低端异常中断向量0x0~0x1c;1:选择高端异常中断向量0xffff0000~ 0xffff001cRR 0:常规的cache淘汰算法,如随机淘汰;1:预测性淘汰算法,如round-robin淘汰算法L4 0:保持ARMv5以上版本的正常功能;1:将ARMv5以上版本与以前版本处理器兼容,不根据跳转地址的bit[0]进行ARM指令和Thumb状态切换:bit[0]等于0表示ARM指令,等于1表示Thumb指令附加:31——16CP15的寄存器C2中的寄存器 保存的是页表的基地址,即一级映射描述符表的基地址。
其编码格如下所示: 一级映射描述符表的基地址(物理地址)◆ CP15的寄存器C3中的寄存器 定义了✌处理器的 个域的访问权限。
◆ CP15的寄存器C5中的寄存器 是失效状态寄存器,编码格式如下所示: ✞☠☪ 域标识状态标识其中,域标识♌♓♦☯: 表示存放引起存储访问失效的存储访问所属的域。