原创 ARM 的堆栈学习笔记

2011-1-25 11:32 1625 6 9 分类: 消费电子

以下是我在学习ARM指令中记录的关于堆栈方面的知识:
1、寄存器 R13 在 ARM 指令中常用作堆栈指针
2、对于 R13 寄存器来说,它对应6个不同的物理寄存器,其中的一个是用户模式与系统模式共用,另外5个物理寄存器对应于其他5种不同的运行模式。采用以下的记号来区分不同的物理寄存器:
R13_
其中,mode为以下几种模式之一:usr、fiq、irq、svc、abt、und。
3、寄存器R13在ARM指令中常用作堆栈指针,但这只是一种习惯用法,用户也可使用其他的寄存器作为堆栈指针。而在Thumb指令集中,某些指令强制性的要求使用R13作为堆栈指针。由于处理器的每种运行模式均有自己独立的物理寄存器R13,在用户应用程序的初始化部分,一般都要初始化每种模式下的R13,使其指向该运行模式的栈空间,这样,当程序的运行进入异常模式时,可以将需要保护的寄存器放入R13所指向的堆栈,而当程序从异常模式返回时,则从对应的堆栈中恢复,采用这种方式可以保证异常发生后程序的正常执行。
4、有四种类型的堆栈:堆栈是一种数据结构,按先进后出(First In Last Out,FILO)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。
当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(Full Stack),而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈(Empty Stack)。
同时,根据堆栈的生成方式,又可以分为递增堆栈(Ascending Stack)和递减堆栈(DecendingStack),当堆栈由低地址向高地址生成时,称为递增堆栈,当堆栈由高地址向低地址生成时,称为递减堆栈。这样就有四种类型的堆栈工作方式,ARM 微处理器支持这四种类型的堆栈工作方式,即:
◎ Full descending 满递减堆栈
堆栈首部是高地址,堆栈向低地址增长。栈指针总是指向堆栈最后一个元素(最后一个元素是最后压入的数据)。
ARM-Thumb过程调用标准和ARM、Thumb C/C++ 编译器总是使用Full descending 类型堆栈。
◎ Full ascending 满递增堆栈
堆栈首部是低地址,堆栈向高地址增长。栈指针总是指向堆栈最后一个元素(最后一个元素是最后压入的数据)。
◎ Empty descending 空递减堆栈
堆栈首部是低地址,堆栈向高地址增长。栈指针总是指向下一个将要放入数据的空位置。
◎ Empty ascending 空递增堆栈
堆栈首部是高地址,堆栈向低地址增长。栈指针总是指向下一个将要放入数据的空位置。

5、操作堆栈的汇编指令堆栈类型 入栈指令 出栈指令
Full descending STMFD (STMDB) LDMFD (LDMIA)
Full ascending STMFA (STMIB) LDMFA (LDMDA)
Empty descending STMED (STMDA) LDMED (LDMIB)
Empty ascending STMEA (STMIA) LDMEA (LDMDB)
例子:
STMFD r13!, {r0-r5} ; Push onto a Full Descending Stack
LDMFD r13!, {r0-r5} ; Pop from a Full Descending Stack.
希望对各位有所帮助。。
 

PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

用户1629247 2011-10-14 08:38

好东西,谢谢

用户1626350 2011-9-27 17:26

谢谢分享,学习了

用户1577065 2011-9-24 17:19

谢谢分享
相关推荐阅读
用户1589980 2011-03-24 11:28
2011中国国际医疗电子技术大会暨展览 CMET2011
聚焦家用医疗电子、云端医疗及医疗成像 CMET2011布局中国医疗电子产业重镇——深圳、上海、北京  热点议题 全球和中国地区医疗电子市场发展机会与挑战; 医疗电子技术发展趋势研究; 便携/家用...
用户1589980 2011-03-24 11:25
医疗电子技术大会折射行业发展方向
在此次金融海啸中其他行业市场大幅回落之际,医疗电子产品因需求上升避开了经济环境的冲击,而中国刚刚出台的“新医改”方案背后巨大的投入计划和广阔的医疗设备市场更是吸引了众多国际厂商对医疗电子市场的关注。在...
用户1589980 2011-03-24 11:21
电子工程师最关心的问题
中国有多少工作很多年的电子工程师;中国每年有多少电子新手需要开始全新的技术生涯;他们有什么困惑需要去解开;他们最关心的问题是什么?他们对未来的期待是什么? 中国缺少什么样的电子工程师?中国缺少满嘴...
用户1589980 2011-02-15 13:46
学习单片机的八个步骤
    学习使用单片机就是理解单片机硬件结构,以及内部资源的应用,在汇编或C语言中学会各种功能的初始化设置,以及实现各种功能的程序编制。 第一步:数字I/O的使用     使用按钮输入信号,发光二极...
EE直播间
更多
我要评论
3
6
关闭 站长推荐上一条 /3 下一条