我在汇编代码中有一个方法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
?
如果有人能向我解释这个功能,我会很高兴。