</p> LDR R0, [R1], #4 ;R0􀀢[R1] R1􀀢R1+42 g. T8 H' `9 {" q" U
LDR R0, [R1, R2]! ;R0􀀢[R1+R2]
) n1 c/ }2 J8 ?. d3 ]1 @ E、多寄存器寻址:一条指令可以完成多个寄存器值的传送。
4 S! b" R. S4 b LDMIA R0, {R1, R2, R3} ;R1􀀢[R0] R2􀀢[R0+4] R3􀀢[R0+8]9 V. F' i5 |; r% o
F、相对寻址:以程序计数器PC 的当前值作为基地址,指令中的地址标号作为偏移量,两者相加之后得到操作数的有效地址。; H) s+ S( F4 |, K# v0 D: o
BL NEXT ;跳转到子程序NEXT 处执行) L9 M; D1 P0 }8 L
……; ]* L9 A! {3 u, J( D5 {
NEXT- F8 u# y, Q. a
……
; @+ H3 L0 z8 y, m. @' u/ \$ ] MOV PC, LR ;从子程序返回
, S$ l* B, a' p: K# J6 q G、堆栈寻址:支持4种类型的堆栈工作方式:
/ W/ a" J2 g) O% h0 W a、满递增堆栈:堆栈指针指向最后压入的数据,且由低地址向高地址生长。
. R) H7 x( w5 F1 f' g+ q b、满递减堆栈:堆栈指针指向最后压入的数据,且由高地址向低地址生长。8 I/ e# ^/ i" G) C* p
c、空递增堆栈:堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生长。( N4 W6 T, ], N+ h- W+ A/ a, ]$ N
d、空递减堆栈:堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生长。, L) P" A# u+ g c, [
(7)ARM的存储方法
; N# b, I+ G% c- k A、大端模式:数据的高字节存储在低地址中,低字节存储在高地址中。
+ w8 a6 s& P% J3 h% w: g* y* \) d B、小端模式:数据的低字节存储在低地址中,高字节存储在高地址中。
# M: X3 k& ^1 f7 L2 @* M1 I (8)ARM中断与异常) D1 S9 y' h4 {+ ]1 Y; _3 ?! k
A、ARM 内核支持7种中断,不同的中断处于不同的处理模式,具有不同的优先级,而且每个中断都有固定的中断地址入口。当一个中断发生是,相应的R14(LR)存储中断返回地址,SPSR 存储当前程序状态寄存器CPSR 的值。+ K: a6 e8 v% N# }4 x, k
B、由于ARM 内核支持流水线工作,LR 寄存器存储的地址可能是发生中断后面指令的地址,所以不同的中断处理完成后,必须将LR 寄存器值经过处理后再写入P15(PC)寄存器。2 i: H( x3 ~' b
C、ARM 异常的具体含义:
2 l) f S, B) B a、复位:当处理器的复位电平有效时,产生复位异常,程序跳转到异常复位异常处理程序处执行。
; L$ T& E2 @ S" ^ b、未定义的指令:当ARM 处理器或协处理器遇到不能处理的指令时,产生未定义指令异常。可以使用该异常机制进行软件仿真。
' D8 v( }# S5 V c、软件中断:该异常由执行SWI 指令产生,可用于用户模式下的程序调用特权操作指令。可使用该异常机制实现操作系统调用功能。
+ ~8 B; e# d/ w/ m* ? d、指令预取中止:如果处理器预取指令的地址不存在或该地址不允许当前指令访问,存储器向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。+ U$ _& {( z9 n* `
e、数据访问中止:如果处理器数据访问指令的目标地址不存在,或者该地址不允许当前指令访问,处理器产生数据访问中止异常。7 E1 G0 l0 g+ |- j& E0 ~
f、外部中断请求:当ARM 外部中断请求管脚有效,而且CPSR 中的I 位为0时,产生IRQ 异常。系统的外设可以通过该异常请求中断服务。( O* q9 ^5 n+ C
g、快速中断请求:当ARM 快速中断请求管脚有效,而且CPSR 的F 位为0时,产生FIQ 异常。
4 L/ \* L2 l$ ^+ w9 l. E- a0 u D、ARM 处理器对异常中断的响应过程
$ D% T) r/ V, J a、将下一条指令的地址存入相应的连接寄存器LR 中。6 s5 [- F( g8 h& w* K) j, }
b、将CPSR 复制到相应的SPSR 中。' l" r" _* g" J) C* V8 U
c、根据异常的类型,强制设置CPSR 的运行模式位。
7 M U) v9 o& j" A) D+ Q$ g d、强制PC 从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。 B! J' l. m- J' f8 p$ M4 g: q! N
E、ARM 处理器从异常中断处理程序中返回
# M o1 B' [' [) {0 a! A a、恢复中断的程序的处理器状态,将SPSR 复制到CPSR 中。% t& @- [' ?7 C A: S( A
b、若在进入异常处理时设置了中断禁止位,要在此清除。0 t5 z. _3 Y7 Y
c、将连接寄存器LR 的值减去相应的偏移量后送到PC。 c" N$ A1 \& m
F、复位异常中断处理程序不需要返回。在复位异常中断程序开始整个用户程序的执行 |