MCS-51单片机存储器结构-特殊功能寄存器 :堆栈指针SP(Stack Pointer)
来源:互联网 发布:淘宝关键词怎么刷 编辑:程序博客网 时间:2024/06/01 13:50
堆栈指针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)
- MCS-51单片机存储器结构
- MCS-51单片机存储器结构
- MCS-51单片机 特殊功能寄存器(SFR)
- MCS-51单片机的存储器组织结构
- MCS-51单片机的存储器组织结构
- MCS-51单片机的存储器组织结构
- MCS-51单片机的存储器组织结构
- 【51单片机特殊功能寄存器功能一览表】
- MCS-51特殊功能寄存器(SPR)的C51定义 .
- 51单片机的特殊功能寄存器
- 51单片机常用的特殊功能寄存器
- MCS-51单片机的内部程序存储器
- C51存储器类型 MCS-51单片机物理存储器区域
- 怎么理解堆栈指针(Stack Pointer)
- 51单片机:存储器结构
- 51单片机特殊功能寄存器(供初学者用)
- 51单片机的特殊功能寄存器(SFR)
- shell学习三十天----break,continue,shift,getopts
- 在Linux-0.11中实现基于内核栈切换的进程切换
- 51单片机汇编指令详解
- 编一程序,将两个字符串连接起来,不要用strcat函数。
- AJAX——核心XMLHttpRequest对象
- MCS-51单片机存储器结构-特殊功能寄存器 :堆栈指针SP(Stack Pointer)
- java.util.logging.Logger使用详解
- BMFont 使用方法 三
- IOS基本架构
- ubuntu中安装jdk配置环境变量
- radio的默认样式
- 剑指offer 67-机器人的运动范围
- C51:Keil c51指针变量
- Android自定义View圆环带文字进度条