嵌入式微处理器体系结构复习资料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、嵌入式微处理器体系结构
嵌入式微处理器的体系结构可以采用冯·诺依曼体系结构或哈佛体系结构,指令系统可以选用精简指令系统RISC和复杂指令集系统CISC。
1、冯·诺依曼体系结构和哈佛体系结构;
(1)冯·诺依曼结构的计算机由CPU和存储器构成,其程序和数据共用一个存储空间,程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置;采用单一的地址及数据总线,程序指令和数据的宽度相同。程序计数器(PC)是CPU内部指示指令和数据的存储位置的寄存器。
(2)哈佛结构的主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个相互独立的存储器,每个存储器独立编址、独立访问。提高执行速度,提高数据的吞吐率,具有较高的执行效率。
2、CISC和RISC
类别CISC RISC
指令系统指令数量很多较少,通常少于100
执行时间有些指令执行时间很长,
如整块的存储器内容拷贝;
或将多个寄存器的内容
拷贝到存贮器没有较长执行时间的指令
编码长度编码长度可变,1-15字节编码长度固定,通常为4个字节
寻址方式寻址方式多样简单寻址
操作可以对存储器和寄存器只能对寄存器对行算术和逻辑操作,
进行算术和逻辑操作Load/Store体系结构
编译难以用优化编译器生成
高效的目标代码程序采用优化编译技术,生成高效的目标代码程序
二、ARM状态各模式下的寄存器
1、所有的37个寄存器,分成两大类:
(1)31个通用32位寄存器;
(2) 6个状态寄存器。
2、R0~R7为未分组的寄存器,也就是说对于任何处理器模式,这些寄存器都对应于相同的32位物理寄存器。
3、寄存器R8~R14为分组寄存器。它们所对应的物理寄存器取决于当前的处理器模式,几乎所有允许使用通用寄存器的指令都允许使用分组寄存器
4、寄存器R8~R12有两个分组的物理寄存器。一个用于除FIQ模式之外的所有寄存器模式,另一个用于FIQ模式。这样在发生FIQ中断后,可以加速FIQ的处理速度
5、寄存器R13、R14分别有6个分组的物理寄存器。一个用于用户和系统模式,其余5个分别用于5种异常模式。
三、处理器工作模式
1、ARM处理器有7种工作模式;
●usr(用户模式):ARM处理器正常程序执行模式。
●fiq(快速中断模式):用于高速数据传输或通道处理
●irq(外部中断模式):用于通用的中断处理
●svc(管理模式):操作系统使用的保护模式
●abt (数据访问终止模式):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。
●sys(系统模式):运行具有特权的操作系统任务。
●und(未定义指令中止模式):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。
ARM微处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理改变。
除用户模式以外,其余的所有6种模式称之为非用户模式,或特权模式(Privileged Modes);其中除去用户模式和系统模式以外的5种又称为异常模式(Exception Modes),常用于处理中断或异常,以及需要访问受保护的系统资源等情况。
2、除用户模式外,其它模式均为特权模式。ARM内部全部系统资源和一些片内外设在硬件设计上只允许(或者可选为只允许)特权模式下访问。
3、此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。
四、ARM异常处理
1、当异常产生时, ARM 核:
(1)拷贝CPSR 到SPSR_
(2)设置适当的CPSR 位:
a.改变处理器状态进入ARM 态
b.改变处理器模式进入相应的异常模式
c.设置中断禁止位禁止相应中断(如需要)
(3)保存返回地址到LR_
(4)设置PC 为相应的异常向量地址
2、返回时, 异常处理程序需要:
(1)从SPSR_
(2)从LR_
(3)注意:这些操作只能在ARM 态执行.
五、ARM指令集
1、ARM寻址方式:掌握ARM微处理器9种寻址方式的特点。
(1).寄存器寻址
操作数的值在寄存器中,指令中的地址码字段给出的是寄存器编号,寄存器的内容是操作数,指令执行时直接取出寄存器值操作。
例如指令:
MOV R1,R2 ;R1←R2
SUB R0,R1,R2 ;R0←R1- R2
(2).立即寻址
在立即寻址指令中数据就包含在指令当中,立即寻址指令的操作码字段后面的地址码部分就是操作数本身,取出指令也就取出了可以立即使用的操作数(也称为立即数)。立即数要以“#”为前缀,表示16进制数值时以“0x”表示。
例如指令:
ADD R0,R0,#1 ;R0←R0 + 1
MOV R0,#0xff00 ;R0←0xff00
(3).寄存器移位寻址
寄存器移位寻址是ARM指令集特有的寻址方式。第2个寄存器操作数在与第1个操作数结合之前,先进行移位操作。
例如指令:
MOV R0,R2,LSL #3 ;R2的值左移3位,结果放入R0,即R0=R2 * 8
ANDS R1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相与操作,结果放入R1 可采用的移位操作如下:
LSL:逻辑左移(Logical Shift Left),寄存器中字的低端空出的位补0。
LSR:逻辑右移(Logical Shift Right),寄存器中字的高端空出的位补0。
ASR:算术右移(Arithmetic Shift Right),移位过程中保持符号位不变,即如果源操作数为正数,则字的高端空出的位补0,否则补1
ROR:循环右移(Rotate Right),由字的低端移出的位填入字的高端空出的位
RRX:带扩展的循环右移(Rotate Right extended by 1 place),操作数右移一位,高端空出的位用原C 标志值填充。
(4).寄存器间接寻址
指令中的地址码给出的是一个通用寄存器编号,所需要的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针,操作数存放在存储器中。
例如指令:
LDR R0,[R1] ;R0←[R1](将R1中的数值作为地址,取出此地址中的数据保存在R0中)STR R0,[R1] ;[R1] ←R0
(5).变址寻址
变址寻址是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址,变址寻址用于访问基址附近的存储单元,常用于查表,数组操作,功能部件寄存器访问等。例如指令:
LDR R2,[R3,#4] ;R2←[R3 + 4](将R3中的数值加4作为地址,取出此地址的
数值保存在R2 中)STR R1,[R0,#-2] ;[R0-2] ←R1(将R0中的数值减2作为地址,把R1中的内
容保存到此地址位置)(6).多寄存器寻址(LDM/STM)
LDM/STM指令可以把存储器中的一个数据块加载到多个寄存器中,也可以把多个寄存器中的内容保存到存储器中。寻址操作中的寄存器可以是R0-R15这16个寄存器的子集或是所有寄存器。采用多寄存器寻址方式,一条指令可以完成多个寄存器值的传送,这种寻址方式用一条指令最多可以完成16个寄存器值的传送。
格式为:
LDM(或STM){条件}{类型} 基址寄存器{!},寄存器列表{∧}
该指令的常见用途是将多个寄存器的内容入栈或出栈。
(7).堆栈寻址
堆栈是一种数据结构,堆栈是特定顺序进行存取的存储区,操作顺序分为“后进先出”和“先进后出”,堆栈寻址时隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元就是堆栈的栈顶。
(8).块复制寻址
块复制寻址用于把一块从存储器的某一位置复制到另一位置,是一个多寄存器传送指令。(9).相对寻址
相对寻址是变址寻址的一种变通,由程序计数器PC提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。