私はアセンブリを学習していますが、理解できない行が含まれているこの関数があります。
. globl
. text
factR:
cmpl $0 ,4(% esp )
jne cont
movl $1 ,%eax
ret
cont :
movl 4(%esp),%eax
decl %eax
pushl %eax // (1)
call factR // (2)
addl $4,%esp // (3)
imull 4(%esp),%eax
ret
それに対応するCコードは次のとおりです。
int factR ( int n ) {
if ( n != 0 )
return n;
else
return n ∗ factR ( n − 1 );
}
数字でマークされた行についてはよくわかりません。
pushl %eax
%eax
:の内容を 入れるという意味%esp
ですか?したがって、を呼び出します
factR()
。その結果は、%esp
ここに戻って次の指示に戻ったときに発生しますか?addl $4,%esp
これについてはよくわかりませんが、格納されている番号に%esp
4を追加しますか、それとも次の番号などを取得するためにポインタに4を追加しますか?