user: What is the c source code of the assembly code below?

```asm
<print_board>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D36(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D47(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D36(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x0,-0x8(%rbp)
  jmp    L26
L73:
  lea    D7(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    -0x8(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,%esi
  lea    D55(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x0,-0x4(%rbp)
  jmp    L59
L9:
  mov    -0x8(%rbp),%eax
  cltq
  shl    $0x5,%rax
  mov    %rax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  cltq
  mov    (%rdx,%rax,4),%eax
  test   %eax,%eax
  jle    L13
  mov    -0x8(%rbp),%eax
  cltq
  shl    $0x5,%rax
  mov    %rax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  cltq
  mov    (%rdx,%rax,4),%eax
  mov    %eax,%edi
  call   <piece_name@plt>
  mov    %rax,%rsi
  lea    D45(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L37
L13:
  mov    -0x8(%rbp),%eax
  cltq
  shl    $0x5,%rax
  mov    %rax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  cltq
  mov    (%rdx,%rax,4),%eax
  test   %eax,%eax
  jns    L70
  mov    -0x8(%rbp),%eax
  cltq
  shl    $0x5,%rax
  mov    %rax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  cltq
  mov    (%rdx,%rax,4),%eax
  mov    %eax,%edi
  call   <piece_name@plt>
  mov    %rax,%rsi
  lea    D94(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L37
L70:
  lea    D40(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L37:
  addl   $0x1,-0x4(%rbp)
L59:
  cmpl   $0x7,-0x4(%rbp)
  jle    L9
  mov    -0x8(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,%esi
  lea    D25(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D7(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  addl   $0x1,-0x8(%rbp)
L26:
  cmpl   $0x7,-0x8(%rbp)
  jle    L73
  lea    D36(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D47(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D36(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  nop
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: tag: D36
type_guessed: string
name: extract_symbolic_data
arguments: tag: D47
type_guessed: string
name: extract_symbolic_data
arguments: tag: D7
type_guessed: string
name: extract_symbolic_data
arguments: tag: D55
type_guessed: string
name: extract_symbolic_data
arguments: tag: D45
type_guessed: string
name: extract_symbolic_data
arguments: tag: D94
type_guessed: string
name: extract_symbolic_data
arguments: tag: D40
type_guessed: string
name: extract_symbolic_data
arguments: tag: D25
type_guessed: string

tool: D36: ## ## ***************************************************************** ## ##

tool: D47:   *   |   A   |   B   |   C   |   D   |   E   |   F   |   G   |   H   |   *  

tool: D7: *****                                                                   *****

tool: D55: | %d |	

tool: D45: w%s	

tool: D94: b%s	

tool: D40: 0	

tool: D25: | %d |


assistant: ```c
void print_board(int boardcopy[8][8]) {
  int a, b;
  printf("\n");
  printf("## ## ***************************************************************** ## ##\n");
  printf("  *   |   A   |   B   |   C   |   D   |   E   |   F   |   G   |   H   |   *  \n");
  printf("## ## ***************************************************************** ## ##\n");
  for (a = 0; a < 8; a++) {
    printf("*****                                                                   *****\n");
    printf("| %d |\t", a + 1);
    for (b = 0; b < 8; b++) {
      if (boardcopy[a][b] > 0)
        printf("w%s\t", piece_name(boardcopy[a][b]));
      else if (boardcopy[a][b] < 0)
        printf("b%s\t", piece_name(boardcopy[a][b]));
      else
        printf("0\t");
    }
    printf("| %d |\n", a + 1);
    printf("*****                                                                   *****\n");
  }
  printf("## ## ***************************************************************** ## ##\n");
  printf("  *   |   A   |   B   |   C   |   D   |   E   |   F   |   G   |   H   |   *  \n");
  printf("## ## ***************************************************************** ## ##\n");
}
```