滑稽光线 发表于 2023-6-30 09:37:05

栈问题

给定SS SP的时候 指针一开始不是在SP=SP+1的位置吗 那为什么3.11说栈空的时候要sp=sp+2 栈不是每时每刻都是空的吗 要不然为什么要pop?

歌者文明清理员 发表于 2023-6-30 09:45:15

Code?

滑稽光线 发表于 2023-6-30 09:51:01

歌者文明清理员 发表于 2023-6-30 09:45
Code?

这不是理论吗。。

歌者文明清理员 发表于 2023-6-30 10:01:48

滑稽光线 发表于 2023-6-30 09:51
这不是理论吗。。

在汇编语言中,SS和SP是用来操作栈的寄存器。当执行指令PUSH或者POP时,栈指针SP会发生变化。

首先,让我们来解释一下PUSH和POP指令的原理:


[*]PUSH指令:将数据压入栈中。它的操作是将数据存放在当前栈指针指向的内存单元,然后将 栈指针SP减小(SP=SP-1)。

[*]POP指令:将数据从栈中弹出。它的操作是将栈指针SP增加(SP=SP+1),并将栈顶的数据取 出。


现在回答你的问题:


[*]当执行PUSH指令时,栈指针SP会减小,因为数据被存放在当前栈指针所指向的内存单元,所 以栈指针不会在PUSH指令后立即增加。也就是说,指针一开始并不是在SP=SP+1的位置。

[*]关于3.11中提到的栈空的情况,如果栈中没有数据可以弹出(即栈为空),在执行POP指令时,仍然会执行栈指针的增加操作(SP=SP+1)。这是因为栈指针在POP指令之前已经指向了一个无效的内存位置,所以需要将栈指针SP增加,使其指向一个有效的内存位置。


总结起来,栈在某些情况下可能为空,但仍然需要执行POP指令来处理栈指针的移动,以维护正 确的堆栈结构。这就是为什么在栈空的情况下要执行sp=sp+2的原因,其中2表示栈元素的大小(假设为两个字节)。

希望以上解答能够解决你的疑问!如果还有其他问题,请随时提问。
页: [1]
查看完整版本: 栈问题