关于入栈和出栈的理解

        关于入栈和出栈的理解:假设程序在运行,这个时候就会涉及到下面要说到的几个核心的寄存器(对栈进行操作)就是PC寄存器(为了能够准确地记录各个线程正在执行的当前字节码指令地址,最好的办法自然是为每一个线程都分配一个PC寄存器这样一来各个线程之间便可以进行独立计算,从而不会出现相互干扰的情况。)、CPU的Rx寄存器、累加器、SP寄存器-栈顶指针。详细解析多翻下资料鄙人能力有限这里简说啦。程序正常运行时,会用到了这几个寄存器,因为它们使用是不受限制的所以可以理解为:公用寄存器;

准备工作都做好了,下面描述下入栈和出栈到底是什么鬼! 《 栈的结构是“先进后出“的,就像我们玩的堆积木一样,往往最先放的那块放永远在最底下,它总是最先被压的对象。随着一直往上加积木,先放的总是被后放的压在下面,一直加一直加直到积木完成。综上所述估计你们已经猜到了这个游戏规则怎么玩了。没错就像你们想的一样!出栈原理:拆积木,而且总是从最上面拿掉积木,这个要记住。》
上面说到了SP寄存器-栈顶指针,这家伙是个主角 因为入栈和出栈都跟它有关系:入栈的时候作为栈顶新来的数据元素必定会压在栈顶的上面,出栈的时候作为栈顶底下被压着的数据元素随机一位要出栈的话原来栈顶让出,接着底下被压着的那位数据元素出来,出来后必定会压在栈顶的上面,因为刚才说了新来的总是在最上面。

        一般来说栈有两种内存结构,一种是连续的,一种是不连续的,连续的基本上就是数组了,不连续的基本上就是按照链表类型存放的。链表类型就是说,每个节点都有个指针指向它下一个节点。这样链表就串起来了也就有了联系;

       比如当我们的函数发生中断需要处理中断时是要进中断函数的,在中断函数里面也是要进行各种运算的,也需要用到那几个公用寄存器,怎么处理呢?这里入栈和出栈就派上用场了。入栈:寄存器元素先暂时写到内存里去也就是栈,在中断服务函数里面,照常使用公用寄存器进行运算,等在中断函数执行完毕后,出栈:刚刚暂时保存在内存里的元素重新读到公用寄存器,来来回回操作入栈和出栈就是这么个原理

还希望有大佬指出不足之处!

转载引用文章请声明文章来源于此处谢谢~


 

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值