我正在试图找出这个汇编代码块正在做什么:
mystery:
.LFB0
testl %edi, %edi
je .L3
subq $8, %rsp
shrl $2, %edi
call mystery
addq $1, %rax
jmp .L2
.L3:
movl $l, %eax
ret
.L2:
addq $8, %rsp
ret
到目前为止,我将此作为C代码:
long mystery(unsigned n){
if(n==0)
return 1;
我知道这里有一个递归函数,而n!= 0但是我不明白%rsp寄存器在做什么
答案 0 :(得分:0)
这是我的猜测:
#include <inttypes.h>
int64_t mystery(int32_t n) {
if (n == 0) {
return 1;
}
return 1 + mystery(n / 4);
}
我不知道行中$l
是什么:
movl $l, %eax
所以我的上述解决方案假设它是$1
的拼写错误。启发我。