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

```asm
<make_window8>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %esi,-0x1c(%rbp)
  mov    %edx,-0x20(%rbp)
  mov    %rcx,-0x28(%rbp)
  mov    -0x1c(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    -0x1c(%rbp),%esi
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rsp
  push   $0x0
  mov    %edx,%r9d
  mov    $0x0,%r8d
  mov    $0x0,%ecx
  mov    $0x8,%edx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <boxfill8@plt>
  add    $0x10,%rsp
  mov    -0x1c(%rbp),%eax
  lea    -0x2(%rax),%edx
  mov    -0x1c(%rbp),%esi
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rsp
  push   $0x1
  mov    %edx,%r9d
  mov    $0x1,%r8d
  mov    $0x1,%ecx
  mov    $0x7,%edx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <boxfill8@plt>
  add    $0x10,%rsp
  mov    -0x20(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    -0x1c(%rbp),%esi
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rsp
  push   %rdx
  mov    $0x0,%r9d
  mov    $0x0,%r8d
  mov    $0x0,%ecx
  mov    $0x8,%edx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <boxfill8@plt>
  add    $0x10,%rsp
  mov    -0x20(%rbp),%eax
  lea    -0x2(%rax),%edx
  mov    -0x1c(%rbp),%esi
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rsp
  push   %rdx
  mov    $0x1,%r9d
  mov    $0x1,%r8d
  mov    $0x1,%ecx
  mov    $0x7,%edx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <boxfill8@plt>
  add    $0x10,%rsp
  mov    -0x20(%rbp),%eax
  lea    -0x2(%rax),%ecx
  mov    -0x1c(%rbp),%eax
  lea    -0x2(%rax),%edi
  mov    -0x1c(%rbp),%eax
  lea    -0x2(%rax),%edx
  mov    -0x1c(%rbp),%esi
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rsp
  push   %rcx
  mov    %edi,%r9d
  mov    $0x1,%r8d
  mov    %edx,%ecx
  mov    $0xf,%edx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <boxfill8@plt>
  add    $0x10,%rsp
  mov    -0x20(%rbp),%eax
  lea    -0x1(%rax),%ecx
  mov    -0x1c(%rbp),%eax
  lea    -0x1(%rax),%edi
  mov    -0x1c(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    -0x1c(%rbp),%esi
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rsp
  push   %rcx
  mov    %edi,%r9d
  mov    $0x0,%r8d
  mov    %edx,%ecx
  mov    $0x0,%edx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <boxfill8@plt>
  add    $0x10,%rsp
  mov    -0x20(%rbp),%eax
  lea    -0x3(%rax),%edx
  mov    -0x1c(%rbp),%eax
  lea    -0x3(%rax),%ecx
  mov    -0x1c(%rbp),%esi
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rsp
  push   %rdx
  mov    %ecx,%r9d
  mov    $0x2,%r8d
  mov    $0x2,%ecx
  mov    $0x8,%edx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <boxfill8@plt>
  add    $0x10,%rsp
  mov    -0x1c(%rbp),%eax
  lea    -0x4(%rax),%edx
  mov    -0x1c(%rbp),%esi
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rsp
  push   $0x14
  mov    %edx,%r9d
  mov    $0x3,%r8d
  mov    $0x3,%ecx
  mov    $0xc,%edx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <boxfill8@plt>
  add    $0x10,%rsp
  mov    -0x20(%rbp),%eax
  lea    -0x2(%rax),%edx
  mov    -0x1c(%rbp),%eax
  lea    -0x2(%rax),%edi
  mov    -0x20(%rbp),%eax
  lea    -0x2(%rax),%ecx
  mov    -0x1c(%rbp),%esi
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rsp
  push   %rdx
  mov    %edi,%r9d
  mov    %ecx,%r8d
  mov    $0x1,%ecx
  mov    $0xf,%edx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <boxfill8@plt>
  add    $0x10,%rsp
  mov    -0x20(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    -0x1c(%rbp),%eax
  lea    -0x1(%rax),%edi
  mov    -0x20(%rbp),%eax
  lea    -0x1(%rax),%ecx
  mov    -0x1c(%rbp),%esi
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rsp
  push   %rdx
  mov    %edi,%r9d
  mov    %ecx,%r8d
  mov    $0x0,%ecx
  mov    $0x0,%edx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <boxfill8@plt>
  add    $0x10,%rsp
  mov    -0x28(%rbp),%rdx
  mov    -0x1c(%rbp),%esi
  mov    -0x18(%rbp),%rax
  mov    %rdx,%r9
  mov    $0x7,%r8d
  mov    $0x4,%ecx
  mov    $0x18,%edx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <putfont8_asc@plt>
  movl   $0x0,-0x4(%rbp)
  jmp    L63
L62:
  movl   $0x0,-0x8(%rbp)
  jmp    L81
L31:
  mov    -0x8(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x4(%rbp),%eax
  cltq
  shl    $0x4,%rax
  add    %rax,%rdx
  lea    D2(%rip),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x9(%rbp)
  cmpb   $0x40,-0x9(%rbp)
  jne    L24
  movb   $0x0,-0x9(%rbp)
  jmp    L14
L24:
  cmpb   $0x24,-0x9(%rbp)
  jne    L10
  movb   $0xf,-0x9(%rbp)
  jmp    L14
L10:
  cmpb   $0x51,-0x9(%rbp)
  jne    L28
  movb   $0x8,-0x9(%rbp)
  jmp    L14
L28:
  movb   $0x7,-0x9(%rbp)
L14:
  mov    -0x4(%rbp),%eax
  add    $0x5,%eax
  imul   -0x1c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x1c(%rbp),%eax
  lea    -0x15(%rax),%ecx
  mov    -0x8(%rbp),%eax
  add    %ecx,%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rax,%rdx
  movzbl -0x9(%rbp),%eax
  mov    %al,(%rdx)
  addl   $0x1,-0x8(%rbp)
L81:
  cmpl   $0xf,-0x8(%rbp)
  jle    L31
  addl   $0x1,-0x4(%rbp)
L63:
  cmpl   $0xd,-0x4(%rbp)
  jle    L62
  nop
  leave
  ret
```

assistant: ```c
void make_window8(unsigned char *buf, int xsize, int ysize, char *title) {
  static char closebtn[14][16] = {"OOOOOOOOOOOOOOO@", "OQQQQQQQQQQQQQ$@", "OQQQQQQQQQQQQQ$@", "OQQQ@@QQQQ@@QQ$@", "OQQQQ@@QQ@@QQQ$@", "OQQQQQ@@@@QQQQ$@", "OQQQQQQ@@QQQQQ$@", "OQQQQQ@@@@QQQQ$@", "OQQQQ@@QQ@@QQQ$@", "OQQQ@@QQQQ@@QQ$@", "OQQQQQQQQQQQQQ$@", "OQQQQQQQQQQQQQ$@", "O$$$$$$$$$$$$$$@", "@@@@@@@@@@@@@@@@"};
  int x, y;
  char c;
  boxfill8(buf, xsize, 8, 0, 0, xsize - 1, 0);
  boxfill8(buf, xsize, 7, 1, 1, xsize - 2, 1);
  boxfill8(buf, xsize, 8, 0, 0, 0, ysize - 1);
  boxfill8(buf, xsize, 7, 1, 1, 1, ysize - 2);
  boxfill8(buf, xsize, 15, xsize - 2, 1, xsize - 2, ysize - 2);
  boxfill8(buf, xsize, 0, xsize - 1, 0, xsize - 1, ysize - 1);
  boxfill8(buf, xsize, 8, 2, 2, xsize - 3, ysize - 3);
  boxfill8(buf, xsize, 12, 3, 3, xsize - 4, 20);
  boxfill8(buf, xsize, 15, 1, ysize - 2, xsize - 2, ysize - 2);
  boxfill8(buf, xsize, 0, 0, ysize - 1, xsize - 1, ysize - 1);
  putfont8_asc(buf, xsize, 24, 4, 7, title);
  for (y = 0; y < 14; y++) {
    for (x = 0; x < 16; x++) {
      c = closebtn[y][x];
      if (c == '@') {
        c = 0;
      } else if (c == '$') {
        c = 15;
      } else if (c == 'Q') {
        c = 8;
      } else {
        c = 7;
      }
      buf[(5 + y) * xsize + (xsize - 21 + x)] = c;
    }
  }
  return;
}
```