user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<a>:
  endbr64
  mov    %esi,%eax
  test   %edi,%edi
  jle    L341
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
L89:
  lea    -0x1(%rdi),%ebx
  mov    %ebx,0xc(%rsp)
  test   %eax,%eax
  jg     L375
  mov    0xc(%rsp),%ecx
  test   %ecx,%ecx
  je     L363
  xor    %eax,%eax
L150:
  mov    0xc(%rsp),%edx
L390:
  lea    -0x1(%rdx),%edi
  mov    %edi,0x8(%rsp)
  test   %eax,%eax
  jg     L59
  mov    0x8(%rsp),%edx
  test   %edx,%edx
  je     L67
  xor    %eax,%eax
L440:
  mov    0x8(%rsp),%edx
L23:
  lea    -0x1(%rdx),%edi
  mov    %edi,0x4(%rsp)
  test   %eax,%eax
  jg     L395
  mov    0x4(%rsp),%eax
  test   %eax,%eax
  je     L298
  xor    %eax,%eax
L53:
  mov    0x4(%rsp),%edx
L107:
  lea    -0x1(%rdx),%r12d
  test   %eax,%eax
  jg     L237
  test   %r12d,%r12d
  je     L103
  xor    %eax,%eax
L310:
  mov    %r12d,%edx
L101:
  lea    -0x1(%rdx),%ebp
  test   %eax,%eax
  jg     L270
  test   %ebp,%ebp
  je     L362
  xor    %eax,%eax
L393:
  mov    %ebp,%edx
L70:
  lea    -0x1(%rdx),%ebx
  test   %eax,%eax
  jg     L445
  test   %ebx,%ebx
  je     L430
  xor    %eax,%eax
L382:
  mov    %ebx,%ecx
L305:
  lea    -0x1(%rcx),%r15d
  test   %eax,%eax
  jg     L79
  test   %r15d,%r15d
  je     L26
  xor    %eax,%eax
L421:
  mov    %r15d,%esi
L167:
  lea    -0x1(%rsi),%r14d
  test   %eax,%eax
  jg     L78
  test   %r14d,%r14d
  je     L72
  xor    %eax,%eax
L235:
  mov    %r14d,%r8d
L447:
  lea    -0x1(%r8),%r13d
  test   %eax,%eax
  jg     L42
  test   %r13d,%r13d
  je     L335
  xor    %esi,%esi
L263:
  mov    %r13d,%edi
  call   <a>
  mov    %r13d,%r8d
  sub    $0x1,%r8d
  jne    L447
  add    $0x1,%eax
L28:
  mov    %r14d,%esi
  sub    $0x1,%esi
  jne    L167
  add    $0x1,%eax
L38:
  mov    %r15d,%ecx
  sub    $0x1,%ecx
  jne    L305
  add    $0x1,%eax
L191:
  sub    $0x1,%ebx
  mov    %ebx,%edx
  jne    L70
  add    $0x1,%eax
L378:
  mov    %ebp,%edx
  sub    $0x1,%edx
  jne    L101
  add    $0x1,%eax
L261:
  mov    %r12d,%edx
  sub    $0x1,%edx
  jne    L107
  add    $0x1,%eax
L437:
  mov    0x4(%rsp),%edx
  sub    $0x1,%edx
  jne    L23
  add    $0x1,%eax
L159:
  mov    0x8(%rsp),%edx
  sub    $0x1,%edx
  jne    L390
  add    $0x1,%eax
L31:
  mov    0xc(%rsp),%edi
  sub    $0x1,%edi
  jne    L89
  add    $0x18,%rsp
  add    $0x1,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  cs nopw 0x0(%rax,%rax,1)
L335:
  mov    $0x2,%eax
  jmp    L28
  nopw   0x0(%rax,%rax,1)
L72:
  mov    $0x2,%eax
  jmp    L38
  nopw   0x0(%rax,%rax,1)
L42:
  lea    -0x1(%rax),%esi
  mov    %r8d,%r13d
  jmp    L263
  nopl   0x0(%rax,%rax,1)
L26:
  mov    $0x2,%eax
  jmp    L191
  nopw   0x0(%rax,%rax,1)
L78:
  sub    $0x1,%eax
  mov    %esi,%r14d
  jmp    L235
  nopl   0x0(%rax,%rax,1)
L430:
  mov    $0x2,%eax
  jmp    L378
  nopw   0x0(%rax,%rax,1)
L79:
  sub    $0x1,%eax
  mov    %ecx,%r15d
  jmp    L421
  nopl   0x0(%rax,%rax,1)
L362:
  mov    $0x2,%eax
  jmp    L261
  nopw   0x0(%rax,%rax,1)
L445:
  sub    $0x1,%eax
  mov    %edx,%ebx
  jmp    L382
  nopw   0x0(%rax,%rax,1)
L103:
  mov    $0x2,%eax
  jmp    L437
  nopw   0x0(%rax,%rax,1)
L270:
  sub    $0x1,%eax
  mov    %edx,%ebp
  jmp    L393
L298:
  mov    $0x2,%eax
  jmp    L159
L237:
  sub    $0x1,%eax
  mov    %edx,%r12d
  jmp    L310
L67:
  mov    $0x2,%eax
  jmp    L31
L395:
  mov    %edx,0x4(%rsp)
  sub    $0x1,%eax
  jmp    L53
L363:
  add    $0x18,%rsp
  mov    $0x2,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L59:
  mov    %edx,0x8(%rsp)
  sub    $0x1,%eax
  jmp    L440
L375:
  mov    %edi,0xc(%rsp)
  sub    $0x1,%eax
  jmp    L150
L341:
  add    $0x1,%eax
  ret
```

assistant: ```c
int a(int m, int n) {
  if (m <= 0) {
    return n + 1;
  } else {
    if (n <= 0) {
      return a(m - 1, 1);
    } else {
      return a(m - 1, a(m, n - 1));
    }
  }
}
```