谁能跟我讲一下进栈为什么要SP减2 出栈为什么是SP+2?

如题所述

堆栈的两条操作指令PUSH(进栈)、POP(出栈),其指令格式为:
PUSH OPD
POP OPD
其中OPD是16位的操作数,可以是寄存器或存储器操作数
而内存空间(包括栈空间)是以字节(8位)为单位进行存储的,所以无论进栈或出栈,都要使用栈空间的两个字节。即在做进栈时,其栈指针(SP)要SP-2,出栈时,SP要SP+2
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-06-19
这是8086/8088对堆栈操作的规定,它规定堆栈必须以字(也就是16位)为单位,即不管进栈还是出栈,操作数都是16位的,而一个存储单元只有8位,所以一次堆栈操作,是对两个存储单元进行的;另外,8086/8088的堆栈是向下生长型的,即进栈时堆栈指针sp递减,出栈时sp递增,sp始终指向最后一个进入堆栈的信息所在的单元,所以对于8086/8088来说,进栈sp-2,出栈p+2
第2个回答  2011-06-20
8086cpu中,栈操作都是16位的,例如:push ax
我们不可以写成push al或push ah。
内存单元最小单位是字节,一个字节就占内存的一个小格,2字节也就是16位就占内存的二个小格,所以进栈减2 出栈+2。
第3个回答  2011-06-19
这是保存当前的PC值,其实这是是PC+1的指,就是下一条指令位置.
这样在函数调用返回时,可以回到该位置....

回补充:

其中37是堆栈位置,当加入了PC值后,栈顶自然就会变了..

stack: 37 ...
38:39 PC

你这个问题是单片机51的吧,51的PC寄存器是两个字节的,所以需要加2...

谁能跟我讲一下进栈为什么要SP减2 出栈为什么是SP+2?
POP OPD 其中OPD是16位的操作数,可以是寄存器或存储器操作数 而内存空间(包括栈空间)是以字节(8位)为单位进行存储的,所以无论进栈或出栈,都要使用栈空间的两个字节。即在做进栈时,其栈指针(SP)要SP-2,出栈时,SP要SP+2

汇编栈为空时 ss:sp 为什么要使sp指向最低成子单元-2 在压入数据 sp+...
任意时刻,SS:SP指向栈顶元素,当栈为空的时候,栈中没有元素,也就不存在栈定元素,所以SS:SP只能指向栈的最底部单元下面的单元,该单元的偏移地址为栈最底部的字单元的偏移地址+2。不知道你看懂了没 很好理解的

汇编语言SP=SP-2是什么意思
SP=SP-2的意思是将堆栈地址减2。汇编语言中本身是不会这样使用的,只是在描述诸如现场保护或中断服务的概念时介绍堆栈所起的作用,在中断服务程序结束,即执行到ret指令时,就会自动执行这条隐性指令,堆栈地址自动减2,将这两个存储单元中的地址复制给PC指针,程序返回到中断开始的地方继续运行。

汇编语言SP=SP
在8086模式下都是以字为单位,压栈一次sp就减2,出栈一次sp就加2. SP=SP-2,是指堆栈指针移动2个字节。不是一进站就要移动2个字节,这和你操作的数大小有关。如果你操作的书是字节型的(比如C语言中char型),那就只移动1个字节,即SP=SP-1;如果是双字节的(比如C语言中的int型),就是SP...

什么是段内转移
一、段内直接转移 具体格式:CALL 过程名 此时CS不入栈,IP的内栈入栈,入栈后再将加上目的地址与CALL指令的下一条指令的偏移地址之差值就可以转移到目的地址,详细过程:SP-2=>SP;将堆栈指针SP减2 (SP)<=IP;将IP进栈 IP+偏移地址之差;转到目的地址 二、段内间接转移 具体格式:CALL ...

POP SP指令
出栈是先弹出数据,在把指针-1

汇编里的"PUSH"和"POP"起了什么功能,,谁能用通俗点的话告诉我吗??
(SP)-2,((SP))<-OPRD。先修改堆栈指针SP(压入时为自动减2),然后,将指定的操作数送入新的栈顶位置。汇编里的"POP"指令的功能是实现将一个寄存器中的数据弹出栈操作。POP的操作过程是:将堆栈段中当前SS:SP所指的字内容弹出到某个寄存器或段寄存器或内存单元。再 SP←SP+2。

出栈后栈内的内容是消失了还是放在栈内,书上怎么出栈后,指针SP的位置+...
然后将SP指向的地址中的值读取到寄存器,其中n为数据宽度,任何时候SP始终指向有效数据上面的空位置上,压栈弹栈后修正指针,而弹栈其实就是将指针下移,使得比指针以上的低地址空间成为无效数据,被释放的地址中的数据不需要特地去删除,下次压栈会覆盖掉的。(见示意图,excel临时绘制)...

汇编语言中03B进栈后为什么变成0FF3B啊?
进栈出栈每次SP加或减2,说明占用两个字节,而您的03B只占一个字节,进栈时自动添加另外一个字节0FF,所以您看到的就是0FF3B。明白?

简述51单片机堆栈进栈和出栈操作规则?
和pop保护和恢复现场)其中入栈时先SP+1再将内容压入当前SP所指示的堆栈单元 中,出栈则先将SP所指示的内部ram单元中内容送入直接地址寻址的单元中,再将 SP减1.2.中断允许寄存器的功能是控制CPU对中断的开放和屏蔽以及每个中断源是否允许 中断结构包括EA(CPU中断总允许位),ES(串行口中断允许位)...

相似回答