找回密码
 注册
关于网站域名变更的通知
查看: 271|回复: 1
打印 上一主题 下一主题

ARM的堆栈学习笔记

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-6-22 13:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
1、寄存器 R13 在 ARM 指令中常用作堆栈指针
. t/ Z4 v; T, @2、对于 R13 寄存器来说,它对应6个不同的物理寄存器,其中的一个是用户模式与系统模式共用,另外5个物理寄存器对应于其他5种不同的运行模式。采用以下的记号来区分不同的物理寄存器:
: W$ U5 p0 @: P5 SR13_8 N6 e2 G8 j6 K6 B0 \
其中,mode为以下几种模式之一:usr、fiq、irq、svc、abt、und。
  S- _; Y$ g" T$ e7 g' B% _% C& D3、寄存器R13在ARM指令中常用作堆栈指针,但这只是一种习惯用法,用户也可使用其他的寄存器作为堆栈指针。而在Thumb指令集中,某些指令强制性的要求使用R13作为堆栈指针。由于处理器的每种运行模式均有自己独立的物理寄存器R13,在用户应用程序的初始化部分,一般都要初始化每种模式下的R13,使其指向该运行模式的栈空间,这样,当程序的运行进入异常模式时,可以将需要保护的寄存器放入R13所指向的堆栈,而当程序从异常模式返回时,则从对应的堆栈中恢复,采用这种方式可以保证异常发生后程序的正常执行。8 ?, N- n% A* Y' t7 N5 G8 r9 a
4、有四种类型的堆栈:堆栈是一种数据结构,按先进后出(First In Last Out,FILO)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。' Z! w! J' \7 z; A
当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(Full Stack),而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈(Empty Stack)。3 v4 I+ J; z* e8 j: S) n% v
同时,根据堆栈的生成方式,又可以分为递增堆栈(Ascending Stack)和递减堆栈(DecendingStack),当堆栈由低地址向高地址生成时,称为递增堆栈,当堆栈由高地址向低地址生成时,称为递减堆栈。这样就有四种类型的堆栈工作方式,ARM 微处理器支持这四种类型的堆栈工作方式,即:9 @" Z: W1 |( G5 m. S0 F; x& ~' z( N
◎ Full descending 满递减堆栈
* m2 h* Z, l4 x3 v0 W4 T% K, c& m堆栈首部是高地址,堆栈向低地址增长。栈指针总是指向堆栈最后一个元素(最后一个元素是最后压入的数据)。8 u4 Y/ r7 W2 @1 D; D; U, n# d1 a
ARM-Thumb过程调用标准和ARM、Thumb C/C++ 编译器总是使用Full descending 类型堆栈。% C9 ?) l- B" \; W4 O( k5 B
◎ Full ascending 满递增堆栈+ I8 f8 [% T* p  Z& {
堆栈首部是低地址,堆栈向高地址增长。栈指针总是指向堆栈最后一个元素(最后一个元素是最后压入的数据)。& ~! m( @/ Q# g5 e5 W, M
◎ Empty descending 空递减堆栈7 ]/ r5 H7 E  X8 |" U, y  U' c& r
堆栈首部是低地址,堆栈向高地址增长。栈指针总是指向下一个将要放入数据的空位置。
( d: d$ ^3 ]0 l  u◎ Empty ascending 空递增堆栈
& I1 K% l1 B1 C/ a1 ^7 i9 m堆栈首部是高地址,堆栈向低地址增长。栈指针总是指向下一个将要放入数据的空位置。! }6 `. `/ c: M3 y+ P( x

" [4 R* S" Y/ E% h4 a! ~/ A5、操作堆栈的汇编指令堆栈类型 入栈指令 出栈指令
4 G; O0 p! H2 x9 QFull descending STMFD (STMDB) LDMFD (LDMIA)
) }2 Y. e# Z3 @4 C3 `4 wFull ascending STMFA (STMIB) LDMFA (LDMDA)
7 i$ u2 g8 w+ B4 E" u8 Q  C3 HEmpty descending STMED (STMDA) LDMED (LDMIB)
) p3 |  J, j0 oEmpty ascending STMEA (STMIA) LDMEA (LDMDB)0 d) J8 x# J8 s9 ?; @
例子:( ?- i. p2 Y9 ~- c& C7 h
STMFD r13!, {r0-r5} ; Push onto a Full Descending Stack
' T( N8 f" x5 P+ ]7 B( _LDMFD r13!, {r0-r5} ; Pop from a Full Descending Stack.

8 w1 }6 q" x1 i0 d1 c/ b
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-25 15:20 , Processed in 0.140625 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表