单片机RAM中,sp的作用是什么
单片机里sp是堆栈指针。
堆栈指针SP英文全称为stack pointer,是单片机控制器的组成部件之一,与时控制逻辑电路、指令寄存器译码器、地址指针DPTR、程序计数器等部件共同组成CPU的神经中枢。堆栈指针在单片机里的作用是随时跟踪栈顶地址,以便存取单片机的数据。
每当执一次PUSH指令时,SP就(在原来值的基础上)自动加1,每当执行一次POP指令,SP就(在原来值的基础上)自动减1。
扩展资料
由于SP中的值可以用指令加以改变,所以只要在程序开始阶段更改了SP的值,就可以把堆栈设置在规定的内存单元中,如在程序开始时,用一条MOV SP,#5FH指令,就是把堆栈设置在从内存单元60H开始的单元中。
一般程序的开头总有这么一条设置堆栈指针的指令,因为开机时,SP的初始值为07H,这样就使堆栈从08H单元开始往后,而08H到1FH这个区域正是8031的第二、三、四工作寄存器区,经常要被使用,这会造成数据的混乱。
不同作者编写程序时,初始化堆栈指令也不完全相同,这是作者的习惯问题。当设置好堆栈区后,并不意味着该区域成为一种专用内存,它还是可以象普通内存区域一样使用,只是一般情况下编程者不会把它当成普通内存用了。
参考资料来源:百度百科-单片机
详细解释如下:
堆栈是一种数据结构,和他相类似的有队列。
如果对数据结构有这样的要求:
先将数据放到该区内,先放的后出后放的先出。这种结构这是堆栈。也就是说堆栈的数据操作口只有一端。它常用到回朔等算法当中,说到数据结构,当然就要提到算法。而队列的操作正好与之相反。先放入的数据先出,后放的后出。它的数据操作是有两个口,一边只负责插入,一端只负责删除。所以对其算法是先入先出(FIFO,First input First Output).
而对于汇编来说,为了考虑这种结构,设置了两个寄存器,一个是SS,是一个段寄存器。用作开辟一个数据单元作为一个堆栈区,该SS中的内容是该段的首地址。而SP则作为指针用,它有汇编语言中的作用是为模块化等类似问题服务的!如果一个程序调用一个子程序,则进入该子程序前要先对主程序进行一个“现场保护”,以便子程序执行完毕后能顺利地返回地主程序中依次执行。所以在一般的子程序开始的部分,先对程序中所用到的寄存器进行保存,保存到堆栈区中,从子程序返回到主程序中时再对堆栈区中的内容进行释放还原。主程序还能进入到断点继续工作。正是这种原理,汇编编程时采用的是断点(也就是中断)的工作模式。也就是理解好堆栈就更好地理解了中断。
堆栈区的使用不仅仅如此,由于其原理。可以使用堆栈区进行子程序的参数传递。堆栈是一个很重要的内容,但学习它不好理解时建议你先看一下数据结构。会更有利于你的理解!
堆栈指针
为什么mcs51单片机复位后,sp的初值是07H而不是81H
堆栈指针只能在07H上。07H也是地址。你说的81H是特殊寄存器sp的地址。也就是说地址81H里面的值是07H。特别要注意的是片内RAM高128字节区和特殊寄存器SFR的 地址是相同的。间接寻址存取片内ram数据。直接寻址存取SFR。概括就是,这两块地址独立的,你说的两个数都是不同块的地址。
8031单片机复位后,R5对应的RAM单元的地址为??sp的内容是??
复位以后,R5对应的实际RAM单元地址为05H,SP的内容是07H。
80C51单片机片内RAM低128个存储单元划分为哪4个主要部分?各部分主要功 ...
30H~7FH:一般数据区,堆栈区 寄存器组就是R0-R7,一共是8*4是32字节 位寻址就是对每一位寻址,一个字节可以有8位,位地址可以从0-7F,一共是16个字节 30-7FH有80个字节单元,可以采用字节字节寻址的方法访问 堆栈区及堆栈指示区 堆栈是在片内RAM中数据先进后出的一个存储区域。堆栈指针SP是...
微机原理中断周期信息流问题,SP是堆栈指针,SP指示栈顶地址,信息流: C...
堆栈是一种数据结构,它是一个8位寄存器,它指示堆栈顶部在内部RAM中的位置。系统复位后,SP的初始值为07H,使得堆栈实际上是从08H开始的。因为sp有自动加1的性质。复位之后的sp指示的是栈底,随着sp增加,不断向上生长,所以sp指示的是栈顶地址 ...
什么叫堆栈?8051堆栈指示器SP有多少位,作用是什么?单片机初始化话后SP...
读取这些数据时,按照堆栈指示器中的地址读取数据,堆栈指示器中的地址数自动减 1。这个过程叫做“弹出pop”。如此就实现了后进先出的原则。SP是一个8位专用寄存器,它批示出堆栈顶部在内部RAM块中的位置。系统复位后,SP初始化为07H,实际上堆栈是由08H单元开始的。考虑08H~1FH单元分别属于工作寄存器...
复位后pc,sp,psw的初值是什么?他们的隐含意义是什么?
3. 堆栈指针(SP)的初始值设定为07H。SP指向栈内存顶部,用于存储临时数据和函数调用信息。4. 数据指针(DPTR)的初始值设定为0000H。DPTR通常用于存储16位的操作数或地址。5. 在复位后,SP的初值设为07H,这代表了栈顶在内部RAM中的位置。SP的值决定了栈的大小和栈操作的上下限。6. 复位后,PC...
简述51单片机SFR中PSW,SP,DPTR的用途
这样当子程序或中断服务完成返回时,可以继续执行主程序的下一条指令。此外,SP也可以用来存储临时数据。3. DPTR(数据指针)是一个16位的寄存器对,通常用来访问片内RAM或外部存储器中的数据。它可以在访问数据时作为间接寻址的地址指针使用,也可以作为一个普通的16位数据寄存器来存储临时数据。
80C51中SP堆栈指针位于哪里?
单片机的东西大多忘记了,稍微查了一下百度,又想出了一点:SFR是Special Function Register(特殊功能寄存器)的缩写。SP堆栈指针的"位置"当然就是在 SFR 中了.SP堆栈指针中的"参数"指向的"地址"是"RAM中堆栈的栈顶地址".书上应该讲的很详细的....
复位后pc,sp,psw的初值是什么?他们的隐含意义是什么?
复位后,MCS-51单片机的PC初值为0000H,PSW的初值为00H,堆栈指针SP初值为07H,DPTR的初值为0000H。SP是一个8位的SFR(特殊功能寄存器),它用来指示堆栈顶部在内部RAM中的位置。复位后PC和SP的初值为00H和07H。
51单片机指令mov sp,#5FH表示什么意思!求高手!!
SP是51单片机的堆栈指针寄存器,用来指向栈顶。MOV SP,#5FH,就是把堆栈重新设置到从60H开始的片内RAM区。
樊古黄龙: 你没有说是什么单片机产品,各单片机定义不同. 如果是MCS-51单片机,SP指的是堆栈指针寄存器Stack Pointer,指示堆栈的栈顶地址,定位要入栈或出栈的数据的存放位置.
铜鼓县13079979264: 什么叫堆栈?8051堆栈指示器SP有多少位,作用是什么?单片机初始化话后SP中的内容是什么? - ?
樊古黄龙: 堆栈是连续的内存单元,存取方式遵循“先进后出”的原则. 其作用一般是保存寄存器或标志寄存器的内容. 堆栈就是这样一种数据结构.它是在内存中开辟一个存储区域,数据一个一个顺序地存入(也就是“压入——push”)这个区域之中...
铜鼓县13079979264: 在程序设计时为什么还要对SP重新赋值 - ?
樊古黄龙: SP是指堆栈起始指针. 系统堆栈是在内存中. 对堆栈指针赋值,常见于单片机的嵌入式程序设计中. 由于单片机的内部资源非常少,有的单片机的RAM空间只有2K,在这么少的空间中运行程序,需要仔细地设计每个变量,使得占用的RAM最少. 给SP赋值,主要是为了能够让用户来决定RAM中堆栈和用户数据的比例关系,以保证系统可靠稳定的运行.
铜鼓县13079979264: 单片机中数据指针DPTR和堆栈指针SP是什么,有什么用及在编程中什么时候要用 - ?
樊古黄龙: DPTR是个16位的寄存器,主要用来寻址,他存储的是空间地址.因此可寻址存储64k的范围. SP堆栈指针,主要用来调用子程序或者进入中断的时候保存当前的寄存器内的数据,和当前程序计数器值.在程序返回后把内容弹出.回到断开的程序段处继续执行.
铜鼓县13079979264: 单片机的堆栈指针SP有什么作用?
樊古黄龙: SP用于存放栈顶的偏移地址. 通俗的说,就是存放堆栈SS的顶部.
铜鼓县13079979264: 单片机片内RAM低128单元的三个主要部分的主要功能各是什么 - ?
樊古黄龙: 00h~1fH:寄存器组 20H~2fH:可位寻址区 30H~7FH:一般数据区,堆栈区 ,这个就没错了
铜鼓县13079979264: 单片机 - 堆栈有何作用?复位时SP=07H吗?为什么要设SP..... - ?
樊古黄龙: 我来详细讲一下吧. 复位的时候SP等于07,堆栈的用处是存储数据,举个例子: 如果你现在不修改SP,那SP就等于07H. 假如你的A是等于6的,你执行PUSH ACC,之后,你的SP就变成08H了,如果你再执行一句 MOV 08H,#3,你的08H单元之前本来是6,现在变成3了,你再执行POP ACC,此时A等于3了. 无法恢复了. 一般我们都要重新设置SP,一般SP=70H就够用了.堆栈区间就是70H到7FH,这样你就不会冲突了.
铜鼓县13079979264: stack pointer在计算机中指的是什么?有什么作用 - ?
樊古黄龙: stack pointer:堆栈指针在51系列单片机里,堆栈指针sp在片内RAM128B中开辟栈区,并随时跟踪栈顶地址.它是按"先进后出"的原则存取数据.开机复位后,单片机栈底地址为07H. 主要用来保存临时数据,局部变量和中断/调用子程序程序的返回地址. 堆栈指针总是指向栈顶元素.在51系列单片机中,堆栈是向上生长的,所以数据入栈的时候,堆栈指针先加1,再压栈. 出栈的时候先弹出数据,堆栈指针再减1. 但在AVR单片机中,堆栈是向下生长的,数据入栈时指针将减1,数据出栈时指针将加1.参见百科:http://baike.baidu.com/view/2081454.htm
铜鼓县13079979264: 什么是堆栈,51单片机堆栈指针SP的使用 - ?
樊古黄龙: 在计算机领域,堆栈是一个不容忽视的概念,堆栈是两种数据结构.堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除.在单片机应用中,堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护断点和现场.要点:堆,队列优先,先进先出(FIFO—first in first out)[1] .栈,先进后出(FILO—First-In/Last-Out).
铜鼓县13079979264: 单片机种堆栈的作用,为什么搞个堆栈SP放那呢 - ?
樊古黄龙: 希望对你有帮助!别老说“堆栈堆栈”的,堆是堆,栈是栈,二者完全不是一个概念. SP是51单片机的栈指针,用于为程序的运行提供并维护栈(也就是通用的先进先出队列).51单片机的栈是向上生长的,所以一般连接器会在分配完所有的RAM块后将SP放在地址最高处.由于SP是个“指针”,所以栈操作都是间接寻址的. 对于C语言编程的用户而言,几乎不涉及到对SP的操作.