ARM的栈指令

2019-12-04来源: eefocus关键字:ARM  栈指令  栈地址

ARM的栈指令

ARM的指令系统中关于栈指令的内容比较容易引起迷惑,这是因为准确描述一个栈的特点需要两个参数:

  • 栈地址的增长方向:ARM将向高地址增长的栈称为递增栈(Descendent Stack),将向低地址增长的栈称为递减栈(Acendant Stack)

  • 栈指针的指向位置:ARM将栈指针指向栈顶元素位置的栈称为满栈(Full Stack),讲栈指针指向即将入栈的元素位置的栈称为空栈(Empty Stack)

1. 栈类型

根据栈地址增长方向雨栈指针指向位置的不同,自然可以将栈分为四类:


递增栈递减栈
空栈EA栈ED栈
满栈FA栈FD栈

图1描述了四种不同类型的栈,其中虚线部分表示即将入栈的元素。


图1 栈类型

2. 栈指令

栈的操作指令无非两种:入栈和出栈,由于ARM描述了四种不同类型的栈,因此对应的栈指令一共有8条。


入栈出栈
EA栈STMEALDMEA
ED栈STMEDLDMED
FA栈STMFALDMFA
FD栈STMFDLDMFD

这些指令具有相似的前缀:

  • STM:(STore Multiple data)表示存储数据,即入栈。

  • LDM:(LoaD Multiple data)表示加载数据,即出栈。

一般情况下,可以将栈操作指令分解为两步微指令:数据存取和栈指针移动。这两步操作的先后顺序和栈指针的移动方式由栈的类型决定。


第一步第二步等价指令
STMEA写[SP]SP增加STMIA
LDMEASP减少读[SP]LDMDB
STMED写[SP]SP减少STMDA
LDMEDSP增加读[SP]LDMIB
STMFASP增加写[SP]STMIB
LDMFA读[SP]SP减少LDMDA
STMFDSP减少写[SP]STMDB
LDMFD读[SP]SP增加LDMIA

ARM中存在一组缓冲区操作指令和栈指令是一一对应的,他们完成相同的功能。这些指令含义的区别来源于对存取操作的缓冲区指针地址增长方向,以及存取操作和缓冲区指针移动的先后顺序决定的。这个和前面描述的栈类型的分类原则十分相似。


指针递增(Increase)指针递减(Decrease)
存取前移动指针(Before)IBDB
存取后移动指针(After)IADA

3. 使用举例

虽然ARM的栈类型和相关的操作指令比较繁琐,但是实际上最常用的还是和x86指令集相同的栈类型:栈向低地址方向增长,且栈指针指向栈顶元素的位置,即ARM的FD栈。因此最常见的ARM栈指令操作是STMFD和LDMFD。


x86ARM
入栈PUSHSTMFD/STMDB
出栈POPLDMFD/LDMIA

例如入栈指令:

STMFD SP,{R0-R3}

实际的微指令操作为:

[SP-4]  <=  R3[SP-8]  <=  R2[SP-12] <=  R1[SP-16] <=  R0

在ARM的指令系统中,递减栈入栈操作的参数入栈顺序是从右到左依次入栈,而参数的出栈顺序则是从左到右的逆操作。对于递增栈,相应的操作则全部取反。
例如出栈指令:

LDMFD SP,{R4-R7}

实际的微指令操作为:

[SP]    =>  R4[SP+4]  =>  R5[SP+8]  =>  R6[SP+12] =>  R7

上述的入栈和出栈指令其实仅仅对栈做了存取操作,并未真正改变SP指针的值。正常情况下,我们希望对栈操作后能自动修改栈指针SP的值,使用如下指令可以达到该目的。

STMFD SP!,{R0-R3}

对应的微指令操作为:

[SP-4]  <=  R3[SP-8]  <=  R2[SP-12] <=  R1[SP-16] <=  R0
SP      =  SP - 16

同样的:

LDMFD SP!,{R4-R7}

对应的微指令操作为:

[SP]    =>  R4[SP+4]  =>  R5[SP+8]  =>  R6[SP+12] =>  R7
SP      =  SP + 16

希望通过本文对你理解ARM的栈指令有所帮助。


关键字:ARM  栈指令  栈地址 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic481969.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:ARM(RISC)和x86(CISC)的技术差异
下一篇:iOS逆向工程之Hopper中的ARM指令

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

ARM小记
ARM何物  ARM(Advanced RISC Machines,进阶精简指令集机器),如果你一直把这个单词读成“A”-“R”-“M”,那么将有一个好消息和一个坏消息要告诉你。好消息是:你 这是初次接触到ARM技术相关的文章,而本文内容正是专为你量身打造的,无论你是嵌入式系统的门外汉还是单片机技术的初学者,都可以通过本文轻松地了解ARM技术。 请相信我,这并不困难!坏消息是:我很抱歉的告诉你, 它的正确读法应该是“arm”,是手臂、胳膊的英文发音。 很出丑是不是?但除非你是在大声朗读,不然没人会知道 的。你又多了一个知识和一个不可告人的秘密。调整一下心态,我们的故事就从这里开始吧!  
发表于 2019-12-02
ARM小记
用ARM点亮一个led并闪烁
;       *//*               led.c:  用ARM点亮一个led并闪烁                    *//*                                        
发表于 2019-11-30
基于ARM倾角和加速度的检测装置的设计
C语言进行编程,完全采用面向对象的开发思想,具有很大的个人发挥空间,完成同一种功能可以从不同方面下手解决。MDK源自德国的KEIL公司,是RealView MDK的简称。在全球MDK被超过10万的嵌入式开发工程师使用。目前最新版本为:MDK5.14,该版本为 uVision5 IDE集成开发环境,是目前针对ARM处理器,尤其是Cortex M内核处理器的最佳开发工具。设计规划:针对此次课程设计,设计如下规划,如图2.1所示。图2.1 课程设计规划本章小结本章主要对课程设计的背景进行了介绍并对设计进行规划,制定出合理的工作流程。3  硬件系统设计  总体设计方案倾角加速度检测系统,主要要完成对温度、加速度
发表于 2019-11-29
基于ARM倾角和加速度的检测装置的设计
arm cortex m0 lpc1114的引脚图与综述
我们以LQFP48封装为例进行介绍。 从图中引脚上的描述可以看出,它的几乎每一个引脚上都复用了若干个功能。例如,第9脚:PIO1_8/CT16B1_CAP0,代表,第9脚既可以作为通用的输入输出引脚P1.8,也可以作为16位定时器1的捕获引脚。(关于什么是捕获引脚,请看Ration的《RATION LPC1114基础篇手册》)。引脚作为什么功能,需要通过IOCON模块来配置。现在,让我们把所有的引脚描述都看一遍吧!看完了引脚描述,你就会对它有一个基本的认识了。GPIO模块引脚:PIO0_0~PIO0~11PIO1_0~PIO1~11PIO2_0~PIO2_11PIO3_0~PIO3_5P0口,P1口,P2口各有12个引脚,
发表于 2019-11-29
arm cortex m0 lpc1114的引脚图与综述
ARM处理器主要有哪些优势?
对于如今大量出现的32位嵌入式应用,以笔者的看法,arm处理器的优势主要有以下几个方面。1.高性能、低功耗、低价格把ARM处理器的性能拿来和一些着名的通用处理器(如Pentium)相比是不合适的,因为他们各自针对的应用需求是不同的。Pentium处理器采用多条指令流水线的超标量结构,追求通用应用目标下的超强性能,功耗大,可以用散热器加风扇散热。ARM针对嵌入式应用,在满足性能要求的前提下,力求最低的功率消耗。ARM结构的优点是能兼顾到性能、功耗、代码密度、价格等几个方面,而且做得比较均衡。在性能/功耗比(MIPS/W)方面,ARM处理器具有业界领先的性能。基于ARM核的芯片价格也很低,目前arm CortexM的芯片价格可低至10
发表于 2019-11-29
一种基于ARM和智能手机的蓝牙CAN分析仪设计
  针对CAN总线通信质量、测试和验证的需要,以及传统CAN分析仪的复杂性,且必须选择PC机作为显示终端的不足,论证了一种基于ARM单片机和智能手机的CAN总线分析仪设计。该分析仪采用以ARM单片机为核心的硬件电路完成对CAN网络的实时数据收集和监控;采用蓝牙通信方式实现分析仪与智能手机的通信并以智能手机为终端完成数据分析。文章对分析仪硬件、软件和智能手机页面进行了具体设计,提出了一种新的波特率自动检测方法,最后给出了所设计的 CAN总线分析仪的实际试验结果,可实现CAN总线波特率自动检测、正常监测以及CAN总线状态分析的功能。  CAN(controller area network)控制器局域网络是一种实时性强、灵活性好
发表于 2019-11-27
一种基于ARM和智能手机的蓝牙CAN分析仪设计
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved