早教吧 育儿知识 作业答案 考试题库 百科 知识分享

关于相对基址变址寻址,SP堆栈指示器.它始终是指向栈顶元素.而BP不是.为什么不用SP而用BP呢?难道就是因为BP是基址寄存器.BP能指向栈顶吗?SP又有什么用?3f$Y5`(%

题目详情
关于相对基址变址寻址,SP堆栈指示器.它始终是指向栈顶元素.而BP不是.为什么不用SP而用BP呢?难道就是因为BP是基址寄存器.BP能指向栈顶吗?SP又有什么用?3 f$ Y5 `( %
▼优质解答
答案和解析
SP是堆栈指针寄存器,专门用来维护堆栈的,诸如POP,PUSH,CALL等指令都是跟SP相关的,所以SP对于程序来说是应该是只读的,而实际上你可以手动设置SP的值.如果用SP作为基地址的话,会出错的.而BP是堆栈的基址指针,如果不使用段超越标志的话,BP实际上是SS:BP,就像SI默认是DS:SI ,DI默认是ES:DI,这是一样的道理.
BP在C语言程序中使用广泛,例如下面的C程序编译为汇编应该是这样
//C:
int sum(int a,int b )
{
DoSometing();
return a+b;
}
...//在其他的函数中
c=sum(1,2);
...
;ASM:
sum proc
push bp
mov bp,sp ;将sp的值送到bp,让bp指向栈顶
call DoSomething
mov ax,[bp+4] ;[bp+4] = a
add ax,[bp+6] ;[bp+6] = b
pop bp
ret 4
sum endp
...;在其他的函数中
mov ax,2 ;第二个参数
push ax
mov ax,1 ;第一个参数
push ax
call sum
mov addr_c,ax ;addr_c是我假定的c变量的地址.
...
从以上的例子看来,使用BP是正确的,而不应该是SP,SP是专用寄存器,不要动它为好.将它的值送给BP就行了,不管你之后执行了inc bp 还是 add bp,2,都不会影响堆栈的工作.
看了 关于相对基址变址寻址,SP堆...的网友还看了以下:

两个截面不同,长度相等的均匀铜棒接在电路中,两端的电压为U2.如图所示,两个截面不同,长度相等的均  2020-05-14 …

什么是常数?什么是常数项?不含有未知数的的项就是常数项比如2X+1中的1就是常数项常数就是数值不会  2020-05-14 …

阅读下面的材料,根据要求写一篇不少于800字的文章。王国维在清华国学院任教时,要求他的学生要做到“  2020-05-16 …

在繁忙的工作中,时间不知不觉地很快就过去了,这句话怎么说?正在写一篇文章,想表达上面这个意思,但不  2020-06-10 …

假定从198.16.0.0开始有大量连续的IP地址可用,现在4个组织A、B、C、D按照顺序依次申请  2020-06-12 …

色谱在其它条件不变得情况下,若柱长增加一倍,色谱峰的宽度为原色谱峰宽度的在其它条件不变得情况下,   2020-06-18 …

下列各项中,两个句子句式不同的是()3分A.是社稷之臣也萍水相逢,尽是他乡之客。B.然而不王者,未  2020-06-27 …

我还明白了不少道理,其中我最喜欢《》,因为它使我懂得了.学了本学期的课文,我认识了不少人物有()文  2020-06-29 …

为什么玻璃不溶于水玻璃的主要成分是硅酸钠等硅酸盐,那为什么硅酸钠溶于水而玻璃不溶呢?(我指的是大量  2020-07-21 …

列方程解应用题嗯嗯,有一道题偶不是很会,方程列出来了,就是解的时候好奇怪,希望学过的人交一下子哈,有  2020-12-15 …