|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1、寄存器 R13 在 ARM 指令中常用作堆栈指针
# ?% m+ C# }$ l( D( L2 f: U2、对于 R13 寄存器来说,它对应6个不同的物理寄存器,其中的一个是用户模式与系统模式共用,另外5个物理寄存器对应于其他5种不同的运行模式。采用以下的记号来区分不同的物理寄存器:9 O! x5 U, q3 [; J6 l
R13_$ p2 S" s1 v' C, D( g: N2 v; Y) M
其中,mode为以下几种模式之一:usr、fiq、irq、svc、abt、und。
4 E' Q$ `% A9 F- H& v3、寄存器R13在ARM指令中常用作堆栈指针,但这只是一种习惯用法,用户也可使用其他的寄存器作为堆栈指针。而在Thumb指令集中,某些指令强制性的要求使用R13作为堆栈指针。由于处理器的每种运行模式均有自己独立的物理寄存器R13,在用户应用程序的初始化部分,一般都要初始化每种模式下的R13,使其指向该运行模式的栈空间,这样,当程序的运行进入异常模式时,可以将需要保护的寄存器放入R13所指向的堆栈,而当程序从异常模式返回时,则从对应的堆栈中恢复,采用这种方式可以保证异常发生后程序的正常执行。
: Z4 p) h7 y; h6 n) l4、有四种类型的堆栈:堆栈是一种数据结构,按先进后出(First In Last Out,FILO)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。
; ~3 L* ]# N9 G7 T" ?当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(Full Stack),而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈(Empty Stack)。- [ f- g, e' V7 q* }
同时,根据堆栈的生成方式,又可以分为递增堆栈(Ascending Stack)和递减堆栈(DecendingStack),当堆栈由低地址向高地址生成时,称为递增堆栈,当堆栈由高地址向低地址生成时,称为递减堆栈。这样就有四种类型的堆栈工作方式,ARM 微处理器支持这四种类型的堆栈工作方式,即:$ [: E7 n8 B+ `/ l2 Q* k
◎ Full descending 满递减堆栈
2 S" q1 Q# G$ T堆栈首部是高地址,堆栈向低地址增长。栈指针总是指向堆栈最后一个元素(最后一个元素是最后压入的数据)。
6 y1 U6 Q- O8 j$ w( @' ]+ QARM-Thumb过程调用标准和ARM、Thumb C/C++ 编译器总是使用Full descending 类型堆栈。
& y6 b( Y* q c! i a X: m◎ Full ascending 满递增堆栈* o! U! ~% p+ `* `- i2 z, q+ ^
堆栈首部是低地址,堆栈向高地址增长。栈指针总是指向堆栈最后一个元素(最后一个元素是最后压入的数据)。
* d6 \5 ^3 U' w# }' j8 K6 Z◎ Empty descending 空递减堆栈 G6 _" b+ Z0 i) V$ j( v( E
堆栈首部是低地址,堆栈向高地址增长。栈指针总是指向下一个将要放入数据的空位置。8 v1 T/ _0 B q
◎ Empty ascending 空递增堆栈
1 Z$ g. Q6 y" O8 o$ I( }3 r4 R堆栈首部是高地址,堆栈向低地址增长。栈指针总是指向下一个将要放入数据的空位置。
( U w4 w/ ?: Q3 N0 P2 c( f5 g7 U3 U! N# K L+ T/ U* G
5、操作堆栈的汇编指令堆栈类型 入栈指令 出栈指令' X# E5 V( k4 m- A
Full descending STMFD (STMDB) LDMFD (LDMIA)
' @! I" O" S2 Y% {. w l/ J, MFull ascending STMFA (STMIB) LDMFA (LDMDA)7 L5 y& _8 c1 o/ i v- Z1 I
Empty descending STMED (STMDA) LDMED (LDMIB)3 M' d0 K1 _4 j4 d8 ]9 e: j7 \
Empty ascending STMEA (STMIA) LDMEA (LDMDB)/ v1 n$ q* m! [6 C, b* D( ~
例子:+ b( C' b2 ?' q1 b- A5 @
STMFD r13!, {r0-r5} ; Push onto a Full Descending Stack% _5 c! v& I( Q- k& b. N
LDMFD r13!, {r0-r5} ; Pop from a Full Descending Stack.
( m' |: l0 r! K4 g- p3 ^ |
|