关于“推”和堆栈的问题

时间:2010-01-25 13:51:23

标签: assembly stack push

如果你多次将某些东西推入堆栈(例如循环),堆栈是否会继续增长或者是否替换了之前的值?例如,重复推EDI 5次。堆栈有5个EDI吗?

3 个答案:

答案 0 :(得分:2)

堆栈不断增长,直到达到某个操作系统定义的限制。然后抛出异常。 PC上的此限制通常为256k甚至兆字节,以允许递归。

堆栈不保留类型,因此由于EDI是32位寄存器,在5次推送后,它将包含5个32位值,与EDI中的值相同

答案 1 :(得分:2)

  

堆栈是否继续增长

是。这就是为什么它被称为“堆栈”。这是一个非常基本的属性,因为它允许递归调用(子程序使用不同的参数调用自身)。

答案 2 :(得分:1)

什么都没有增长。每次推送时,堆栈指针寄存器都会递增(或递减,取决于CPU架构),因此它指向一个新的但现有的内存位置。

这通常被称为堆栈“增长”,但它与C中的说法完全相同:

int stack[100];
int sp = 0;
stack[sp++] = 42; // push

与上面的数组一样,CPU堆栈是固定大小的,当它耗尽时,会发生某种错误(再次依赖于体系结构)。