汇编语言中,关于入栈出栈的理解。数据出栈后会被清掉吗,它还在内存单元中吗

最近在看王爽的那本汇编语言,有些知识点不是很理解,

“pop操作前的栈顶元素,1000CH处的2266H依然存在,但是,它已不在桟中” 这句怎么理解?
桟不就是相当于一段内存单元的别名吗,既然数据还在这段内存中,为什么它“已不在桟中”呢,求解释~

数据出栈后在没有新的数据进栈前它在内存单元中的值没变,但你几乎无法常规读取(除非你知道SS及SP)。追问

第一次执行pop ax 后,1000CH处的数据2266H出栈,此时sp=sp+2,但是我还可以再次取1000CH处的2266H这个值吗,即
pop ax
mov bx,sp
sub bx,2
mov sp,bx //使sp重新指回1000CH处
pop bx //再取一遍2266H放到bx中

(可能写法上不正确,但表达的大概就是这个意思) 我可以这样再次取值吗?

追答

你的理解是对的!可对SP直接进行操作。。。 见截图。

但是,既然数据已经取出,谁还会再次到堆栈里去如此折腾?

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-12-12
因为只是top指针移动,数据在那个内存单元中,只是用堆栈指针无法访问了 如果下次存储 那么就会重写那个单元

...出栈的理解。数据出栈后会被清掉吗,它还在内存单元中吗
数据出栈后在没有新的数据进栈前它在内存单元中的值没变,但你几乎无法常规读取(除非你知道SS及SP)。

汇编语言中,出栈后 出栈的那个数值在栈中会被清零吗?
不会被清零。汇编语言中,出栈是通过POP指令来实现的,首先看一下Intel手册中对于pop指令的描述:大致意思如下:Pop指令从栈顶加载值到目标操作数指定的位置,然后增加栈顶指针。目标操作数可以是一个通用寄存器,内存位置或者段寄存器。可以看到,手册中并没有提到出栈后Pop要清空原有位置的值。因为这是不...

汇编语言中压入堆栈是什么意思
就是把数据暂时存放到栈中的意思.例:PUSH AX PUSH BX 等等,就是把AX,BX寄存器中的数据存入到栈中.栈是一个暂时存储数据的内存空间,它具有"后进先出"的特性.补充:栈的作用是很大的.比如,可以用来传递参数,用来暂时存放寄存器中的数据,让寄存器再去做别的事,在WIN32ASM中,还是开辟局部变量的主要空间...

一道汇编语言题,望一步一步解释下出栈和入栈到底是怎么进行的...
一般是没有这样的代码的!在有EAX的系统中高位为AH低位为AL,不过没有关系,系统也会认识,这就是windows的向下兼容。ax是早期的16的操作系统用的,EAX是现在大家用的XP,还有64位的WIN7.按您的意思...代码分析如下:PUSH EAX 入栈EAX,需4字节,故SP-4 00123456H入栈 PUSH AX 需2字节...

汇编语言中数据段、代码段、堆栈段的定义及用法?
在汇编语言中,每一个段都有其特定的职责,而正确理解和运用它们,是编写高效、可维护代码的关键。通过深入理解数据段、代码段和堆栈段的内在逻辑,程序员可以更好地掌控程序的内存布局,优化计算过程,提升程序性能。如果你渴望了解更多汇编语言的技巧和知识,记得关注我们的公众号"上下求索电子er",那里有...

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

汇编语言中Push ax指令执行后,ax的原内容在ax寄存器中还保存么?
AX原内容入栈了,可以理解为放到一个专用的存储器里了,出栈后再去出来即可。

汇编语言的几个简单指令,并附上中文解释
3.不允许在两个存储单元直接传送数据 4.不允许在两个段寄存器间直接传送信息 PUSH 入栈指令及POP出栈指令: 堆栈操作是以"后进先出"的方式进行数据操作.PUSH SRC \/\/Word 入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器. 入栈时高位字节先入栈,低位字节后入栈....

汇编中movsp,#60H是什么意思
2. 当进行入栈操作时,SP的值会减2;而出栈操作后,SP的值会增加2。3. 在汇编指令`mov sp,#60H`中,#60H表示的是一个立即数,它指定了堆栈的大小。在这里,60H代表的是60个十六进制单位,换算成字节就是60字节。4. 执行这条`mov sp,#60H`指令后,堆栈的长度被设置为60字节。然而,在...

8086汇编语言 如果对一个空栈 去出栈 会产生什么结果 还有为什么我去pop...
空栈出栈会栈顶超界

相似回答