您的位置:首页 > 其它

关于一些汇编知识

2016-05-16 10:28 204 查看
协处理器中的寄存器访问指令只能发生在系统模式下,而用户模式被视为未定义异常,也可以通过SWI调用,CP15有16个寄存器(C0-C15),确切说是16类,因为实际物理寄存器会大于16个。

协处理器指令:

"cond p15 opcode_1 Rd CRn CRm opcode_2"

cond: 为条件码,如MCR、MRC等

p15: 指的是15号协处理器

opcode_1:操作码,对于CP15协处理器始终为0x00

Rd: 源,ARM寄存器,不能为PC

CRn: 目标,CP15寄存器(C0-C15)

CRm: 目标附加操作数,用于区分同一编号(C0-C15)的不同物理寄存器,如无附加信息一般写C0

opcode_2:附加信息,用于区分同一编号(C0-C15)的不同物理寄存器,如无附加信息一般为0x00

如:

mrc p15, 0, r1, c0, c0, 0 (从C0读取处理器ID编码)

mrc p15, 0, r1, c0, c0, 1 (从C0读取Cache详细资料)

1、CP15协处理器中的寄存器组:

C0:包括主标识符和Cache类型标识,根据opcode_2的不同来区分

如:

mrc p15, 0, r1, c0, c0, 0 (从C0读取处理器ID编码)

mrc p15, 0, r1, c0, c0, 1 (从C0读取Cache详细资料)

C1:用于配置MMU,写保护、地址对齐、cache使能禁止、大小端、中断向量表地址等

如:

mrc p15, 0, r0, c1, 0, 0 (读时,CRm=0,opcode_2=0)

orr r0, #01
(使用MMU)

mcr p15, 0, r0, c1, 0, 0 (写时,CRm=0,opcode_2=0)

C2:用于保存内存中页表的基地址

C3:设置域的访问控制权限属性

C4:保留

C5:内存访问失效状态指示

C6:内存访问失效地址

C7:用于控制cache和写缓冲区

C8:控制与清除TLB内容操作

C9:cache内容锁定寄存器

C10:控制与锁定TLB内容相关操作

C11:保留

C12:保留

C13:保存当前进程标识号PID(0-127)

C14:保留

C15:测试配置,因不同设计而异

2、TLB

叫快表,在CPU中开辟的RAM访问速度与寄存器相当,大小为8-16字,用于缓存存放页表中的描述符的,当CPU需要访问内存时,先在TLB中查找需要的地址变换条目,如果条目不存在,就从内存中的页表中查询,并将结果添加到TLB。

3、使无效TLB,当页表内容改变或更新页表(C2改变了)时需要使TLB的内容全部无效

4、高速缓冲存储器(Cache)和写缓冲区(write buffers),cache是完全由硬件实现的,WB是一个高速

存储器,主要用于提高CPU向主存写入数据时的效率,Write Back用于写回法和写通法的缓存

5、当得到了需要的地址变换条目后,将进行以下操作:

1)、得到该虚拟地址对应的物理地址

2)、根据条目中的C控制位和B控制位决定是否缓存该内存访问的结果到cache

3)、根据存取权限控制位和域访问控制位确定该内存访问是否被允许,如果该内存访问

不被允许,CP15向ARM处理器报告存储访问中止

4)、对于不允许缓存的存储访问,使用步骤1中得到的物理地址访问内存,对于允许缓存的存储访问,如果在cache中命中,则忽略物理地址;如果cache没有命中,则使用步骤1 得到的物理地址访问内存,并把该块数据读取到cache中

6、快速上下文切换:

简称FCSE,用于避免在进程间切换时造成的虚拟地址到物理地址的重映射,将各进程的相同虚拟空间变换成不同的虚拟空间,从而避免重映射,在ARM系统中,4GB虚拟空间被分成128个进程空间块(每个进程可以建立300多个线程),每个进程空间块大小为32MB,每个进程空间块中可以包含一个进程(0x00000000-0x01ffffff),PID从0-127,进程使用的虚拟地址空间为:PID x 0x02000000-PID x 0x02000000+0x01ffffff。过程如下:

CPU -> VA -> FCSE -> MVA -> MMU -> PA

7、

MCR P15, 0, <Rd>, <c7>, <CRm>, <opcode_2>

其中, <Rd> 中为将写入 C7 中的数据; <CRm>, <opcode_2> 的不同组合决定执行不同的操作:

----------------------------------------------------------------------------------

<CRm> <opcode_2> 含义 数据

----------------------------------------------------------------------------------

C0 4 等待中断激活 0

C5 0 使用无效整个Cache 0

C5 1 使无效指令Cache 中的某块 虚地址

C5 2 使无效指令Cache 中的某块 组号/组内序号

C5 4 清空预取缓冲区 0

C5 6 清空整个跳转目标Cache 0

C5 7 清空跳转目标Cache中的某块 生产商定义

C6 0 使无效整个数据Cache 0

C6 1 使无效数据Cache 中的某块 虚地址

C6 2 使无效数据Cache 中的某块 组号/组内序号

C7 0 使数据Cache 和指令Cache 无效 0

C7 1 使无效整个Cache 中的某块 虚地址

C7 2 使无效整个Cache 中的某块 组号/组内序号

C8 2 等待中断激活 0

C10 1 清空数据Cache 中某块 虚地址

C10 2 清空数据Cache 中某块 组号/组内序号

C10 4 清空写缓冲区 0

C11 1 清空整个Caceh 中某块 虚地址

C11 2 清空整个Caceh 中某块 组号/组内序号

C13 1 预取指令Cache 中某块 虚地址

C14 1 清空并使无效数据Cache中某块 虚地址

C14 2 清空并使无效数据Cache中某块 组号/组内序号

C15 1 清空并使无效整个Cache中某块 虚地址

C15 2 清空并使无效整个Cache中某块 组号/组内序号

----------------------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: