英語それは私の最初の言語ではないので、私は間違っていくつかの単語を間違えて綴る場合。私はスタックにいくつかの問題を抱えています。私がここに入れるコードはすべて完璧に動作します。誰かが私にこのコードのスタックを説明できますか?
このコードは、たとえば簡単ですが、私はそのスタックを理解しています。
.globl f f: push %ebx movl 8(%esp), %eax movl 12(%esp), %ebx addl %ebx, %eax ret
STACK
------- VAR Y --> ESP + 12 ------- VAR X --> ESP + 8 ------- RET --> RETURN ------- %EBX --> %ESP -------
しかし、このコードで私はいくつかのトン
.code32 .globl f f: pushl %ebx movl 8(%esp), %ebx subl $8, %esp # Creo posto nella stack per i parametri movl $1, (%esp) movl $2, 4(%esp) call a addl %ebx, %eax addl $8, %esp #Tolgo posto nella stack popl %ebx ret
完全にコードの仕事をしましたが、私はそれについて多くの質問をしました?。どこで%ebxとスタックがスタックにありますか? ASMの
コードはCでtransalted:
int f(int x){ return x + g(y,z); }
をそして、これは私が作ったスタックである
STACK
-------- 8(%esp) --> x parameter of function f -------- 4(%esp) --> z parameter of function g -------- (%esp) --> y parameter of funcion g --------
そこで質問が今どこ%のEBXであり、このスタックを今すぐ復帰しますか?