程序集中的递归函数

时间:2017-10-26 02:03:29

标签: c recursion assembly

我在汇编代码中有一个方法fun_times

fun_times:
   pushq %rbp
   movq %rsp, %rbp
   subq $32, %rsp
   movq %rdi, -24(%rbp)
   movl %esi, -28(%rbp)
   cmpl $0, -28(%rbp)
   jne .L2
   movl $0, -4(%rbp)
   jmp .L3
.L2
   movl $0, -4(%rbp)
   jmp .L4
.L5
   movl -4(%rbp), %eax
   movslq %eax, %rdx
   movq -24(%rbp), %rax
   addq %rdx, %rax
   movzbl (%rax), %eax
   movsbl %al, %eax
   addl %eax, -8(%rbp)
   addl $1, -4(%rbp)
.L4
   movl -4(%rbp), %eax
   cmpl -28(%rbp), %eax
   jl .L5
   movl -28(%rbp), %eax
   leal -1(%rax), %edx
   movq -24(%rbp), %rax
   movl %edx, %esi
   movq %rax, %rdi
   call fun_times
   movl %eax, %eax
   movl -8(%rbp), %eax
   addl %edx, %eax
.L3:
   leave
   ret

我想知道fun_times做了什么,是否可以用C代码或伪代码编写它。此外,在堆栈上分配了多少字节,每个字节都为fun_times? 32?

最后,存储的结果(即返回值)在哪里? %eax

如果有人能向我解释这个功能,我会很高兴。

0 个答案:

没有答案