user: 请从给定的汇编指令推导出C源代码：

```asm
<make_path>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %rdi,-0x48(%rbp)
  mov    %rsi,-0x50(%rbp)
  mov    -0x48(%rbp),%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  mov    %rax,-0x40(%rbp)
  mov    -0x50(%rbp),%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  mov    %rax,-0x38(%rbp)
  mov    -0x50(%rbp),%rcx
  mov    -0x48(%rbp),%rax
  mov    $0xffffffff,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <chk_extend_path_h@plt>
  mov    %rax,-0x30(%rbp)
  mov    -0x50(%rbp),%rcx
  mov    -0x48(%rbp),%rax
  mov    $0x1,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <chk_extend_path_h@plt>
  mov    %rax,-0x28(%rbp)
  mov    $0x10,%edi
  call   <randm@plt>
  add    $0x1,%eax
  cltq
  mov    %rax,-0x20(%rbp)
  mov    -0x38(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x40(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  add    %rax,%rdx
  mov    -0x38(%rbp),%rsi
  mov    -0x30(%rbp),%rax
  add    %rax,%rsi
  mov    -0x40(%rbp),%rax
  mov    $0x48,%r8d
  mov    %rax,%rdi
  call   <line_path@plt>
  mov    -0x38(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x40(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  add    %rax,%rdx
  mov    -0x38(%rbp),%rsi
  mov    -0x30(%rbp),%rax
  add    %rax,%rsi
  mov    -0x40(%rbp),%rdi
  mov    -0x20(%rbp),%rax
  add    %rdi,%rax
  mov    $0x48,%r8d
  mov    %rax,%rdi
  call   <line_path@plt>
  mov    -0x38(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x40(%rbp),%rax
  lea    0x11(%rax),%rdx
  mov    -0x38(%rbp),%rsi
  mov    -0x28(%rbp),%rax
  add    %rax,%rsi
  mov    -0x40(%rbp),%rdi
  mov    -0x20(%rbp),%rax
  add    %rdi,%rax
  mov    $0x48,%r8d
  mov    %rax,%rdi
  call   <line_path@plt>
  mov    -0x48(%rbp),%rax
  lea    -0x1(%rax),%rdx
  mov    -0x50(%rbp),%rax
  mov    %rax,%rsi
  mov    %rdx,%rdi
  call   <chk_room@plt>
  test   %rax,%rax
  je     L0
  mov    -0x38(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  lea    (%rdx,%rax,1),%rsi
  mov    -0x40(%rbp),%rax
  mov    $0x0,%ecx
  mov    $0xffffffff,%edx
  mov    %rax,%rdi
  call   <finish_path@plt>
L0:
  mov    -0x48(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    -0x50(%rbp),%rax
  mov    %rax,%rsi
  mov    %rdx,%rdi
  call   <chk_room@plt>
  test   %rax,%rax
  je     L36
  mov    -0x38(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  lea    (%rdx,%rax,1),%rsi
  mov    -0x40(%rbp),%rax
  add    $0x11,%rax
  mov    $0x0,%ecx
  mov    $0x1,%edx
  mov    %rax,%rdi
  call   <finish_path@plt>
L36:
  mov    -0x50(%rbp),%rcx
  mov    -0x48(%rbp),%rax
  mov    $0xffffffff,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <chk_extend_path_v@plt>
  mov    %rax,-0x18(%rbp)
  mov    -0x50(%rbp),%rcx
  mov    -0x48(%rbp),%rax
  mov    $0x1,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <chk_extend_path_v@plt>
  mov    %rax,-0x10(%rbp)
  mov    $0x10,%edi
  call   <randm@plt>
  add    $0x1,%eax
  cltq
  mov    %rax,-0x8(%rbp)
  mov    -0x38(%rbp),%rdx
  mov    -0x8(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x40(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  add    %rax,%rdx
  mov    -0x40(%rbp),%rsi
  mov    -0x18(%rbp),%rax
  lea    (%rsi,%rax,1),%rdi
  mov    -0x38(%rbp),%rax
  mov    $0x56,%r8d
  mov    %rax,%rsi
  call   <line_path@plt>
  mov    -0x38(%rbp),%rdx
  mov    -0x8(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x40(%rbp),%rdx
  mov    -0x10(%rbp),%rax
  add    %rax,%rdx
  mov    -0x38(%rbp),%rsi
  mov    -0x8(%rbp),%rax
  add    %rax,%rsi
  mov    -0x40(%rbp),%rdi
  mov    -0x18(%rbp),%rax
  add    %rdi,%rax
  mov    $0x56,%r8d
  mov    %rax,%rdi
  call   <line_path@plt>
  mov    -0x38(%rbp),%rax
  lea    0x11(%rax),%rcx
  mov    -0x40(%rbp),%rdx
  mov    -0x10(%rbp),%rax
  add    %rax,%rdx
  mov    -0x38(%rbp),%rsi
  mov    -0x8(%rbp),%rax
  add    %rax,%rsi
  mov    -0x40(%rbp),%rdi
  mov    -0x10(%rbp),%rax
  add    %rdi,%rax
  mov    $0x56,%r8d
  mov    %rax,%rdi
  call   <line_path@plt>
  mov    -0x50(%rbp),%rax
  lea    -0x1(%rax),%rdx
  mov    -0x48(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <chk_room@plt>
  test   %rax,%rax
  je     L39
  mov    -0x40(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  lea    (%rdx,%rax,1),%rdi
  mov    -0x38(%rbp),%rax
  mov    $0xffffffff,%ecx
  mov    $0x0,%edx
  mov    %rax,%rsi
  call   <finish_path@plt>
L39:
  mov    -0x50(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    -0x48(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <chk_room@plt>
  test   %rax,%rax
  je     L23
  mov    -0x38(%rbp),%rax
  lea    0x11(%rax),%rsi
  mov    -0x40(%rbp),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    $0x1,%ecx
  mov    $0x0,%edx
  mov    %rax,%rdi
  call   <finish_path@plt>
L23:
  mov    $0x0,%eax
  call   <chk_lighted_path@plt>
  test   %rax,%rax
  je     L49
  mov    -0x50(%rbp),%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  mov    %rax,%rcx
  mov    -0x48(%rbp),%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  mov    $0x0,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <on_light_area@plt>
L49:
  nop
  leave
  ret
```

assistant: ```c
void make_path(long area_x, long area_y) {
  long bgn_x, bgn_y, end_x, end_y;
  long bend_x, bend_y;
  long mx, my;
  mx = area_x * 20;
  my = area_y * 20;
  bgn_y = chk_extend_path_h(area_x, area_y, -1);
  end_y = chk_extend_path_h(area_x, area_y, +1);
  bend_x = 1 + randm(20 - 3 + 1 - 2);
  line_path(mx + 0, my + bgn_y, mx + bend_x, my + bgn_y, 'H');
  line_path(mx + bend_x, my + bgn_y, mx + bend_x, my + end_y, 'H');
  line_path(mx + bend_x, my + end_y, mx + 20 - 3, my + end_y, 'H');
  if (chk_room(area_x - 1, area_y)) {
    finish_path(mx + 0, my + bgn_y, -1, 0);
  }
  if (chk_room(area_x + 1, area_y)) {
    finish_path(mx + 20 - 3, my + end_y, +1, 0);
  }
  bgn_x = chk_extend_path_v(area_x, area_y, -1);
  end_x = chk_extend_path_v(area_x, area_y, +1);
  bend_y = 1 + randm(20 - 3 + 1 - 2);
  line_path(mx + bgn_x, my + 0, mx + bgn_x, my + bend_y, 'V');
  line_path(mx + bgn_x, my + bend_y, mx + end_x, my + bend_y, 'V');
  line_path(mx + end_x, my + bend_y, mx + end_x, my + 20 - 3, 'V');
  if (chk_room(area_x, area_y - 1)) {
    finish_path(mx + bgn_x, my + 0, 0, -1);
  }
  if (chk_room(area_x, area_y + 1)) {
    finish_path(mx + end_x, my + 20 - 3, 0, +1);
  }
  if (chk_lighted_path()) {
    on_light_area(area_x * 20, area_y * 20, 0);
  }
}
```