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

```asm
<maze_solve_helper>:
  endbr64
  push   %r15
  mov    %ecx,%r9d
  push   %r14
  push   %r13
  mov    %r8d,%r13d
  push   %r12
  mov    %rdi,%r12
  push   %rbp
  mov    %esi,%ebp
  push   %rbx
  mov    %edx,%ebx
  sub    $0x18,%rsp
  cmp    $0x28,%esi
  jne    L132
  cmp    $0x4f,%edx
  jne    L132
  movslq %esi,%r14
  movslq %edx,%r15
L106:
  lea    (%r14,%r14,8),%rax
  lea    (%rax,%rax,8),%rax
  add    %r12,%rax
  movb   $0x2e,(%rax,%r15,1)
  add    $0x18,%rsp
  mov    $0x1,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L132:
  test   %ebp,%ebp
  je     L0
  lea    -0x1(%rbp),%esi
  cmp    %r9d,%esi
  jne    L205
  cmp    %r13d,%ebx
  jne    L205
L0:
  cmp    %r9d,%ebp
  lea    -0x1(%rbx),%edx
  setne  %r10b
  cmp    %edx,%r13d
  jne    L128
  test   %r10b,%r10b
  jne    L128
L44:
  lea    0x1(%rbp),%esi
  cmp    %esi,%r9d
  jne    L164
  cmp    %r13d,%ebx
  jne    L164
L214:
  lea    0x1(%rbx),%edx
  cmp    %edx,%r13d
  jne    L229
  test   %r10b,%r10b
  jne    L229
L27:
  xor    %eax,%eax
L172:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L128:
  movslq %ebp,%r14
  movslq %edx,%rcx
  lea    (%r14,%r14,8),%rax
  lea    (%rax,%rax,8),%rax
  add    %r12,%rax
  cmpb   $0x23,(%rax,%rcx,1)
  je     L44
  mov    %ebx,%r8d
  mov    %ebp,%ecx
  mov    %ebp,%esi
  mov    %r12,%rdi
  mov    %r9d,0xc(%rsp)
  movslq %ebx,%r15
  mov    %r10b,0x8(%rsp)
  call   <maze_solve_helper>
  movzbl 0x8(%rsp),%r10d
  mov    0xc(%rsp),%r9d
  test   %eax,%eax
  jne    L106
  jmp    L44
  nopl   0x0(%rax,%rax,1)
L164:
  movslq %esi,%rax
  movslq %ebx,%r15
  lea    (%rax,%rax,8),%rax
  lea    (%rax,%rax,8),%rax
  add    %r12,%rax
  cmpb   $0x23,(%rax,%r15,1)
  je     L214
  mov    %ebx,%r8d
  mov    %ebp,%ecx
  mov    %ebx,%edx
  mov    %r12,%rdi
  mov    %r10b,0x8(%rsp)
  movslq %ebp,%r14
  call   <maze_solve_helper>
  movzbl 0x8(%rsp),%r10d
  test   %eax,%eax
  jne    L106
  jmp    L214
  cs nopw 0x0(%rax,%rax,1)
L229:
  movslq %ebp,%r14
  movslq %edx,%rcx
  lea    (%r14,%r14,8),%rax
  lea    (%rax,%rax,8),%rax
  add    %r12,%rax
  cmpb   $0x23,(%rax,%rcx,1)
  je     L27
  mov    %ebx,%r8d
  mov    %ebp,%ecx
  mov    %ebp,%esi
  mov    %r12,%rdi
  call   <maze_solve_helper>
  movslq %ebx,%r15
  test   %eax,%eax
  jne    L106
  xor    %eax,%eax
  jmp    L172
  nopl   0x0(%rax)
L205:
  movslq %esi,%rax
  movslq %ebx,%r15
  lea    (%rax,%rax,8),%rax
  lea    (%rax,%rax,8),%rax
  add    %r12,%rax
  cmpb   $0x23,(%rax,%r15,1)
  je     L0
  mov    %ebx,%r8d
  mov    %ebp,%ecx
  mov    %ebx,%edx
  mov    %r12,%rdi
  mov    %r9d,0x8(%rsp)
  movslq %ebp,%r14
  call   <maze_solve_helper>
  mov    0x8(%rsp),%r9d
  test   %eax,%eax
  je     L0
  jmp    L106
```

assistant: ```c
int maze_solve_helper(char maze[41][81], int r, int c, int pr, int pc) {
  int res = 0, nr = 0, nc = 0;
  if (r == 40 && c == 79)
    goto success;
  if (r != 0) {
    nr = r - 1;
    nc = c;
    if (!(nr == pr && nc == pc) && maze[nr][nc] != '#')
      res = maze_solve_helper(maze, nr, nc, r, c);
    if (res)
      goto success;
  }
  nr = r;
  nc = c - 1;
  if (!(nr == pr && nc == pc) && maze[nr][nc] != '#')
    res = maze_solve_helper(maze, nr, nc, r, c);
  if (res)
    goto success;
  nr = r + 1;
  nc = c;
  if (!(nr == pr && nc == pc) && maze[nr][nc] != '#')
    res = maze_solve_helper(maze, nr, nc, r, c);
  if (res)
    goto success;
  nr = r;
  nc = c + 1;
  if (!(nr == pr && nc == pc) && maze[nr][nc] != '#')
    res = maze_solve_helper(maze, nr, nc, r, c);
  if (res)
    goto success;
  return 0;
success:
  maze[r][c] = '.';
  return 1;
}
```