汇编堆栈的工作方式 什么是堆栈,51单片机堆栈指针SP的使用举例?
什么是堆栈,51单片机堆栈指针SP的使用举例?在MCS-51单片机的汇编语言中,没有SP指令,只有SP操作指令。SP是51单片机中的堆栈指针寄存器,存储当前堆栈地址。堆栈用于存储子程序调用和中断程序调
什么是堆栈,51单片机堆栈指针SP的使用举例?
在MCS-51单片机的汇编语言中,没有SP指令,只有SP操作指令。SP是51单片机中的堆栈指针寄存器,存储当前堆栈地址。堆栈用于存储子程序调用和中断程序调用的返回地址,或临时存储寄存器的值。除了在初始化堆栈时直接为sp赋值外,sp还显式存在。其他影响SP的指令在SP上隐式操作,即SP不出现在指令操作数中。例如,当以下指令(SP)=(SP)2nop子例程返回时,RET指令从堆栈中弹出PC值,因此它将返回这里,(SP)=(SP)-2Push ACC accumulator A的内容被存储,(SP)=(SP)1pop堆栈B中存储的累加器A的内容弹出到寄存器B,(SP)=(SP)-1。使用push和pop指令来使用堆栈。注意堆栈内外的匹配,否则会造成意想不到的后果。另外,如果将30h分配给sp,则称为设置堆栈底部。稍后:push ACC在31h单元中存储ACC内容;push PSW在32H单元中存储PSW内容;push B在33H单元中存储B内容弹出时应使用Pop命令。使用堆栈,您不必关心特定内容存储在哪个单元中。SP将自动管理它。
汇编语言中的堆栈段指针是干什么的?
汇编语言中的堆栈段指针用于存储临时数据、局部变量和中断/调用子例程的返回地址。堆栈指针始终指向顶部元素。在51系列单片机中,堆栈是不断增长的,所以当数据放入堆栈时,堆栈指针先增加1,然后按下堆栈。离开堆栈时,首先弹出数据,然后将堆栈指针减少1。但是在AVR微控制器中,堆栈是向下增长的。当数据放入堆栈时,指针将减少1,当数据从堆栈中取出时,指针将增加1。
程序里面的堆栈与指针怎么用?
堆栈是一个连续存储单元,其访问方式遵循“先入后出”的原则。它的功能是保存寄存器或标记寄存器的内容。堆栈就是这样一种数据结构。它是在内存中打开一个存储区域,并将数据一个一个地存储在这个区域中(即“推送”)。地址指针总是指向最后一个数据被推入堆栈的数据单元。存储地址指针的寄存器称为堆栈指示符。开始放入数据的单元称为堆栈的底部。数据逐个存储。这个过程叫做“叠压”。在压栈过程中,压入栈中的每一个数据都放在与上一个单元相连的下一个单元中,栈指示符中的地址自动增加1。读取数据时,根据堆栈指示符中的地址读取数据,堆栈指示符中的地址数自动减少1。这个过程称为弹出窗口。这样就实现了后进先出的原则。SP是一个8位特殊寄存器,指示堆栈顶部在内部ram块中的位置。系统复位后,SP被初始化为07h。实际上,堆栈从08h单元开始。考虑到08h~1fh单元分别属于工作寄存器区域1~3,如果在程序设计中使用这些区域,最好将SP值改为1fh或更大。SP是一个8位特殊寄存器,指示堆栈顶部在内部ram块中的位置。系统复位后,SP被初始化为07h。实际上,堆栈从08h单元开始。考虑到08h~1fh单元分别属于工作寄存器区域1~3,如果在程序设计中使用这些区域,最好将SP值改为1fh或更大。MCS-51的堆栈是向上生成的。如果SP=60H,CPU执行sum调用指令或响应中断后,PC进入堆栈,PCL保护为61H,PCH保护为62H,SP=62H。