我看到push ecx
的代码,我不知道它的用途。它是否会将ecx的值更改为其他内容?
答案 0 :(得分:14)
它在堆栈上推送ecx
的值。 ecx
是一个x86 CPU寄存器,可以在现代x86 CPU上保存一定数量的位(32或64(当前称为rcx
))。
调用堆栈分为堆栈帧。调用函数时会创建堆栈帧,将参数推送到传递给函数的堆栈上,然后执行该函数。在函数运行时,使用push
和pop
将本地函数变量存储在堆栈中。 push
将内容放入堆栈,而pop
将最后一个放在其上的内容放回。
你必须想象堆栈就像一堆盘子,你把它放在上面,(推)然后你再拿掉那个(pop),然后你就可以到达下面的下一个。
导致当前正在运行的函数的函数都在这个堆栈上,如果你愿意,可以坐在“下面”,当前函数堆栈框架。当前函数返回时,它会从堆栈弹出(堆栈帧被破坏),调用函数可以从中断处继续。
为了便于解释,我简化了一些比特。