EDA365电子论坛网
标题:
ARM的堆栈学习笔记
[打印本页]
作者:
zxcvbvbnmn
时间:
2020-6-22 13:22
标题:
ARM的堆栈学习笔记
1、寄存器 R13 在 ARM 指令中常用作堆栈指针
; E9 I O. ], ~0 K) }
2、对于 R13 寄存器来说,它对应6个不同的物理寄存器,其中的一个是用户模式与系统模式共用,另外5个物理寄存器对应于其他5种不同的运行模式。采用以下的记号来区分不同的物理寄存器:
$ H* c, W0 z& v6 L; b
R13_
2 h$ Q. _' P4 I9 M" A6 Z4 Z
其中,mode为以下几种模式之一:usr、fiq、irq、svc、abt、und。
; ~5 ]& F, \' h$ Z0 }
3、寄存器R13在ARM指令中常用作堆栈指针,但这只是一种习惯用法,用户也可使用其他的寄存器作为堆栈指针。而在Thumb指令集中,某些指令强制性的要求使用R13作为堆栈指针。由于处理器的每种运行模式均有自己独立的物理寄存器R13,在用户应用程序的初始化部分,一般都要初始化每种模式下的R13,使其指向该运行模式的栈空间,这样,当程序的运行进入异常模式时,可以将需要保护的寄存器放入R13所指向的堆栈,而当程序从异常模式返回时,则从对应的堆栈中恢复,采用这种方式可以保证异常发生后程序的正常执行。
. I$ I4 V4 k8 Q* Q/ b/ U% ~ o1 ~
4、有四种类型的堆栈:堆栈是一种数据结构,按先进后出(First In Last Out,FILO)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。
5 p% w# |! f# Q" M
当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(Full Stack),而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈(Empty Stack)。
3 W5 T; P: a; M! J! G$ X4 m& P
同时,根据堆栈的生成方式,又可以分为递增堆栈(Ascending Stack)和递减堆栈(DecendingStack),当堆栈由低地址向高地址生成时,称为递增堆栈,当堆栈由高地址向低地址生成时,称为递减堆栈。这样就有四种类型的堆栈工作方式,ARM 微处理器支持这四种类型的堆栈工作方式,即:
! m# W/ ^4 {" B9 F" F
◎ Full descending 满递减堆栈
; \$ P# n( ]0 P
堆栈首部是高地址,堆栈向低地址增长。栈指针总是指向堆栈最后一个元素(最后一个元素是最后压入的数据)。
6 r- Z1 L1 c0 D' i, n# N* l, ]
ARM-Thumb过程调用标准和ARM、Thumb C/C++ 编译器总是使用Full descending 类型堆栈。
+ K+ o& d0 P( m$ l
◎ Full ascending 满递增堆栈
; ^: N% a1 t+ E' r4 {
堆栈首部是低地址,堆栈向高地址增长。栈指针总是指向堆栈最后一个元素(最后一个元素是最后压入的数据)。
; \& `* e. @# D
◎ Empty descending 空递减堆栈
. i0 T4 A4 E5 p0 U( A* e) _: V0 W
堆栈首部是低地址,堆栈向高地址增长。栈指针总是指向下一个将要放入数据的空位置。
3 j8 X9 [. p$ F6 ^) [0 _
◎ Empty ascending 空递增堆栈
, w- S) ^1 _8 |* i
堆栈首部是高地址,堆栈向低地址增长。栈指针总是指向下一个将要放入数据的空位置。
2 \- p/ b# J! O- C
2 Q5 @1 Y3 i! K5 c9 B2 I6 y
5、操作堆栈的汇编指令堆栈类型 入栈指令 出栈指令
o: e; q% |) u8 ]& _
Full descending STMFD (STMDB) LDMFD (LDMIA)
5 V) d- f' I) J% q. F
Full ascending STMFA (STMIB) LDMFA (LDMDA)
) p9 Q( N4 a2 I" _9 k
Empty descending STMED (STMDA) LDMED (LDMIB)
& p+ s- @- y" f8 f% H
Empty ascending STMEA (STMIA) LDMEA (LDMDB)
) p% z4 N6 ?7 ~, B* X
例子:
/ Z) `" `$ T3 E a$ b* U
STMFD r13!, {r0-r5} ; Push onto a Full Descending Stack
4 n& {( ^' ~0 P0 J# Y8 G: Q
LDMFD r13!, {r0-r5} ; Pop from a Full Descending Stack.
4 {3 I, D- A; u& O9 M' s/ C8 [' e7 Z
作者:
nevadaooo
时间:
2020-6-22 14:44
ARM堆栈,
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2