user: 请将以下的汇编代码转换成C语言代码：

```asm
<disp_wall_char>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %edi,-0x14(%rbp)
  mov    %esi,-0x18(%rbp)
  movl   $0x0,-0x8(%rbp)
  movl   $0x0,-0x4(%rbp)
  jmp    L115
L37:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  lea    D67(%rip),%rax
  mov    (%rdx,%rax,1),%edx
  mov    -0x14(%rbp),%eax
  add    %edx,%eax
  test   %eax,%eax
  js     L66
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  lea    D9(%rip),%rax
  mov    (%rdx,%rax,1),%edx
  mov    -0x18(%rbp),%eax
  add    %edx,%eax
  test   %eax,%eax
  js     L66
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  lea    D67(%rip),%rax
  mov    (%rdx,%rax,1),%edx
  mov    -0x14(%rbp),%eax
  add    %edx,%eax
  cmp    $0x16,%eax
  jg     L66
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  lea    D9(%rip),%rax
  mov    (%rdx,%rax,1),%edx
  mov    -0x18(%rbp),%eax
  add    %edx,%eax
  cmp    $0x4f,%eax
  jg     L66
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  lea    D9(%rip),%rax
  mov    (%rdx,%rax,1),%edx
  mov    -0x18(%rbp),%eax
  add    %eax,%edx
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  lea    D67(%rip),%rax
  mov    (%rcx,%rax,1),%ecx
  mov    -0x14(%rbp),%eax
  add    %ecx,%eax
  mov    %edx,%esi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <is_wall@plt>
  test   %eax,%eax
  jne    L66
  mov    -0x4(%rbp),%eax
  mov    $0x1,%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%eax
  or     %edx,%eax
  mov    %eax,-0x8(%rbp)
L66:
  addl   $0x1,-0x4(%rbp)
L115:
  cmpl   $0x3,-0x4(%rbp)
  jle    L37
  cmpl   $0xf,-0x8(%rbp)
  ja     L51
  mov    -0x8(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  lea    D30(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D30(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    $0x0,%eax
  call   <display_horiz_line@plt>
  jmp    L123
  mov    $0x0,%eax
  call   <display_vert_line@plt>
  jmp    L123
  mov    $0x0,%eax
  call   <display_upper_left_angle@plt>
  jmp    L123
  mov    $0x0,%eax
  call   <display_upper_right_angle@plt>
  jmp    L123
  mov    $0x0,%eax
  call   <display_lower_right_angle@plt>
  jmp    L123
  mov    $0x0,%eax
  call   <display_lower_left_angle@plt>
  jmp    L123
  mov    $0x0,%eax
  call   <display_vert_and_left_line@plt>
  jmp    L123
  mov    $0x0,%eax
  call   <display_hor_and_upper_vert_line@plt>
  jmp    L123
  mov    $0x0,%eax
  call   <display_vert_and_right_line@plt>
  jmp    L123
  mov    $0x0,%eax
  call   <display_hor_and_bottom_vert_line@plt>
  jmp    L123
  mov    $0x0,%eax
  call   <display_hor_and_vert_line@plt>
  jmp    L123
L51:
  mov    $0x3f,%edi
  call   <putchar@plt>
  nop
L123:
  nop
  leave
  ret
```

assistant: ```c
disp_wall_char(row, col) int row, col;
{
  int graph_type;
  static int col_off[] = {0, 1, 0, -1};
  static int row_off[] = {-1, 0, 1, 0};
  int i, j;
  graph_type = 0;
  for (i = 0; i < 4; i++) {
    if ((row + row_off[i] >= 0) && (col + col_off[i] >= 0) && (row + row_off[i] < 23) && (col + col_off[i] < 80)) {
      if (is_wall(row + row_off[i], col + col_off[i]) == 0) {
        graph_type = graph_type | (unsigned int)(1 << i);
      }
    }
  }
  switch (graph_type) {
  case 0:
  case 2:
  case 8:
  case 10:
    display_horiz_line();
    break;
  case 1:
  case 4:
  case 5:
    display_vert_line();
    break;
  case 9:
    display_upper_left_angle();
    break;
  case 3:
    display_upper_right_angle();
    break;
  case 6:
    display_lower_right_angle();
    break;
  case 12:
    display_lower_left_angle();
    break;
  case 13:
    display_vert_and_left_line();
    break;
  case 11:
    display_hor_and_upper_vert_line();
    break;
  case 7:
    display_vert_and_right_line();
    break;
  case 14:
    display_hor_and_bottom_vert_line();
    break;
  case 15:
    display_hor_and_vert_line();
    break;
  default:
    printf("?");
    break;
  }
}
```