user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<acker>:
  endbr64
  test   %edi,%edi
  je     L318
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
L51:
  lea    -0x1(%rdi),%eax
  mov    %eax,0xc(%rsp)
  test   %esi,%esi
  jne    L353
  mov    0xc(%rsp),%edx
  test   %edx,%edx
  je     L39
L278:
  mov    0xc(%rsp),%eax
L322:
  lea    -0x1(%rax),%ecx
  mov    %ecx,0x8(%rsp)
  test   %esi,%esi
  jne    L296
  mov    0x8(%rsp),%eax
  test   %eax,%eax
  je     L415
L42:
  mov    0x8(%rsp),%eax
L345:
  lea    -0x1(%rax),%r14d
  test   %esi,%esi
  jne    L168
  test   %r14d,%r14d
  je     L179
L215:
  mov    %r14d,%eax
L84:
  lea    -0x1(%rax),%r13d
  test   %esi,%esi
  jne    L183
  test   %r13d,%r13d
  je     L334
L144:
  mov    %r13d,%eax
L18:
  lea    -0x1(%rax),%edx
  test   %esi,%esi
  jne    L265
  test   %edx,%edx
  je     L146
L225:
  mov    %edx,%eax
L437:
  lea    -0x1(%rax),%r15d
  test   %esi,%esi
  jne    L433
  test   %r15d,%r15d
  je     L359
L349:
  mov    %r15d,%eax
L213:
  lea    -0x1(%rax),%r12d
  test   %esi,%esi
  jne    L258
  test   %r12d,%r12d
  je     L342
L287:
  mov    %r12d,%eax
L392:
  lea    -0x1(%rax),%ebp
  test   %esi,%esi
  jne    L259
  test   %ebp,%ebp
  je     L94
L330:
  mov    %ebp,%eax
L307:
  lea    -0x1(%rax),%ebx
  test   %esi,%esi
  jne    L241
  test   %ebx,%ebx
  je     L361
L1:
  mov    %ebx,%edi
  mov    %edx,0x4(%rsp)
  call   <acker>
  mov    0x4(%rsp),%edx
  mov    %eax,%esi
  mov    %ebx,%eax
  sub    $0x1,%eax
  jne    L307
  add    $0x1,%esi
L27:
  mov    %ebp,%eax
  sub    $0x1,%eax
  jne    L392
  add    $0x1,%esi
L116:
  mov    %r12d,%eax
  sub    $0x1,%eax
  jne    L213
  add    $0x1,%esi
L403:
  mov    %r15d,%eax
  sub    $0x1,%eax
  jne    L437
  add    $0x1,%esi
L283:
  mov    %edx,%eax
  sub    $0x1,%eax
  jne    L18
  add    $0x1,%esi
L133:
  mov    %r13d,%eax
  sub    $0x1,%eax
  jne    L84
  add    $0x1,%esi
L337:
  mov    %r14d,%eax
  sub    $0x1,%eax
  jne    L345
  add    $0x1,%esi
L409:
  mov    0x8(%rsp),%eax
  sub    $0x1,%eax
  jne    L322
  add    $0x1,%esi
L91:
  mov    0xc(%rsp),%edi
  sub    $0x1,%edi
  jne    L51
  add    $0x18,%rsp
  lea    0x1(%rsi),%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nop
L94:
  mov    $0x2,%esi
  jmp    L116
  nopw   0x0(%rax,%rax,1)
L146:
  mov    $0x2,%esi
  jmp    L133
  nopw   0x0(%rax,%rax,1)
L361:
  mov    $0x2,%esi
  jmp    L27
  nopw   0x0(%rax,%rax,1)
L342:
  mov    $0x2,%esi
  jmp    L403
  nopw   0x0(%rax,%rax,1)
L359:
  mov    $0x2,%esi
  jmp    L283
  nopw   0x0(%rax,%rax,1)
L334:
  mov    $0x2,%esi
  jmp    L337
  nopw   0x0(%rax,%rax,1)
L179:
  mov    $0x2,%esi
  jmp    L409
  nopw   0x0(%rax,%rax,1)
L241:
  sub    $0x1,%esi
  mov    %eax,%ebx
  jmp    L1
  nopw   0x0(%rax,%rax,1)
L415:
  mov    $0x2,%esi
  jmp    L91
  nopw   0x0(%rax,%rax,1)
L259:
  sub    $0x1,%esi
  mov    %eax,%ebp
  jmp    L330
  nopw   0x0(%rax,%rax,1)
L39:
  add    $0x18,%rsp
  mov    $0x2,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L258:
  sub    $0x1,%esi
  mov    %eax,%r12d
  jmp    L287
  nopl   0x0(%rax,%rax,1)
L433:
  sub    $0x1,%esi
  mov    %eax,%r15d
  jmp    L349
  nopl   0x0(%rax,%rax,1)
L265:
  sub    $0x1,%esi
  mov    %eax,%edx
  jmp    L225
  nopw   0x0(%rax,%rax,1)
L183:
  sub    $0x1,%esi
  mov    %eax,%r13d
  jmp    L144
  nopl   0x0(%rax,%rax,1)
L168:
  sub    $0x1,%esi
  mov    %eax,%r14d
  jmp    L215
  nopl   0x0(%rax,%rax,1)
L318:
  lea    0x1(%rsi),%eax
  ret
  nopl   0x0(%rax)
L296:
  mov    %eax,0x8(%rsp)
  sub    $0x1,%esi
  jmp    L42
  nopl   0x0(%rax)
L353:
  mov    %edi,0xc(%rsp)
  sub    $0x1,%esi
  jmp    L278
```

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