user: Demonstrate the C code that generates the assembly output below:

```asm
<maze_solve_helper>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %esi,-0x1c(%rbp)
  mov    %edx,-0x20(%rbp)
  mov    %ecx,-0x24(%rbp)
  mov    %r8d,-0x28(%rbp)
  movl   $0x0,-0xc(%rbp)
  movl   $0x0,-0x8(%rbp)
  movl   $0x0,-0x4(%rbp)
  cmpl   $0x28,-0x1c(%rbp)
  jne    L155
  cmpl   $0x4f,-0x20(%rbp)
  je     L17
L155:
  cmpl   $0x0,-0x1c(%rbp)
  je     L113
  mov    -0x1c(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x8(%rbp)
  mov    -0x20(%rbp),%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x8(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  jne    L235
  mov    -0x4(%rbp),%eax
  cmp    -0x28(%rbp),%eax
  je     L62
L235:
  mov    -0x8(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x3,%rax
  add    %rdx,%rax
  lea    0x0(,%rax,8),%rdx
  add    %rax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  cltq
  movzbl (%rdx,%rax,1),%eax
  cmp    $0x23,%al
  je     L62
  mov    -0x20(%rbp),%edi
  mov    -0x1c(%rbp),%ecx
  mov    -0x4(%rbp),%edx
  mov    -0x8(%rbp),%esi
  mov    -0x18(%rbp),%rax
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <maze_solve_helper>
  mov    %eax,-0xc(%rbp)
L62:
  cmpl   $0x0,-0xc(%rbp)
  jne    L59
L113:
  mov    -0x1c(%rbp),%eax
  mov    %eax,-0x8(%rbp)
  mov    -0x20(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x8(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  jne    L30
  mov    -0x4(%rbp),%eax
  cmp    -0x28(%rbp),%eax
  je     L55
L30:
  mov    -0x8(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x3,%rax
  add    %rdx,%rax
  lea    0x0(,%rax,8),%rdx
  add    %rax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  cltq
  movzbl (%rdx,%rax,1),%eax
  cmp    $0x23,%al
  je     L55
  mov    -0x20(%rbp),%edi
  mov    -0x1c(%rbp),%ecx
  mov    -0x4(%rbp),%edx
  mov    -0x8(%rbp),%esi
  mov    -0x18(%rbp),%rax
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <maze_solve_helper>
  mov    %eax,-0xc(%rbp)
L55:
  cmpl   $0x0,-0xc(%rbp)
  jne    L210
  mov    -0x1c(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x8(%rbp)
  mov    -0x20(%rbp),%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x8(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  jne    L223
  mov    -0x4(%rbp),%eax
  cmp    -0x28(%rbp),%eax
  je     L90
L223:
  mov    -0x8(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x3,%rax
  add    %rdx,%rax
  lea    0x0(,%rax,8),%rdx
  add    %rax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  cltq
  movzbl (%rdx,%rax,1),%eax
  cmp    $0x23,%al
  je     L90
  mov    -0x20(%rbp),%edi
  mov    -0x1c(%rbp),%ecx
  mov    -0x4(%rbp),%edx
  mov    -0x8(%rbp),%esi
  mov    -0x18(%rbp),%rax
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <maze_solve_helper>
  mov    %eax,-0xc(%rbp)
L90:
  cmpl   $0x0,-0xc(%rbp)
  jne    L118
  mov    -0x1c(%rbp),%eax
  mov    %eax,-0x8(%rbp)
  mov    -0x20(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x8(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  jne    L192
  mov    -0x4(%rbp),%eax
  cmp    -0x28(%rbp),%eax
  je     L201
L192:
  mov    -0x8(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x3,%rax
  add    %rdx,%rax
  lea    0x0(,%rax,8),%rdx
  add    %rax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  cltq
  movzbl (%rdx,%rax,1),%eax
  cmp    $0x23,%al
  je     L201
  mov    -0x20(%rbp),%edi
  mov    -0x1c(%rbp),%ecx
  mov    -0x4(%rbp),%edx
  mov    -0x8(%rbp),%esi
  mov    -0x18(%rbp),%rax
  mov    %edi,%r8d
  mov    %rax,%rdi
  call   <maze_solve_helper>
  mov    %eax,-0xc(%rbp)
L201:
  cmpl   $0x0,-0xc(%rbp)
  jne    L106
  mov    $0x0,%eax
  jmp    L136
L17:
  nop
  jmp    L220
L59:
  nop
  jmp    L220
L210:
  nop
  jmp    L220
L118:
  nop
  jmp    L220
L106:
  nop
L220:
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x3,%rax
  add    %rdx,%rax
  lea    0x0(,%rax,8),%rdx
  add    %rax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rax,%rdx
  mov    -0x20(%rbp),%eax
  cltq
  movb   $0x2e,(%rdx,%rax,1)
  mov    $0x1,%eax
L136:
  leave
  ret
```

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;
}
```