基址指针和堆栈指针分别是什么意思_有什么分别

电子常识

2611人已加入

描述

  什么是基址指针

  基址指针( 基址指针(base pointer) pointer) 指向系统栈最上面一个栈帧的底部 指向系统栈最上面一个栈帧的底部 在C语言中记录当前函数调用基址

  什么是堆栈指针

  堆栈指针总是指向栈顶位置。一般堆栈的栈底不能动,所以数据入栈前要先修改堆栈指针,使它指向新的空余空间然后再把数据存进去,出栈的时候相反。

  堆栈指针,随时跟踪栈顶地址,按“先进后出”的原则存取数据。

  计算机中的堆栈主要用来保存临时数据,局部变量和中断/调用子程序程序的返回地址。

  堆栈指针是在栈操作过程中,有一个专门的栈指针(习惯上称它为TOP),指出栈顶元素所在的位置。

  堆栈

  基址指针和堆栈指针有什么区别

  bp:基址寄存器(stack pointer),一般在函数中用来保存进入函数时的sp的栈顶基址。

  BP: 基数指针寄存器BP(base pointer)是一个寄存器,它的用途有点特殊,是和堆栈指针SP联合使用的,作为SP校准使用的,只有在寻找堆栈里的数据和使用个别的寻址方式时候才能用到。

  SP,BP一般与段寄存器SS 联用,以确定堆栈寄存器中某一单元的地址,SP用以指示栈顶的偏移地址,而BP可 作为堆栈区中的一个基地址,用以确定在堆栈中的操作数地址。

  bp为基址寄存器,一般在函数中用来保存进入函数时的sp的栈顶基址。

  每次子函数调用时,系统在开始时都会保存这个两个指针并在函数结束时恢复sp和bp的值。

  如下在函数进入时:

  push bp // 保存bp指针

  mov bp,sp // 将sp指针传给bp,此时bp指向sp的基地址。

  // 这个时候,如果该函数有参数,则[bp + 2*4]则是该子函数的第一个参数,[bp+3*4]则是该子函数的 第二个参数,以此类推,有多少个参数则[bp+(n-1)*4]

  。。。。

  。。。。

  函数结束时:

  mov sp,bp // 将原sp指针传回给sp

  pop bp // 恢复原bp的值。

  ret // 退出子函数

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分