什么叫堆栈?8051堆栈指示器SP有多少位,作用是什么?单片机初始化话后SP中的内容是什么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么叫堆栈?8051堆栈指示器SP有多少位,作用是什么?单片机初始化话后SP中的内容是什么?相关的知识,希望对你有一定的参考价值。

什么叫堆栈?8051堆栈指示器SP有多少位,作用是什么?单片机初始化话后SP中的内容是什么?

堆栈是连续的内存单元,存取方式遵循“先进后出”的原则。
其作用一般是保存寄存器或标志寄存器的内容。
堆栈就是这样一种数据结构。它是在内存中开辟一个存储区域,数据一个一个顺序地存入(也就是“压入——push”)这个区域之中。有一个地址指针总指向最后一个压入堆栈的数据所在的数据单元,存放这个地址指针的寄存器就叫做堆栈指示器。开始放入数据的单元叫做“栈底”。数据一个一个地存入,这个过程叫做“压栈”。在压栈的过程中,每有一个数据压入堆栈,就放在和前一个单元相连的后面一个单元中,堆栈指示器中的地址自动加1。读取这些数据时,按照堆栈指示器中的地址读取数据,堆栈指示器中的地址数自动减
1。这个过程叫做“弹出pop”。如此就实现了后进先出的原则。
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执行一和调用指令或者响应中断后,pc进栈,pcl保护到61h,pch保护到62h,sp=62h。
参考技术A 堆栈是计算机中在内存RAM里的一段特殊的存储空间,存储数据按“先进后出,后进先出”规律,一般在子程序调用,中断子程序调用时保存地址和数据用。
8051单片机堆栈指针SP是8位的,用来指向堆栈的栈顶。
初始化后SP=07H
参考技术B

什么叫堆栈?

--是一个“后进先出”的存储区域。

8051堆栈指示器SP有多少位?

--八位。

作用是什么?

--指示堆栈栈顶的位置。

单片机初始化话后SP中的内容是什么?

--(SP)=07H。

这些问题的答案,书上不是都有吗?

你连书也不会看吗?


如何查找lua堆栈中有多少项目(值)

【中文标题】如何查找lua堆栈中有多少项目(值)【英文标题】:How to find how many items(values) are in lua stack 【发布时间】:2021-05-31 18:08:45 【问题描述】:

我正在使用 C++ 中的 lua,我想找出 lua 堆栈中使用了多少“槽”(你可以说),如果可能,lua 堆栈的大小是多少?

【问题讨论】:

您可以使用 lua_checkstack 来测试您是否可以推送新实体 【参考方案1】:

lua_gettop(lua_State* L)

堆栈中的元素个数与顶部槽的索引相同。如果您对此感兴趣,可以使用此信息为您打印整个堆栈。

int top = lua_gettop(L);

std::string str = "From top to bottom, the lua stack is \n";
for (unsigned index = top; index > 0; index--)

    int type = lua_type(L, index);
    switch (type)
    
        // booleans
        case LUA_TBOOLEAN:
            str = str + (lua_toboolean(L, index) ? "true" : "false") + "\n";
            break;

        // numbers
        case LUA_TNUMBER:
            str = str + std::to_string(lua_tonumber(L, index)) + "\n";
            break;

       // strings
        case LUA_TSTRING:
            str = str + lua_tostring(L, index) + "\n";
            break;

        // other
        default:
            str = str + lua_typename(L, type) + "\n";
            break;
    


str = str + "\n";
std::cout << str;

【讨论】:

以上是关于什么叫堆栈?8051堆栈指示器SP有多少位,作用是什么?单片机初始化话后SP中的内容是什么?的主要内容,如果未能解决你的问题,请参考以下文章

数据压入堆栈时,ESP寄存器的指向?

Keil C51 中堆栈指针的问题

汇编中BP是啥

栈的生长方向理解

MATLAB 的堆栈大小是多少?

Android中的activity的堆栈有啥作用