BP指针和SP指针的区别?

CPU寄存器组中,指针寄存器BP和SP有什么区别?是不是BP指针可以访问堆栈中的任何数据,而SP指针只可以访问栈顶数据?

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 // 退出子函数
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-02-26
指针寄存器包括堆栈寄存器SP(stack pointer)和基数指针寄存器BP(base pointer),变
值寄存器包括源变址寄存器SI(source index)和目的变值寄存器DI(destination index)。这
4个寄存器都是16位寄存器,这些寄存器在运算过程中也可以用来存放操作数(只能
以字为单位),但经常的用途是在段内寻址时提供偏移地址,SP,BP一般与段寄存器SS
联用,以确定堆栈寄存器中某一单元的地址,SP用以指示栈顶的偏移地址,而BP可
作为堆栈区中的一个基地址,用以确定在堆栈中的操作数地址。SI,DI一般与段寄存器
DS联用,以确定数据段中某一存储单元的地址,SI,DI具有自动增量和自动减量的功能,
这一点使在串操作指令中用做变址非常方便,SI作为隐含的源变址DS联用,DI作为
隐含的目的变址和ES连用,从而达到在数据段和附加段中寻址的目的本回答被提问者和网友采纳
第2个回答  2006-09-27
sp指针是栈顶指针,BP指针是栈内的某一单元的地址
第3个回答  2006-09-27
受教了

BP指针和SP指针的区别?
CPU寄存器组中,指针寄存器BP和SP有什么区别?是不是BP指针可以访问堆栈中的任何数据,而SP指针只可以访问栈顶数据?解析:指针寄存器包括堆栈寄存器SP(stack pointer)和基数指针寄存器BP(base pointer),变 值寄存器包括源变址寄存器SI(source index)和目的变值寄存器DI(destination index)。这 4个寄存器都是16...

汇编中,BP,SP有何区别
SP--栈指针。在程序中只能通过push、pop、sub sp, n、add sp, n等指令来移动栈指针。BP--栈基址寄存器。当在栈中(1)开辟一定数量的空间用来存储数据或者(2)在主、子程序之间传递参数时会用到BP。比如,在程序的数据段中未分配变量单元,而你临时需要两个字单元,可以:sub sp,4 ---开...

汇编语言中“SP”“BP” “SI”“DI”的作用?
SP 是堆栈指针,当你使用PHSU语句的时候就发现有变化BP是辅助,在特殊时候用SI,DI是一组指针当你需要拷贝一组内存的数据的时候一般是SI是源数据指针,DI是目的地址指针CX是计数器。汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。...

汇编语言中,SP,BP ,SI,DI作用?
sp:表示栈顶指针,指向栈顶地址.与SS相配合使用.ss为栈段.bp:是基址指针,段地址默认在SS中.可以定位物理地址,比如:"mov ax,[bp+si+6]\/mov ax,[bp+di+6].DI:是目的变址寄存器.一般情况下与ds联用,来确定某个储存单元的地址.SI:是源变址寄存器,默认段地址和DI一样,在DS中.和DS联用.这...

在堆栈中 BP SP一般指向哪里?他们的名字叫什么
SP始终是指向栈顶的。。BP的指向其实没有什么要求,只是说明,如果不指明段地址的情况下,默认的段地址是SS,这说明了SP\/BP这两个寄存器都跟栈有关,一个指向栈顶,一个指向栈中的数据。。这样,对于栈来讲,栈顶的位置(SP)是不能轻易改变的,所以,如果我们要用到栈中的数据,就要是用BP了。

汇编语言寄存器都叫什么
SP:堆栈指针寄存器。BP:基址指针寄存器。SI:源变址寄存器。DI:目的变址寄存器。IP:指令指针寄存器。CS:代码段寄存器。DS:数据段寄存器。SS:堆栈段寄存器。ES:附加段寄存器 。OF:溢出标志,操作数超出机器能表示的范围表示溢出,溢出时为1。SF:符号标志记录运算结果的符号,结果负时为1。ZF:零...

一些汇编指令寄存器杂谈
通用寄存器: 包括AX、BX、CX、DX, SI、DI、SP和BP,用于存储数据和地址。指令指针: IP,负责指向待执行的指令地址。标志寄存器: FR,存储运算结果的标志信息。段寄存器: ES、CS、SS和DS,用于存储段地址,区分不同的内存区域。其中,eax寄存器实际上是一个32位寄存器,由AX(16位)、AH和AL(8位...

汇编语言每个专有名词的意思是什么啊?
指针寄存器:SP(堆栈指针),BP(基址指针)变址寄存器:SI(原地址),DI(目的地址)1、通用寄存器 数据寄存器,指针寄存器和变址寄存器统称为通用寄存器。这些寄存器除了各自专门用途外,它们均可用于传送和暂存数据,可以保存算术逻辑运算中的操作数和运算结果。(1)数据寄存器 数据寄存器主要用来保存操作数...

在汇编层面,什么是窄顶指针寄存器
寄存器EBP、ESP、BP和SP称为窄顶指针寄存器(PointerRegister)寄存器主要用于存放堆栈内存储单元的偏移量,用它们可实现多种存储器操作数的寻址方式(在第3章有详细介绍),为以不同的地址形式访问存储单元提供方便用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。

汇编语言寄存器都叫什么
EBP、ESP、BP和SP称为指针寄存器,主要用于存放堆栈内存储单元的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。指针寄存器不可分割成8位寄存器,作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。它们主要用于访问堆栈内的存储单元,并且规定:BP为基指针寄存器,用它可...

相似回答