Assembly 推ecx做什么?

Assembly 推ecx做什么?,assembly,nasm,Assembly,Nasm,我看到带有push ecx的代码,我不知道它的用途。它是否将ecx的值更改为其他值?它将ecx的值推送到堆栈上ecx是一个x86CPU寄存器,它可以在现代x86CPU上保存一定数量的位值(32或64位(称为rcxthen) 调用堆栈被划分为堆栈帧。调用函数时会创建堆栈帧,将参数推送到堆栈上并传递给函数,然后执行函数。函数运行时,本地函数变量也通过使用push和pop存储在堆栈上push将某个东西放在堆栈上,然后pop将上一次放在堆栈上的东西拿回来 你必须把这堆盘子想象成一堆盘子,你把一个放在上面

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

它将
ecx的值推送到堆栈上
ecx
是一个x86CPU寄存器,它可以在现代x86CPU上保存一定数量的位值(32或64位(称为
rcx
then)

调用堆栈被划分为堆栈帧。调用函数时会创建堆栈帧,将参数推送到堆栈上并传递给函数,然后执行函数。函数运行时,本地函数变量也通过使用
push
pop
存储在堆栈上
push
将某个东西放在堆栈上,然后
pop
将上一次放在堆栈上的东西拿回来

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

导致当前正在运行的函数的函数都在此堆栈上,如果您愿意,它们位于当前函数堆栈框架的“下面”。当当前函数返回时,它将弹出堆栈(堆栈帧已销毁),调用方函数可以在其停止的位置继续


为了便于解释,我简化了一些内容。

与其在你的问题中加入无意识的复制粘贴,不如写一些你在哪些上下文中看到这条指令,以及你对汇编语言的了解。@HenningMakholm但这需要努力,我们不能这样做+我不相信OP不是巨魔。任何在汇编中看到push ecx的人都会看到几十条其他指令,如果不知道push的作用,这些指令同样神秘。无论如何,这个问题的唯一合法答案是RTFM。
ecx
总是32位,
rcx
将是x86-64位的等效值。@PaulR我在帖子上做了一个小编辑。:)@JaggedO'Neill我没有说
push
ecx
有任何堆栈帧的概念。我试图以堆栈框架为例来解释它们。这并不意味着它们总是共存。@TonyTheLion:关于问题中信息的缺乏,如果你问我,这是一个太多的例子了。。。无意冒犯,但我认为,如果把它与一堆盘子进行比较就足够了,在这些盘子里,你——相当合理地——忽略了索引访问的可能性。