我正在学习汇编,我有这个函数,其中包含一些我不明白的行:
. 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 以获得下一个数字或类似的东西?