(1)ARM:Advanced RISC Machine。
(2)ARM体系结构中支持两种指令集:ARM指令集和Thumb指令集。
(3)ARM内核有T、D、M、I四个功能模块:
A、T模块:表示16位Thumb,可以在兼顾性能的同时减少代码尺寸。
B、D模块:表示Debug,内核中放置了用于调试的结构,通常为一个边界扫描链JTAG。
C、M模块:表示8位乘法器。
D、I模块:表示EmbeddedICE Logic,用于实时断点观测及变量观测的逻辑电路部分。
(4)ARM处理器有7种运行模式:
A、用户模式(User):正常程序执行模式,用于应用程序。
D、快速中断模式(FIQ):快速中断处理,用于高速数据传输和通道处理。
C、外部中断模式(IRQ):用于通用的中断处理。
D、管理模式(SVE):供操作系统使用的一种保护模式。
E、数据访问中止模式(Abort):用于虚拟存储及存储保护。
F、未定义指令中止模式(Undefined):当未定义指令执行时进入该模式。
G、系统模式(System):用于运行特权级的操作系统任务。
 
除了用户模式之外的其他6种处理器模式称为特权模式,在这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式切换,其中,除了系统模式外,其他的5种特权模式又称为异常模式。
处理器模式可以通过软件控制进行切换,也可以通过外部中断或异常处理过程进行切换。大多数的用户程序运行在用户模式下,这时,应用程序不能访问一些受操作系统保护的系统资源,应用程序也不能直接进行处理器模式切换。当需要进行处理器模式切换时,应用程序可以产生异常处理,在异常处理中进行处理器模式的切换。这种体系结构可以使操作系统控制整个系统的资源。
当应用程序发生异常中断时,处理器进入相应的异常模式。在每一种异常模式种都有一组寄存器,供相应的异常处理程序使用,这样就可以保证进入异常模式时,用户模式下的寄存器不被破坏。
系统模式并不是通过异常过程进入的,它和用户模式具有完全一样的寄存器,但是系统模式属于特权模式,可以访问所有的系统资源,也可以直接进行处理器模式切换,它主要供操作系统任务使用。
 
(5)ARM处理器共有37个寄存器:31个通用寄存器和6个状态寄存器
A、通用寄存器包括R0~R15,可以分为3类:
 
a、未备份寄存器R0~R7:在所有的处理器模式下,未备份寄存器都是指向同一个物理寄存器。
b、备份寄存器R8~R14:
对于R8~R12来说,每个寄存器对于2个不同的物理寄存器,它们每次所访问的物理寄存器都与当前的处理器运行模式有关。
对于R13、R14来说,每个寄存器对于6个不同的物理寄存器,其中一个是用户模式和系统模式共用。
R13在ARM指令种常用作堆栈指针。由于处理器的每种运行模式都有自己独立的物理寄存器R13,所有在用户应用程序的初始化部分,一般要初始化每种模式下的R13,使其指向该运行模式的栈空间。
R14又称为连接寄存器(LR),在ARM体系种具有下面两种特殊作用:在通过BL或BLX指令调用子程序时,存放当前子程序的返回地址;在异常中断发生时,存放异常模式将要返回的地址。
c、程序计数器R15(PC)。
由于ARM采用了流水线机制,在三级流水线中,当正确读取了PC的值时,该值为当前指令地址值加8个字节。也就是说,PC指向当前指令的下两条指令的地址。在ARM指令状态下,PC的0和1位是0,在Thumb指令状态下,PC的0位是0。

B、程序状态寄存器
a、ARM体系结构包含1个当前程序状态寄存器(CPSR)和5个备份的程序状态寄存器(SPSR),使用MSR和MRS指令来设置和读取这些寄存器。
b、当前程序状态寄存器CPSR:保存当前处理器状态的信息,可以在任何处理器模式下被访问。
c、备份程序状态寄存器SPSR:每一种异常处理器模式下都有一个专用的物理状态寄存器。当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容,在异常中断程序退出时,可以用SPSR中保存的值来恢复CPSR。
d、由于用户模式和系统模式不属于异常模式,它们没有SPSR,当在这两种模式下访问SPSR时,结果是未知的。

(6)ARM指令的寻址方
所谓寻址方式就是处理器根据指令中给出的地址信息来寻找物理地址的方式。

A、
立即寻址:操作数本身就在指令中给出,只要取出指令也就取到了操作数。
ADD
R0, R0, #1
;R0?R0+1

B、
寄存器寻址:利用寄存器中的数值作为操作数。
ADD
R0, R1, R2
;R0?R1+R2

C、
寄存器间接寻址:以寄存器中的值作为操作数地址,而操作数本身存放在存储器中。
ADD
R0, R1, [R2]
;R0?R1+[R2]
LDR
R0, [R1]
;R0?[R1]
STR
R0, [R1]
;[R1]?R0

D、基址变址寻址:将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。

LDR
 R0, [R1, #4]
 ;R0?[R1+4]
 LDR
 R0, [R1, #4]!
 ;R0?[R1+4]
 R1?R1+4
 LDR
 R0, [R1], #4
 ;R0?[R1]
 R1?R1+4
 LDR
 R0, [R1, R2]!
 ;R0?[R1+R2]


 
E、
多寄存器寻址:一条指令可以完成多个寄存器值的传送。

LDMIA
 R0, {R1, R2, R3}
 ;R1?[R0]
 R2?[R0+4]
 R3?[R0+8]


 
F、
相对寻址:以程序计数器PC的当前值作为基地址,指令中的地址标号作为偏移量,两者相加之后得到操作数的有效地址。
BL
NEXT
;跳转到子程序NEXT处执行
……
NEXT
……
MOV
PC, LR
;从子程序返回

G、堆栈寻址:支持4种类型的堆栈工作方式:
a、
满递增堆栈:堆栈指针指向最后压入的数据,且由低地址向高地址生长。
b、
满递减堆栈:堆栈指针指向最后压入的数据,且由高地址向低地址生长。
c、
空递增堆栈:堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生长。
d、
空递减堆栈:堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生长。
 
(7)ARM的存储方法
A、大端模式:数据的高字节存储在低地址中,低字节存储在高地址中。
B、小端模式:数据的低字节存储在低地址中,高字节存储在高地址中。
 
(8)ARM中断与异常
 
A、ARM内核支持7种中断,不同的中断处于不同的处理模式,具有不同的优先级,而且每个中断都有固定的中断地址入口。当一个中断发生是,相应的R14(LR)存储中断返回地址,SPSR存储当前程序状态寄存器CPSR的值。

B、由于ARM内核支持流水线工作,LR寄存器存储的地址可能是发生中断后面指令的地址,所以不同的中断处理完成后,必须将LR寄存器值经过处理后再写入P15(PC)寄存器。

C、ARM异常的具体含义: 
a、复位:当处理器的复位电平有效时,产生复位异常,程序跳转到异常复位异常处理程序处执行。 
b、未定义的指令:当ARM处理器或协处理器遇到不能处理的指令时,产生未定义指令异常。可以使用该异常机制进行软件仿真。 
c、软件中断:该异常由执行SWI指令产生,可用于用户模式下的程序调用特权操作指令。可使用该异常机制实现操作系统调用功能。
d、指令预取中止:如果处理器预取指令的地址不存在或该地址不允许当前指令访问,存储器向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。
e、数据访问中止:如果处理器数据访问指令的目标地址不存在,或者该地址不允许当前指令访问,处理器产生数据访问中止异常。 
f、外部中断请求:当ARM外部中断请求管脚有效,而且CPSR中的I位为0时,产生IRQ异常。系统的外设可以通过该异常请求中断服务。
g、快速中断请求:当ARM快速中断请求管脚有效,而且CPSR的F位为0时,产生FIQ异常。

D、ARM处理器对异常中断的响应过程
a、将下一条指令的地址存入相应的连接寄存器LR中。
b、将CPSR复制到相应的SPSR中。
c、根据异常的类型,强制设置CPSR的运行模式位。
d、强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。
E、ARM处理器从异常中断处理程序中返回
a、恢复中断的程序的处理器状态,将SPSR复制到CPSR中。
b、若在进入异常处理时设置了中断禁止位,要在此清除。
c、将连接寄存器LR的值减去相应的偏移量后送到PC。
F、复位异常中断处理程序不需要返回。在复位异常中断程序开始整个用户程序的执行。