汇编语言为C代码?

时间:2017-04-05 03:25:27

标签: recursion assembly

我正在试图找出这个汇编代码块正在做什么:

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寄存器在做什么

1 个答案:

答案 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的拼写错误。启发我。