汇编是对寄存器操作的,不知道一些和主控制器相关的寄存器的作用,根本无法理解某些指令,所以先自己学习相关寄存器和工作模式。
下面是《ARM 嵌入式体系结构与接口技术(Cortex-A8 版) 》的学习笔记
ARM处理器相关寄存器:
(1)32 个通用寄存器。
(2)7 个状态寄存器:1 个 CPSR(Current Program Status Register,当前程序状态寄存器),6个 SPSR(Saved Program Status Register,备份程序状态寄存器)。
(3)1 个 PC(Program Counter,程序计数器)。
1.处理器模式和切换方法
这图是我在arm相关的芯片手册上找到的,在这里可以看到arm处理器有八种模式,system和user两种模式还用了相同的寄存器组。每种模式都有自己的专用的寄存器,但是有些寄存器是通用的,所以有些寄存器的名字相同但是实际上他们对应的可能在物理上不一定是一个位置,比如不同模式下的R6对应的实际位置是不同的。(学习汇编的时候遇到了相似的过程,后面会提到,这里先标记住),除了用户模式外的其他七种模式成为特权模式(Privileged Modes).在特权模式下程序可以访问所有的资源,也可以在任意的进行处理器模式的切换,大多数情况下程序都是运行在用户模式下的,在用户模式下应用程序不能访问受操作系统保护的一些资源也不能进行处理器模式的切换,需要切换的时候要么由应用程序产生异常处理,异常处理过程中进行处理器模式的切换。
根据学习过程发现用到的irq模式比其他模式多。
Cortex -A8存储系统
(1)系统可能提供多种类型的存储器件,如 Flash、ROM、SRAM 等;
(2)Cache 技术;
(3)写缓存技术(Write Buffer);
(4)虚拟内存和 I/O 地址映射技术。
大多数的系统通过下面的方法之一可实现对复杂存储系统的管理:
(1)使用 Cache,缩小处理器和存储系统速度差别,从而提高系统的整体性能。
(2)使用内存映射技术实现虚拟空间到物理空间的映射。这种映射机制对嵌入式系统非常重要。
通常嵌入式系统程序存放在 ROM/Flash 中,这样系统断电后程序能够得到保存。但是,ROM/Flash 与SDRAM 相比,速度慢很多,而且基于 ARM 的嵌入式系统中通常把异常中断向量表放在 RAM 中。利用内存映射机制可以满足这种需要。在系统加电时,将 ROM/Flash 映射为地址 0,这样可以进行一些初始化处理。当这些初始化处理完成后将 SDRAM 映射为地址 0,并把系统程序加载到 SDRAM 中运行,这样能很好地满足嵌入式系统的需要。
(3)引入存储保护机制,增强系统的安全性。
(4)引入一些机制保证将 I/O 操作映射成内存操作后,各种 I/O 操作能够得到正确的结果。在简
单存储系统中,不存在这样问题。而当系统引入了 Cache 和 Write Buffer 后,就需要一些特别的措施。 在 ARM 系统中,要实现对存储系统的管理通常是使用协处理器 CP15,它通常也被称为系统控制协处理器(System Control Coprocessor)。 ARM 的存储器系统是由多级构成的,可以分为内核级、芯片级、板卡级、外设级。图 2-4 所示为存储器
的层次结构。每级都有特定的存储介质,下面对比各级系统中特定存储介质的存储性能。
特点:越网上空间越小,读取写入速度越快,价格越来越昂贵,CP15后面会介绍相应的汇编指令和寄存器。
协处理器
ARM 处理器支持 16 个协处理器(CP15)。
执行过程:
每个协处理器忽略属于 ARM 处理器和其他协处理器的指令。当一个协处理器硬件不能执行属于它的协处理器指令时,将产生一个未定义指令异常中断,在该异常中断处理程序中,可以通过软件模拟该硬件操作。例如,如果系统不包含向量浮点运算器,则可以选择浮点运算软件模拟包来支持向量浮点运算。(硬件不支持的时候靠软件模拟)
作用:
CP15,即通常所说的系统控制协处理器(System Control Coprocesssor),负责完成大部分的存储系统管理。除了 CP15 外,在具体的存储管理机制中可能还会用到其他的一些技术,如在 MMU 中除了 CP15 外,还使用了页表技术等。 在一些没有标准存储管理的系统中,CP15 是不存在的。在这种情况下对 CP15 的操作指令将被视为未定义指令,指令的执行结果不可预知。 CP15 包含 16 个 32 位寄存器,其编号为 0~15。实际上对于某些编号的寄存器可能对应多个物理寄存器,在指令中指定特定的标志位来区分这些物理寄存器。这种机制有些类似于 ARM 中的寄存器,当处于不同的处理器模式时,某些相同编号的寄存器对应于不同的物理寄存器。 CP15 中的寄存器可能是只读的,也可能是只写的,还有一些是可读可写的。在对协处理器寄存器进行操作时,需要注意以下几个问题。(作用是完成存储系统管理)
注意事项
(1)寄存器的访问类型(只读/只写/可读可写)。(2)不同的访问引发不同功能。
(3)相同编号的寄存器是否对应不同的物理寄存器。
(4)寄存器的具体作用。
具体见后面相关汇编指令。
程序状态计数器:
- N:本位设置成当前指令运行结果的 bit[31]的值。当两个由补码表示的有符号整数运算时,N=1 表示运算的结果为负数;N=0 表示结果为正数或零。
- Z:。Z=1 表示运算的结果为零,Z=0 表示运算的结果不为零。
- C:加法溢出时候产生进位为1,平时为0,减法相反,其他操作不影响,移位操作时候被设置成最后移出的位。
- V: 对于加减法指令V=1时候表示有符号溢出,非加减法不受影响。
- 模式控制[4:0]
- IF-THEN标志位(这里不太懂,没见到用过)这些位是bit 15 :10 26:25
- 控制位:I表示IRQ中断,F表示FIQ中断,表示1表示禁止。,T=0表示Thumb状态,如果为1表示ARM状态。
- 其他的位:表示异步异常禁止,大小端控制,大于小于标志什么的,也没有见到用过