-6

我看到代码,push ecx但我不知道它的用途。它是否将 ecx 的值更改为其他值?

4

1 回答 1

14

它将 的值压ecx入堆栈。 ecx是一个 x86 CPU 寄存器,它可以保存一定数量的位值(rcx现代 x86 CPU 上的 32 或 64(当时称为))。

调用栈被分成栈帧。调用函数时会创建堆栈帧,将传递给函数的参数压入堆栈,然后执行函数。当函数运行时,局部函数变量也通过使用push和存储在堆栈中poppush东西放在堆栈上,然后pop 把最后放在上面的东西拿走,退后

你必须把堆栈想象成一堆盘子,你把一个放在上面,(推)然后你再把同样的一个拿下来(弹出),然后你才能到达下面的下一个。

导致函数当前运行的函数都在这个堆栈上,如果你愿意,可以坐在当前函数堆栈框架的“下方”。当当前函数返回时,它会从堆栈中弹出(堆栈帧被破坏)并且调用者函数可以从它离开的地方继续。

为了这个解释,我已经简化了一些位。

于 2012-09-13T22:07:37.890 回答