历史上的今天
返回首页

历史上的今天

今天是:2025年03月30日(星期日)

正在发生

2020年03月30日 | ARM的堆栈学习笔记

2020-03-30 来源:eefocus

以下是我在学习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.

推荐阅读

史海拾趣

Electrocube Inc公司的发展小趣事

Electrocube Inc公司高度重视产品质量管理。公司建立了严格的质量管理体系,从原材料采购到生产流程控制,再到产品检验和售后服务,每一个环节都严格把关。这种对质量的执着追求,使得Electrocube Inc公司的产品具有极高的可靠性和稳定性,赢得了客户的信赖和好评。

Advanced Power Solutions公司的发展小趣事

随着全球环保意识的提高,Advanced Power Solutions公司开始关注电源管理技术的环保性能。公司投入大量资源研发绿色、低碳的电源管理产品,并成功推出了一系列符合环保标准的新产品。这些产品不仅受到了消费者的欢迎,也赢得了政府和环保组织的认可。公司的环保理念和创新精神为其赢得了良好的社会声誉。

Dongguan Jingyue Electronics Co Ltd公司的发展小趣事

Dongguan Jingyue Electronics Co Ltd始终将社会责任和可持续发展作为公司发展的重要组成部分。公司积极参与公益事业,关注环境保护和员工福利。通过捐赠教育基金、支持环保项目、改善员工待遇等方式,公司履行了社会责任,也为公司的可持续发展奠定了基础。

请注意,以上故事均为虚构内容,仅用于展示电子行业公司可能的发展故事框架。

Curtis Instruments Inc公司的发展小趣事

Curtis一直致力于环保和低碳技术的研发与应用。公司的产品和服务广泛应用于电动汽车、混合动力汽车等环保型交通工具中,为减少碳排放、推动绿色出行做出了积极贡献。同时,Curtis还积极参与各种环保活动和社会公益项目,通过实际行动践行环保理念。

High Energy Corp公司的发展小趣事

随着全球市场的不断变化和竞争的加剧,Curtis不断加强全球布局和战略合作。公司与多家国际知名企业建立了长期合作关系,共同开发新产品、拓展新市场。此外,Curtis还积极参与国际展览和交流活动,展示公司的最新技术和产品成果,提高品牌知名度和影响力。这些全球布局和战略合作有助于Curtis更好地应对市场挑战、把握发展机遇。

Hi-Light Electronic Co Ltd公司的发展小趣事

1995年,Curtis在中国建立了独资企业科蒂斯仪器(中国)有限公司,其制造工厂于1997年投入生产。经过近20年的发展,Curtis在中国已经建立了完善的生产、研发和销售体系。2012年,Curtis在苏州工业园区成立了独立的科蒂斯技术(苏州)有限公司,进一步提升了在中国的研发和生产能力。如今,Curtis中国已成为Curtis在全球的第6个研发中心,也是中国最现代化的生产电动车辆驱动控制系统的厂商之一。

问答坊 | AI 解惑

带有存储器功能的数字温度计-DS1624技术应用

带有存储器功能的数字温度计-DS1624技术应用…

查看全部问答>

很好的滤波器设计软件 FILTER SOLUTIONS

本帖最后由 paulhyde 于 2014-9-15 03:02 编辑 很好的滤波器设计软件 FILTER SOLUTIONS    …

查看全部问答>

红外遥控系统的一种设计方法

本帖最后由 paulhyde 于 2014-9-15 09:31 编辑  …

查看全部问答>

armstudy123

arm学习报告一二三…

查看全部问答>

转行要不要去做嵌入式编程

我以前不是搞开发写程序的,也不是搞硬件开发的。前天去一家搞电表嵌入式开发的小公司面试,被人家录用了。而我一直是在研究用MFC开发应用领域程序。对C语言的熟悉程度就是潭浩强那本C语言。单片机和汇编顶多只能说学过。感觉嵌入式反而可以避开那 ...…

查看全部问答>

在 wince 5.0系统上 安装输入法

如何在 wince系统上,安装 输入法,我找的 一个 搜狗手机版输入法,wm5.0版的,是 CAB文件。 问题是,在 WINCE系统下,如何安装 CAB文件,直接点击不行…

查看全部问答>

如何在ARM上实现TCP/IP协议栈(不用操作系统)

要求在LPC2388上实现VoIP语音数据打包、解包、收发功能。 按我的想法,直接采用嵌入式系统提供的TCP/IP协议栈,方便。 顶头上司不让用操作系统,说是直接控制比较可控。 不用操作系统,这可怎么办呢?各位大侠多多指点^!^…

查看全部问答>

问个困扰我的问题(硬盘相关)

我电脑的硬盘是p口的,就是排线的那种,现在别人送我一块s口的新硬盘,但是我的主板上没有s口硬盘的插口~~ 我想问一下,有没有什么转换设备什么的,能做一下转换让我能用上s口的硬盘~~~ …

查看全部问答>

TI 图形驱动库中可以实现的所有显示效果展示

ti的图形库中可以实现的所有效果图,从ti的demo中移植到自己的2110板子,针对自己的硬件重写LCD,触摸屏驱动。下面的图片展示了从驱动层,图形基元层,widget层的所有显示效果。希望可以让想学习图形驱动库的朋友对这个库出来的效果有一个直观的概 ...…

查看全部问答>