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

```asm
<main>:
  endbr64
  push   %r15
  xor    %edi,%edi
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x368,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x358(%rsp)
  xor    %eax,%eax
  movb   $0x73,0x47(%rsp)
  call   <time@plt>
  mov    %eax,%edi
  call   <srand@plt>
  lea    D88(%rip),%rdi
  call   <puts@plt>
  lea    D74(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  xor    %eax,%eax
  call   <getchar@plt>
  lea    D63(%rip),%rdi
  call   <system@plt>
  movzbl 0x47(%rsp),%eax
  and    $0xffffffdf,%eax
  cmp    $0x53,%al
  jne    L44
  lea    0x110(%rsp),%rax
  lea    D16(%rip),%r15
  mov    %rax,0x8(%rsp)
  lea    0x50(%rsp),%rax
  mov    %rax,0x38(%rsp)
  lea    0x290(%rsp),%rax
  mov    %rax,0x28(%rsp)
  lea    0x1d0(%rsp),%rax
  mov    %rax,(%rsp)
  lea    0x47(%rsp),%rax
  mov    %rax,0x30(%rsp)
  lea    0x70(%rsp),%rax
  mov    %rax,0x18(%rsp)
L56:
  mov    0x8(%rsp),%r14
  mov    0x38(%rsp),%rbx
  movl   $0x0,0x48(%rsp)
  movl   $0x0,0x4c(%rsp)
  mov    %r14,%rsi
  mov    %rbx,%rdi
  call   <ZerarMatriz@plt>
  mov    0x28(%rsp),%rsi
  mov    (%rsp),%rdi
  call   <ZerarMatriz@plt>
  mov    %rbx,%rdi
  call   <GerarBarco@plt>
  mov    %r14,%rdi
  call   <GerarBarco@plt>
L116:
  mov    0x48(%rsp),%eax
  mov    0x28(%rsp),%r13
  nop
L158:
  cmpl   $0xa,0x4c(%rsp)
  je     L142
  cmp    $0xa,%eax
  je     L142
  lea    D63(%rip),%rdi
  lea    0x130(%rsp),%rbp
  call   <system@plt>
  mov    0x18(%rsp),%rbx
  mov    %rbx,0x20(%rsp)
  nopw   0x0(%rax,%rax,1)
L58:
  lea    -0x20(%rbx),%r12
  nopl   0x0(%rax)
L148:
  mov    (%r12),%esi
  mov    %r15,%rdi
  xor    %eax,%eax
  add    $0x4,%r12
  call   <printf@plt>
  cmp    %rbx,%r12
  jne    L148
  mov    $0xa,%edi
  lea    0x20(%r12),%rbx
  call   <putchar@plt>
  cmp    %rbp,%rbx
  jne    L58
  mov    $0xa,%edi
  lea    0x1f0(%rsp),%r12
  mov    %rbp,%rbx
  call   <putchar@plt>
  mov    %rbp,0x10(%rsp)
  nopl   (%rax)
L40:
  lea    -0x20(%rbx),%r14
  nopl   0x0(%rax)
L108:
  mov    (%r14),%esi
  mov    %r15,%rdi
  xor    %eax,%eax
  add    $0x4,%r14
  call   <printf@plt>
  cmp    %rbx,%r14
  jne    L108
  mov    $0xa,%edi
  lea    0x20(%r14),%rbx
  call   <putchar@plt>
  cmp    %r12,%rbx
  jne    L40
  mov    0x4c(%rsp),%ecx
  mov    0x48(%rsp),%edx
  mov    %r13,%rsi
  mov    (%rsp),%rdi
  call   <Tela@plt>
  lea    D5(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    0x8(%rsp),%rdi
  lea    0x48(%rsp),%rdx
  mov    %r13,%rsi
  call   <Tiro@plt>
  lea    D63(%rip),%rdi
  call   <system@plt>
  mov    0x48(%rsp),%eax
  cmp    $0xa,%eax
  je     L158
  mov    0x20(%rsp),%r14
L47:
  lea    -0x20(%r14),%rbx
  nop
L140:
  mov    (%rbx),%esi
  mov    %r15,%rdi
  xor    %eax,%eax
  add    $0x4,%rbx
  call   <printf@plt>
  cmp    %r14,%rbx
  jne    L140
  mov    $0xa,%edi
  lea    0x20(%rbx),%r14
  call   <putchar@plt>
  cmp    %rbp,%r14
  jne    L47
  mov    $0xa,%edi
  call   <putchar@plt>
  mov    0x10(%rsp),%rbp
L45:
  lea    -0x20(%rbp),%rbx
  nopl   0x0(%rax,%rax,1)
L125:
  mov    (%rbx),%esi
  mov    %r15,%rdi
  xor    %eax,%eax
  add    $0x4,%rbx
  call   <printf@plt>
  cmp    %rbp,%rbx
  jne    L125
  mov    $0xa,%edi
  lea    0x20(%rbx),%rbp
  call   <putchar@plt>
  cmp    %r12,%rbp
  jne    L45
  mov    (%rsp),%rbx
  mov    0x48(%rsp),%edx
  mov    0x28(%rsp),%rsi
  mov    0x4c(%rsp),%ecx
  mov    %rbx,%rdi
  call   <Tela@plt>
  lea    D127(%rip),%rdi
  call   <puts@plt>
  mov    0x38(%rsp),%rdi
  lea    0x4c(%rsp),%rdx
  mov    %rbx,%rsi
  call   <Tiro@plt>
  jmp    L116
L142:
  lea    D62(%rip),%rdi
  call   <system@plt>
  cmpl   $0xa,0x48(%rsp)
  lea    D99(%rip),%rdi
  je     L122
  lea    D116(%rip),%rdi
L122:
  call   <puts@plt>
  lea    D18(%rip),%rdi
  call   <puts@plt>
  mov    0x30(%rsp),%rsi
  lea    D15(%rip),%rdi
  call   <scanf@plt>
  movzbl 0x47(%rsp),%eax
  and    $0xffffffdf,%eax
  cmp    $0x53,%al
  je     L56
L44:
  mov    0x358(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L87
  add    $0x368,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L87:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: tag: D88
type: string
name: extract_symbolic_data
arguments: tag: D74
type: string
name: extract_symbolic_data
arguments: tag: D63
type: string
name: extract_symbolic_data
arguments: tag: D16
type: string
name: extract_symbolic_data
arguments: tag: D5
type: string
name: extract_symbolic_data
arguments: tag: D127
type: string
name: extract_symbolic_data
arguments: tag: D62
type: string
name: extract_symbolic_data
arguments: tag: D99
type: string
name: extract_symbolic_data
arguments: tag: D116
type: string
name: extract_symbolic_data
arguments: tag: D18
type: string
name: extract_symbolic_data
arguments: tag: D15
type: string

tool: D88:  ____        _        _ _             _   _                  _
| __ )  __ _| |_ __ _| | |__   __ _  | \ | | __ ___   ____ _| |
| \_ \ / _` | __/ _` | | '_ \ / _` | |  \| |/ _` \ \ / / _` | |
| |_) | (_| | |_ (_| | | | | | (_| | | |\  | (_| |\ V / (_| | |
|____/ \__,_|\__\__,_|_|_| |_|\__,_| |_| \_|\__,_| \_/ \__,_|_|

tool: D74: 		Aperte enter para jogar...

tool: D63: clear||cls

tool: D16: %d 

tool: D5: 		 Jogador 1

tool: D127: 		 Jogador 2

tool: D62: clear || cls

tool: D99: 

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!PLAYER 1 GANHOU !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


tool: D116: 

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!PLAYER 2 GANHOU !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


tool: D18: 
	Quer jogar de novo?(S/N)

tool: D15: %c

assistant: ```c
int main() {
  int P1[6][8], P2[6][8], P1Tela[6][8], P2Tela[6][8];
  int P1Ponto, P2Ponto;
  int i, j;
  char Jogar = 's';
  srand(time(NULL));
  printf(" ____        _        _ _             _   _                  _\n| __ )  __ _| |_ __ _| | |__   __ _  | \\ | | __ ___   ____ _| |\n| \\_ \\ / _` | __/ _` | | '_ \\ / _` | |  \\| |/ _` \\ \\ / / _` | |\n| |_) | (_| | |_ (_| | | | | | (_| | | |\\  | (_| |\\ V / (_| | |\n|____/ \\__,_|\\__\\__,_|_|_| |_|\\__,_| |_| \\_|\\__,_| \\_/ \\__,_|_|\n");
  printf("\t\tAperte enter para jogar...");
  getchar();
  system("clear||cls");
  while ((Jogar == 's') || (Jogar == 'S')) {
    P1Ponto = 0;
    P2Ponto = 0;
    ZerarMatriz(P1, P2);
    ZerarMatriz(P1Tela, P2Tela);
    GerarBarco(P1);
    GerarBarco(P2);
    while ((P1Ponto != 10) && (P2Ponto != 10)) {
      system("clear||cls");
      for (i = 0; i < 6; i++) {
        for (j = 0; j < 8; j++) {
          printf("%d ", P1[i][j]);
        }
        printf("\n");
      }
      printf("\n");
      for (i = 0; i < 6; i++) {
        for (j = 0; j < 8; j++) {
          printf("%d ", P2[i][j]);
        }
        printf("\n");
      }
      Tela(P1Tela, P2Tela, P1Ponto, P2Ponto);
      printf("\t\t Jogador 1");
      Tiro(P2, P2Tela, &P1Ponto);
      system("clear||cls");
      if (P1Ponto != 10) {
        for (i = 0; i < 6; i++) {
          for (j = 0; j < 8; j++) {
            printf("%d ", P1[i][j]);
          }
          printf("\n");
        }
        printf("\n");
        for (i = 0; i < 6; i++) {
          for (j = 0; j < 8; j++) {
            printf("%d ", P2[i][j]);
          }
          printf("\n");
        }
        Tela(P1Tela, P2Tela, P1Ponto, P2Ponto);
        printf("\t\t Jogador 2\n");
        Tiro(P1, P1Tela, &P2Ponto);
      }
    }
    system("clear || cls");
    if (P1Ponto == 10) {
      printf("\n\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!PLAYER 1 GANHOU !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n");
    } else {
      printf("\n\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!PLAYER 2 GANHOU !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n");
    }
    printf("\n\tQuer jogar de novo?(S/N)\n");
    scanf("%c", &Jogar);
  }
  return 0;
}
```