arm中堆栈指针的理解 arm堆栈指针增长方向

arm中堆栈指针的理解 arm堆栈指针增长方向
堆栈严格来说应该叫做栈,栈(Stack)是限定仅在一端进行插入或删除操作的线性表。因此,对栈来说,可以进行插入或删除操作的一端端称为栈顶(top),相应地,另一端称为栈底(bottom)。不含元素的空表称为空栈。由于堆栈只允许在一端进行操作,因而按照后进先出(LIFO-LastIn First Out)的原理运作。 从栈顶的定义来看,栈顶的位置是可变的。空栈时,栈顶和栈底重合;满栈时,栈顶离栈底最远。ARM为堆栈提供了硬件支持,它使用一个专门的寄存器(堆栈指针)指向堆栈的栈顶。而且7种模式都有各自独立的堆栈指针,也就是有各自独立的堆栈空间。但这里的堆栈和uC/OS操作系统的任务堆栈又有区别,uC/OS的每个任务都有自己的堆栈,要是把uC/OS移植到ARM上,可以借助ARM的堆栈指针来实现。存储器堆栈可分为两种: 向上生长:向高地址方向生长,称为递增堆栈 向下生长:向低地址方向生长,称为递减堆栈 堆栈指针指向最后压入的堆栈的有效数据项,称为满堆栈;堆栈指针指向下一个要放入的空位置,称为空堆栈。这样就有4中类型的堆栈表示递增和递减的满堆栈和空堆栈的各种组合。
满递增:堆栈通过增大存储器的地址向上增长,堆栈指针指向内含有效数据项的最高地址。指令如LDMFA,STMFA等。 空递增:堆栈通过增大存储器的地址向上增长,堆栈指针指向堆栈上的第一个空位置。指令如LDMEA,STMEA等。
满递减:堆栈通过减小存储器的地址向下增长,堆栈指针指向内含有效数据项的最低地址。指令如LDMFD,STMFD等。 空递减:堆栈通过减小存储器的地址向下增长,堆栈指针指向堆栈下的第一个空位置。指令如LDMED,STMED等。
为什么说“向上生长”和“向下生长”呢?那是以为,一般画堆栈示意图都是把低地址画在下面,高地址画在上面。如下图。有一点需要注意的是,虽然ARM处理器核对于两种生长方式的堆栈均支持,但ADS的C语言编译器仅支持一种方式,即从上往下长,并且必须是满递减堆栈。所以STMFD等指令用的最多。

  

爱华网本文地址 » http://www.aihuau.com/a/25101016/307589.html

更多阅读

食不厌精脍不厌细的理解 食不厌精 烩不厌细

今天读《论语》中“食不厌精,脍不厌细”一段。看了书上的解释,觉得孔子对饮食的要求太高了。又觉得解释似乎并不妥当,于是到网上搜罗,发现对这一段的理解是仁者见仁智者见智。最后还是倾向于下面这篇文章的观点:食物不能只是满足于精细,

Excel中COLUMN函数的使用 excel函数的使用方法

Excel中COLUMN函数的使用——简介COLUMN函数是一个简单的辅助函数,在一些复杂的函数计算中会使用到COLUMN函数,但是一般都不会对COLUMN函数作解析,很多朋友对公式函数中突然插入“=COLUMN()”表示理解。这里,为大家介绍COLUMN函数的使用。

培训中常用到的团队活动 团队精神培训内容

前言 随着时代发展,人们掌握知识的速度加快,目前的培训已经由以往的填鸭式培训逐渐转移到体验式、互动式培训。 互动式培训,只所以能收到非常好效果,产生的影响也是持久的,就好比新东方的老俞说过的一句话:每个人都有激情,但是成功只属于

2014年高考理解文中重要词语的含义附答案 对mis含义的理解

一、考点解读考试手册针对阅读提出六种三个层次的能力,即认读、理解的能力,分析、综合的能力,鉴赏、评价的能力。其中认读、理解的能力的第一个要求就是“能读懂文章的内容,能结合语言环境理解词句的意义。今天我们来谈谈如何理解文中重

声明:《arm中堆栈指针的理解 arm堆栈指针增长方向》为网友一阵风一场梦分享!如侵犯到您的合法权益请联系我们删除