早教吧作业答案频道 -->其他-->
关于相对基址变址寻址,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,都不会影响堆栈的工作.
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堆...的网友还看了以下:
1.某+3价金属元素的相对原子质量为52,则它的硫酸盐的式量为.怎么算?2.已知AB两种化合物由X 2020-04-08 …
用将新鲜的韭黄或者蒜黄做色素的提取和分离实验,几分钟后滤纸条上不能呈现的色素带名称是?答案是叶绿素 2020-06-29 …
以下是果蝇产生眼色素B和D的反应:底物A色素B底物C色素D野生的果蝇有两种色素,眼睛为红褐色。缺乏色 2020-11-22 …
在第二次世界大战中,抗生素()拯救了成千上万士兵的生命,当时被誉为与原子弹、雷达齐名的三大发明之一. 2020-12-06 …
在第二次世界大战中,抗生素()拯救了成千上万士兵的生命,当时被誉为与原子弹、雷达齐名的三大发明之一. 2020-12-06 …
你有坐过山车或高空荡秋千的经历吗?当身体悬空时,你会心跳加快、呼吸急促,肌肉紧绷甚至大声呐喊吗,这是 2020-12-19 …
果蝇产生眼色素B和D的代谢反应如下:野生型果蝇(显性纯合子)有B和D两种色素,眼为红褐色,缺色素B的 2021-01-12 …
7.铁路目前穿越市区的影响因素最可能是A.经济因素B.社会因素C.行政因素D.历史因素为何会是历史因 2021-01-18 …
人体中哪些激素是蛋白质(高中生物)我知道的有胰岛素,生长激素,还有其他的吗?(指其化学本质为蛋白质, 2021-02-02 …
孕妇可以吃维生素b吗 2021-04-25 …