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

```asm
<main>:
  endbr64
  push   %rbp
  xor    %eax,%eax
  mov    $0x65,%ebp
  push   %rbx
  sub    $0x8,%rsp
  call   <erase@plt>
  cs nopw 0x0(%rax,%rax,1)
L15:
  lea    -0x50(%rbp),%ebx
  nopl   0x0(%rax,%rax,1)
L16:
  mov    %ebx,%esi
  xor    %edi,%edi
  add    $0xa,%ebx
  call   <draw_piece@plt>
  cmp    %ebp,%ebx
  jne    L16
  lea    0x1(%rbx),%ebp
  cmp    $0x6c,%ebx
  jne    L15
  mov    $0x15,%esi
  mov    $0x5,%edi
  call   <draw_piece@plt>
  mov    $0x16,%esi
  mov    $0x3,%edi
  call   <draw_piece@plt>
  mov    $0x17,%esi
  mov    $0x4,%edi
  call   <draw_piece@plt>
  mov    $0x18,%esi
  mov    $0x6,%edi
  call   <draw_piece@plt>
  mov    $0x19,%esi
  mov    $0x7,%edi
  call   <draw_piece@plt>
  mov    $0x1a,%esi
  mov    $0x4,%edi
  call   <draw_piece@plt>
  mov    $0x1b,%esi
  mov    $0x3,%edi
  call   <draw_piece@plt>
  mov    $0x1c,%esi
  mov    $0x5,%edi
  call   <draw_piece@plt>
  mov    $0x1f,%esi
  mov    $0x2,%edi
  call   <draw_piece@plt>
  mov    $0x20,%esi
  mov    $0x2,%edi
  call   <draw_piece@plt>
  mov    $0x21,%esi
  mov    $0x2,%edi
  call   <draw_piece@plt>
  mov    $0x22,%esi
  mov    $0x2,%edi
  call   <draw_piece@plt>
  mov    $0x23,%esi
  mov    $0x2,%edi
  call   <draw_piece@plt>
  mov    $0x24,%esi
  mov    $0x2,%edi
  call   <draw_piece@plt>
  mov    $0x25,%esi
  mov    $0x2,%edi
  call   <draw_piece@plt>
  mov    $0x26,%esi
  mov    $0x2,%edi
  call   <draw_piece@plt>
  mov    $0x51,%esi
  mov    $0xc,%edi
  call   <draw_piece@plt>
  mov    $0x52,%esi
  mov    $0xc,%edi
  call   <draw_piece@plt>
  mov    $0x53,%esi
  mov    $0xc,%edi
  call   <draw_piece@plt>
  mov    $0x54,%esi
  mov    $0xc,%edi
  call   <draw_piece@plt>
  mov    $0x55,%esi
  mov    $0xc,%edi
  call   <draw_piece@plt>
  mov    $0x56,%esi
  mov    $0xc,%edi
  call   <draw_piece@plt>
  mov    $0x57,%esi
  mov    $0xc,%edi
  call   <draw_piece@plt>
  mov    $0x58,%esi
  mov    $0xc,%edi
  call   <draw_piece@plt>
  mov    $0x5b,%esi
  mov    $0xf,%edi
  call   <draw_piece@plt>
  mov    $0x5c,%esi
  mov    $0xd,%edi
  call   <draw_piece@plt>
  mov    $0x5d,%esi
  mov    $0xe,%edi
  call   <draw_piece@plt>
  mov    $0x5e,%esi
  mov    $0x10,%edi
  call   <draw_piece@plt>
  mov    $0x5f,%esi
  mov    $0x11,%edi
  call   <draw_piece@plt>
  mov    $0x60,%esi
  mov    $0xe,%edi
  call   <draw_piece@plt>
  mov    $0x61,%esi
  mov    $0xd,%edi
  call   <draw_piece@plt>
  mov    $0x62,%esi
  mov    $0xf,%edi
  call   <draw_piece@plt>
  mov    $0x36,%esi
  mov    $0x6,%edi
  call   <draw_piece@plt>
  mov    $0x37,%esi
  mov    $0x7,%edi
  call   <draw_piece@plt>
  mov    $0x40,%esi
  mov    $0x10,%edi
  call   <draw_piece@plt>
  mov    $0x41,%esi
  mov    $0x11,%edi
  call   <draw_piece@plt>
  xor    %eax,%eax
  call   <draw_border@plt>
  xor    %eax,%eax
  call   <draw_labels@plt>
  add    $0x8,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  ret
```

assistant: ```c
main() {
  int r, f;
  erase();
  for (r = 0; r < 8; r++)
    for (f = 0; f < 8; f++)
      draw_piece(0, 21 + f * 10 + r);
  draw_piece(5, 21);
  draw_piece(3, 22);
  draw_piece(4, 23);
  draw_piece(6, 24);
  draw_piece(7, 25);
  draw_piece(4, 26);
  draw_piece(3, 27);
  draw_piece(5, 28);
  draw_piece(2, 31);
  draw_piece(2, 32);
  draw_piece(2, 33);
  draw_piece(2, 34);
  draw_piece(2, 35);
  draw_piece(2, 36);
  draw_piece(2, 37);
  draw_piece(2, 38);
  draw_piece(12, 81);
  draw_piece(12, 82);
  draw_piece(12, 83);
  draw_piece(12, 84);
  draw_piece(12, 85);
  draw_piece(12, 86);
  draw_piece(12, 87);
  draw_piece(12, 88);
  draw_piece(15, 91);
  draw_piece(13, 92);
  draw_piece(14, 93);
  draw_piece(16, 94);
  draw_piece(17, 95);
  draw_piece(14, 96);
  draw_piece(13, 97);
  draw_piece(15, 98);
  draw_piece(6, 54);
  draw_piece(7, 55);
  draw_piece(16, 64);
  draw_piece(17, 65);
  draw_border();
  draw_labels();
}
```