堆栈指针SP(Stack Pointer)
堆栈是一种数据结构,它是一个8位寄存器,它指示堆栈顶部在内部RAM中的位置。系统复位后,SP的初始值为07H,使得堆栈实际上是从08H开始的。但我们从RAM的结构分布中可知,08H—1FH隶属1—3工作寄存器区,若编程时需要用到这些数据单元,必须对堆栈指针SP进行初始化,原则上设在任何一个区域均可,但一般设在30H—1FH之间较为适宜。 
数据的写入堆栈我们称为入栈(PUSH,有些文献也称作插入运算或压入),从堆栈中取出数据称为出栈(POP,也称为删除运算或弹出),堆栈的最主要特征是“后进先出”规则,也即最先入栈的数据放在堆栈的最底部,而最后入栈的数据放在栈的顶部,因此,最后入栈的数据出栈时则是最先的。这和我们往一个箱里存放书本一样,需将最先放入箱底部的书取出,必须先取走最上层的书籍。这个道理非常相似。

那么堆栈有何用途呢?堆栈的设立是为了中断操作和子程序的调用而用于保存数据的,即常说的断点保护和现场保护。微处理器无论是在转入子程序和中断服务程序的执行,执行完后,还是要回到主程序中来,在转入子程序和中断服务程序前,必须先将现场的数据进行保存起来,否则返回时,CPU并不知道原来的程序执行到哪一步,原来的中间结果如何?所以在转入执行其它子程序前,先将需要保存的数据压入堆栈中保存。以备返回时,再复原当时的数据。供主程序继续执行。 
转入中断服务程序或子程序时,需要保存的数据可能有若干个,都需要一一地保留。如果微处理器进行多重子程序或中断服务程序嵌套,那么需保存的数据就更多,这要求堆栈还需要有相当的容量。否则会造成堆栈溢出,丢失应备份的数据。轻者使运算和执行结果错误,重则使整个程序紊乱。

MCS-51的堆栈是在RAM中开辟的,即堆栈要占据一定的RAM存储单元。同时MCS-51的堆栈可以由用户设置,SP的初始值不同,堆栈的位置则不一定,不同的设计人员,使用的堆栈区则不同,不同的应用要求,堆栈要求的容量也有所不同。堆栈的操作只有两种,即进栈和出栈,但不管是向堆栈写入数据还是从堆栈中读出数据,都是对栈顶单元进行的,SP就是即时指示出栈顶的位置(即地址)。在子程序调用和中断服务程序响应的开始和结束期间,CPU都是根据SP指示的地址与相应的RAM存储单元交换数据。

堆栈的操作有两种方法:其一是自动方式,即在中断服务程序响应或子程序调用时,返回地址自动进栈。当需要返回执行主程序时,返回的地址自动交给PC,以保证程序从断点处继续执行,这种方式是不需要编程人员干预的。第二种方式是人工指令方式,使用专有的堆栈操作指令进行进出栈操作,也只有两条指令:进栈为PUSH指令,在中断服务程序或子程序调用时作为现场保护。出栈操作POP指令,用于子程序完成时,为主程序恢复现场。

MCS-51单片机存储器结构-特殊功能寄存器 :堆栈指针SP(Stack Pointer)相关推荐

  1. ARM三个寄存器 : 堆栈指针SP(R13)、连接寄存器LR(R14)和程序计数器PC(R15)

    深入理解ARM的这三个寄存器,对编程以及操作系统的移植都是必要的. 1.堆栈指针R13(SP):每一种异常模式都有其自己独立的r13,它通常指向异常模式所专用的堆栈,也就是说五种异常模式.非异常模式( ...

  2. 第二章 51单片机硬件结构

    第二章 51单片机硬件结构 这一章节主要介绍经典8051微控制器的组成结构.功能特点以及引脚等功能. 1. 组成结构 1.1 8051微控制器 8051系列微控制器是美国Intel公司于八十年代推出的 ...

  3. 嵌入式开发学习笔记6-了解单片机中的特殊功能寄存器(定时器/计数器)

    嵌入式开发学习笔记6-了解单片机中的特殊功能寄存器(定时器/计数器) 定时器/计数器简介 TH与TL TMOD工作模式寄存器 TCON定时器控制寄存器 定时器操作实例 定时器/计数器简介 在单片机中, ...

  4. 嵌入式开发学习笔记5-了解单片机中的特殊功能寄存器(寄存器B、累加器A和程序状态字PSW)

    嵌入式开发学习笔记5-了解单片机中的特殊功能寄存器(寄存器.累加器和程序状态字) 累加器A 寄存器B 程序状态字PSW 累加器A 累加器A是ACC(Accumulator)的缩写,累加器A是一个具有特 ...

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

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

  6. C语言及ARM中堆栈指针SP设置的理解与总结

    1什么是栈 百度这么说:栈是一种特殊的线性表,是一种只允许在表的一端进行插入或删除操作的线性表.表中允许进行插入.删除操作的一端称为栈顶.表的另一端称为栈底.栈顶的当前位置是动态的,对栈顶当前位置的标 ...

  7. 51单片机c语言定义寄存器r,c51特殊功能寄存器定义及作用

    单片机C51语言是由C语言继承而来的.和C语言不同的是,C51语言运行于单片机平台,而C语言则运行于普通的桌面平台.C51语言具有C语言结构清晰的优点,便于学习,同时具有汇编语言的硬件操作能力.对于具 ...

  8. 51单片机存储器原理

    一. 80C51单片机的存储器结构 80C51单片机的存储器包括两类:程序存储器和数据存储器. 程序存储器用来存放用户程序和常用的表格.常数,采用只读存储器(ROM)作为程序存储器. 数据存储器用来存 ...

  9. 51单片机——存储器

    目录 1.存储器概述 1.1 存储单位 1.2 存储器编址 1.3存储器数据读写说明 1.4 存储器的地址空间说明 2.ROM(程序存储器) 2.1 片内外ROM(程序存储器) 2.2 片内外ROM( ...

最新文章

  1. python编写自定义函数计算一维numpy数组中与指定目标数值最接近(距离最近)的数值(find closest value in numpy array to a certain value)
  2. python读取txt数据-Python读取txt数据文件,并作图
  3. GraphicsMagick 1.3.25 Linux安装部署
  4. thinkjs-定时任务
  5. spring aop实现过程之一代理对象的生成
  6. 数据结构经典算法集锦
  7. linux虚拟机时间不准的问题
  8. codeforces 贪心+优先队列_算法与数据结构基础 - 堆(Heap)和优先级队列(Priority Queue)...
  9. OpenCV中的HOG+SVM在自动驾驶车辆检测中的应用实例
  10. amd平台linux驱动安装失败,ati闭源驱动安装失败,问题解觉不了。
  11. Android SDK开发包下载地址
  12. android 选座系统,android 影院选座
  13. CentOS 7 从本地 ISO 映像文件安装 Gnome GUI
  14. CSS样式书写的三种方式
  15. Android 常用RGB值及名称
  16. 配置 Visual Studio 2019以进行 iOS 开发
  17. chosen.jquery.js 初始化选中多个单个以及其他一些操作
  18. chrome浏览器显示完整网址
  19. 北大青鸟ACCP初学java
  20. flex前端+java后台实现Flex导出Excel的两种方法,

热门文章

  1. [转帖]P2P流媒体
  2. Windows文件共享服务
  3. 青岛智能物联网产才融合中心成立,山东大学携手百度飞桨海尔海纳云等共育AI人才...
  4. PTA - 数据库合集38
  5. XZ_Python3之使用Python批量打企业ipa包遇到的问题和解决
  6. 左右植树java_Plant 模拟植树活动,编写一个java应用程序 联合开发网 - pudn.com
  7. 开源PLM软件Aras详解四 ItemType的概念
  8. HashMap、LinkedHashMap、TreeMap的深入认识
  9. 微信小程序的一级页面和二级页面设置
  10. 使用深度学习识别狗的品种