user: 请将以下的汇编代码转换成C语言代码：

```asm
<fib_recur>:
  endbr64
  test   %edi,%edi
  je     L502
  mov    %edi,%eax
  cmp    $0x1,%edi
  je     L143
  push   %r15
  sub    $0x2,%eax
  xor    %r8d,%r8d
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x58,%rsp
  mov    %eax,0x14(%rsp)
  mov    %r8,0x20(%rsp)
L63:
  mov    0x14(%rsp),%edi
  mov    %edi,%eax
  add    $0x1,%eax
  je     L294
  cmp    $0x1,%eax
  je     L456
  lea    -0x1(%rdi),%eax
  xor    %ecx,%ecx
  mov    %eax,0x18(%rsp)
  mov    %rcx,0x28(%rsp)
L62:
  mov    0x18(%rsp),%edi
  mov    %edi,%eax
  add    $0x1,%eax
  je     L494
  cmp    $0x1,%eax
  je     L505
  lea    -0x1(%rdi),%eax
  xor    %edx,%edx
  mov    %eax,0x1c(%rsp)
  mov    %rdx,0x30(%rsp)
L178:
  mov    0x1c(%rsp),%edi
  mov    %edi,%eax
  add    $0x1,%eax
  je     L337
  cmp    $0x1,%eax
  je     L464
  xor    %edx,%edx
  lea    -0x1(%rdi),%esi
  mov    %rdx,0x38(%rsp)
  mov    %esi,%edx
L130:
  mov    %edx,%eax
  add    $0x1,%eax
  je     L403
  cmp    $0x1,%eax
  je     L173
  xor    %ecx,%ecx
  mov    %edx,0x40(%rsp)
  lea    -0x1(%rdx),%r8d
  mov    %rcx,0x8(%rsp)
  mov    %r8d,%r15d
L44:
  mov    %r15d,%eax
  add    $0x1,%eax
  je     L190
  cmp    $0x1,%eax
  je     L467
  lea    -0x1(%r15),%r12d
  xor    %ecx,%ecx
  mov    %r15d,%esi
L207:
  mov    %r12d,%eax
  add    $0x1,%eax
  je     L28
  cmp    $0x1,%eax
  je     L121
  xor    %ebx,%ebx
  lea    -0x1(%r12),%ebp
  mov    %r12d,%edx
  mov    %rbx,%r12
L186:
  mov    %ebp,%eax
  add    $0x1,%eax
  je     L463
  cmp    $0x1,%eax
  je     L269
  mov    %ebp,%eax
  lea    -0x1(%rbp),%r15d
  xor    %r14d,%r14d
  mov    %rcx,%rbp
  mov    %eax,%ecx
L376:
  mov    %r15d,%ebx
  add    $0x1,%ebx
  je     L169
  cmp    $0x1,%ebx
  je     L378
  mov    %r15d,0x44(%rsp)
  xor    %r13d,%r13d
  mov    %esi,%r15d
L306:
  lea    -0x1(%rbx),%edi
  mov    %ecx,0x4c(%rsp)
  mov    %edx,0x48(%rsp)
  call   <fib_recur>
  mov    0x48(%rsp),%edx
  mov    0x4c(%rsp),%ecx
  add    %rax,%r13
  sub    $0x2,%ebx
  je     L262
  cmp    $0x1,%ebx
  jne    L306
  mov    %r15d,%esi
  mov    0x44(%rsp),%r15d
  mov    $0x1,%eax
L427:
  add    %rax,%r13
  add    %r13,%r14
  test   %r15d,%r15d
  je     L539
  cmp    $0x1,%r15d
  jne    L169
L378:
  mov    %ecx,%eax
  add    $0x1,%r14
  mov    %rbp,%rcx
  mov    %eax,%ebp
  add    %r14,%r12
  test   %ebp,%ebp
  je     L440
L103:
  cmp    $0x1,%ebp
  jne    L463
L269:
  mov    %r12,%rbx
  mov    %edx,%r12d
  add    $0x1,%rbx
L60:
  add    %rbx,%rcx
  test   %r12d,%r12d
  jne    L128
  mov    %esi,%r15d
  mov    %rcx,%r14
  add    %r14,0x8(%rsp)
  mov    0x8(%rsp),%rcx
  test   %r15d,%r15d
  jne    L279
L72:
  mov    0x40(%rsp),%edx
  add    %rcx,0x38(%rsp)
  test   %edx,%edx
  je     L509
L527:
  cmp    $0x1,%edx
  je     L173
L403:
  sub    $0x2,%edx
  jmp    L130
L463:
  sub    $0x2,%ebp
  jmp    L186
L128:
  cmp    $0x1,%r12d
  jne    L28
L121:
  mov    %rcx,%r14
  mov    %esi,%r15d
  add    $0x1,%r14
  add    %r14,0x8(%rsp)
  mov    0x8(%rsp),%rcx
  test   %r15d,%r15d
  je     L72
L279:
  cmp    $0x1,%r15d
  je     L388
L190:
  sub    $0x2,%r15d
  jmp    L44
L28:
  sub    $0x2,%r12d
  jmp    L207
L539:
  mov    %ecx,%eax
  mov    %rbp,%rcx
  add    %r14,%r12
  mov    %eax,%ebp
  test   %ebp,%ebp
  jne    L103
L440:
  mov    %r12,%rbx
  mov    %edx,%r12d
  jmp    L60
  nopw   0x0(%rax,%rax,1)
L262:
  mov    %r15d,%esi
  xor    %eax,%eax
  mov    0x44(%rsp),%r15d
  jmp    L427
L467:
  mov    0x8(%rsp),%rcx
L388:
  mov    0x40(%rsp),%edx
  add    $0x1,%rcx
  add    %rcx,0x38(%rsp)
  test   %edx,%edx
  jne    L527
L509:
  mov    0x1c(%rsp),%ecx
  mov    0x38(%rsp),%rdx
  add    %rdx,0x30(%rsp)
  test   %ecx,%ecx
  jne    L38
L42:
  mov    0x30(%rsp),%rdx
  add    %rdx,0x28(%rsp)
  mov    0x18(%rsp),%edx
  test   %edx,%edx
  jne    L517
L365:
  mov    0x28(%rsp),%rcx
  jmp    L200
  nopl   0x0(%rax)
L169:
  sub    $0x2,%r15d
  jmp    L376
L173:
  mov    0x38(%rsp),%rdx
  mov    0x1c(%rsp),%ecx
  add    $0x1,%rdx
  add    %rdx,0x30(%rsp)
  test   %ecx,%ecx
  je     L42
L38:
  cmpl   $0x1,0x1c(%rsp)
  je     L464
L337:
  subl   $0x2,0x1c(%rsp)
  jmp    L178
L464:
  mov    0x30(%rsp),%rdx
  add    $0x1,%rdx
  add    %rdx,0x28(%rsp)
  mov    0x18(%rsp),%edx
  test   %edx,%edx
  je     L365
L517:
  cmpl   $0x1,0x18(%rsp)
  je     L505
L494:
  subl   $0x2,0x18(%rsp)
  jmp    L62
L505:
  mov    0x28(%rsp),%rcx
  add    $0x1,%rcx
L200:
  mov    0x14(%rsp),%eax
  add    %rcx,0x20(%rsp)
  test   %eax,%eax
  je     L112
  cmpl   $0x1,0x14(%rsp)
  jne    L294
L456:
  mov    0x20(%rsp),%r8
  add    $0x1,%r8
L260:
  add    $0x58,%rsp
  mov    %r8,%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L294:
  subl   $0x2,0x14(%rsp)
  jmp    L63
L502:
  xor    %r8d,%r8d
L76:
  mov    %r8,%rax
  ret
L143:
  mov    $0x1,%r8d
  jmp    L76
L112:
  mov    0x20(%rsp),%r8
  jmp    L260
```

assistant: ```c
unsigned long long fib_recur(int n) {
  if (n == 0) {
    return 0;
  } else if (n == 1) {
    return 1;
  } else {
    return fib_recur(n - 1) + fib_recur(n - 2);
  }
}
```