堆栈指针寄存器 SP 详解

堆栈是一种具有“后进先出”(LIFO---Last In First Out)特殊访问属性的存储结构。堆栈一般使用RAM 物理资源作为存储体,再加上LIFO 访问接口实现。

堆栈的实现方法:
                         在随机存储器区划出一块区域作为堆栈区,数据可以一个个顺序地存入(压入)到这个区域之中,这个过程称为‘压栈’(push )。通常用一个指针(堆栈指针 SP---Stack  Pointer)实现做一次调整,SP  总指向最后一个压入堆栈的数据所在的数据单元(栈顶)。从堆栈中读取数据时,按照堆栈 指针指向的堆栈单元读取堆栈数据,这个过程叫做 ‘弹出’(pop ),每弹出一个数据,SP 即向相反方向做一次调整,如此就实现了后进先出的原则。

堆栈是计算机中广泛应用的技术,基于堆栈具有的数据进出LIFO特性,常应用于保存中断断点、保存子程序调用返回点、保存CPU现场数据等,也用于程序间传递参数。

ARM处理器中通常将寄存器R13作为堆栈指针(SP)。ARM处理器针对不同的模式,共有 6 个堆栈指(SP),其中用户模式和系统模式共用一个SP,每种异常模式都有各自专用的R13寄存器(SP)。它们通常指向各模式所对应的专用堆栈,也就是ARM处理器允许用户程序有六个不同的堆栈空间。这些堆栈指针分别为R13、R13_svc、R13_abt、R13_und、R13_irq、R13_fiq,如表2-3    堆栈指针寄存器所示。 

为了更准确地描述堆栈,根据“压栈”操作时堆栈指针的增减方向,将堆栈区分为‘递增堆栈’(SP 向大数值方向变化)和‘递减堆栈’(SP 向小数值方向变化);又根据SP 指针指向的存储单元是否含有堆栈数据,又将堆栈区分为‘满堆栈’(SP 指向单元含有堆栈有效数据)和‘空堆栈’(SP 指向单元不含有堆栈有效数据)。
           这样两两组合共有四种堆栈方式——满递增、空递增、满递减和空递减。
           ARM处理器的堆栈操作具有非常大的灵活性,对这四种类型的堆栈都支持。
           ARM处理器中的R13被用作SP。当不使用堆栈时,R13 也可以用做通用数据寄存器。

8种后缀

  • ia(increase after)先传输,再地址+4
  • ib(increase before)先地址+4,再传输
  • da(decrease after)先传输,再地址-4
  • db(decrease before)先地址-4,再传输
  • fd(full decrease)满递减堆栈
  • ed(empty decrease)空递减堆栈
  • fa(·······) 满递增堆栈
  • ea(·······)空递增堆栈
  1. 四种栈

空栈:栈指针指向空位,每次存入时可以直接存入然后栈指针移动一格;而取出时需要先移动一格才能取出

满栈:栈指针指向栈中最后一格数据,每次存入时需要先移动栈指针一格再存入;取出时可以直接取出,然后再移动栈指针

增栈:栈指针移动时向地址增加的方向移动的栈

减栈:栈指针移动时向地址减小的方向移动的栈

 //设置栈,准备后面的lowlevel_init的使用ldr   sp, =0xd0036000    /* end of sram dedicated to u-boot */sub    sp, sp, #12         /* set stack */mov  fp, #0

3.堆栈指针寄存器 SP 详解相关推荐

  1. 堆栈指针寄存器-SP详解

    基本概念: 堆栈指针寄存器-SP是什么? 答:堆栈是计算机存储数据的一种数据结构,SP的作用就是指示当前要出栈或入栈的数据,并在操作执行后自动递增或递减. 至于是入栈递增还是入栈递减,就是由CPU的生 ...

  2. 堆栈指针寄存器 SP详解以及栈的作用

    本文引用地址:http://www.eepw.com.cn/article/201611/321963.htm 韦东山:https://blog.csdn.net/thisway_diy/articl ...

  3. ARM指针寄存器——堆栈指针寄存器SP、程序计数器PC、连接寄存器LR

    参考:堆栈指针寄存器 SP详解以及栈的作用 作者:蓝色鲜橙多 网址:https://blog.csdn.net/qq_36588941/article/details/89873633?utm_sou ...

  4. TI Cotex M3/4单片机关于寄存器操作详解

    TI Cotex M3/4单片机关于寄存器操作详解 前备知识 寄存器与偏移量 位带操作.位带区 TI单片机寄存器操作详解 快速在TI的手册里面确认某外设某寄存器的确切地址 寄存器操作介绍 本文参考 前 ...

  5. this指针的用法详解

    C++中this指针的用法详解 2010-11-12 20:40:45 分类: C/C++ this指针的用处: 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果.th ...

  6. c语言二级指针有什么作用,C语言中二级指针的实例详解

    C语言中二级指针的实例详解 C语言中二级指针的实例详解 用图说明 示例代码: #include int main(int argc, const char * argv[]) { // int a = ...

  7. 51单片机的堆栈指针(SP)

    堆栈指针(SP,Stack Pointer),专门用于指出堆栈顶部数据的地址. 那么51单片机的堆栈在什么地方呢?由于单片机中存放数据的区域有限,我们不能够专门分配一块地方做堆栈,所以就在内存(RAM ...

  8. 【C语言】小妹不懂指针和数组的关系?那就安排指针数组关系详解

    目录 前言 一.什么是数组 二.什么是指针 三.指针变量的大小 四.数组和指针的关系 五.指针变量的自增自减运算 六.两个参数确定一个数组 七.字符型指针和字符型数组 总结 写在最后 前言 前段时间整 ...

  9. C语言(函数指针数组)详解

    要了解函数指针数组,可以从三个角度来分析.所谓函数指针数组,从字面意思上来解析,函数指针数组的组成有三个点,函数,指针,数组.首先我们知道,函数指针数组,是一个数组,数组的每个元素是函数指针,也就是一 ...

最新文章

  1. PHPCMS V9 杂记一
  2. css:z-index
  3. mysql找安装路经,更改密码
  4. gson解析mysql城市json数据_Gson解析复杂的json数据
  5. 《高性能javascript》 领悟随笔之-------DOM编程篇(二)
  6. 关于会计科目表,科目组,字段状态组
  7. push计算机语言,数组的操作push,pop,shift,unshift详解
  8. 真恶心,用安卓模拟器开微信不能找附近的人
  9. 两台思科交换机vlan划分_Cisco交换机Vlan划分及ACL配置详细步骤 | 吴文辉博客
  10. len在python_len在python
  11. php小程序的wxparse.js是什么,微信小程序如何解析HTML富文本(使用wxParse解析富文本的demo)...
  12. 2008年不错的图书
  13. mp.weixin.php,GitHub - temberature/mp-php-sdk: 微信公众平台第三方授权php开发包, weixin mp developer SDK....
  14. springboot新版本(2.1.0)、springcloud新版本(Greenwich.M1)实现链路追踪的一些坑
  15. 苹果5s现在还能用吗_苹果ios稳定企业签名,现在苹果企业签名还是最稳定的苹果签名吗...
  16. 泾县高级职业中学计算机专业课程,泾县高级职业中学:以人为本 促可持续发展...
  17. Windows XP系统文件一一诠释(1)[最新整理](转BY wang6610----BBS.WUYOU.COM)
  18. aliddns ipv6_利用阿里云ddns动态解析ipv6地址
  19. css实现一个三角形
  20. 吉林大学单片机实验课实验五——重量测量

热门文章

  1. fortune命令简介
  2. Can not issue executeUpdate() for SELECTs
  3. Android 8遇到的问题cat: /system/build.prop: Permission denied,如果不root,有方法解决吗?
  4. Qt的基本控件——列表控件
  5. go: cannot find main module, but found .git/config in
  6. Android实现snmp协议(一)
  7. [转]真核生物预测软件
  8. Swift 动画 —— 数字滚动UILabel动画
  9. 腾讯政务协同解决方案:从微信生态到应用生态,从平台应用到应用中台
  10. 为什么需要稀疏编码及解释