user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  lea    -0x28000(%rsp),%r11
L211:
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  cmp    %r11,%rsp
  jne    L211
  sub    $0xa80,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    $0x1,%edi
  call   <omp_set_num_threads@plt>
  movl   $0x0,-0x28a80(%rbp)
  jmp    L63
L96:
  movl   $0x0,-0x28a7c(%rbp)
  jmp    L138
L56:
  cmpl   $0x0,-0x28a80(%rbp)
  je     L283
  cmpl   $0x65,-0x28a80(%rbp)
  je     L283
  cmpl   $0x0,-0x28a7c(%rbp)
  je     L283
  cmpl   $0x65,-0x28a7c(%rbp)
  jne    L235
L283:
  mov    -0x28a7c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28a80(%rbp),%eax
  cltq
  imul   $0x66,%rax,%rax
  add    %rdx,%rax
  movsd  D31(%rip),%xmm0
  movsd  %xmm0,-0x28a50(%rbp,%rax,8)
  jmp    L113
L235:
  mov    -0x28a7c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28a80(%rbp),%eax
  cltq
  imul   $0x66,%rax,%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x28a50(%rbp,%rax,8)
L113:
  addl   $0x1,-0x28a7c(%rbp)
L138:
  cmpl   $0x65,-0x28a7c(%rbp)
  jle    L56
  addl   $0x1,-0x28a80(%rbp)
L63:
  cmpl   $0x65,-0x28a80(%rbp)
  jle    L96
  lea    D35(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x0,-0x28a80(%rbp)
  jmp    L0
L150:
  movl   $0x0,-0x28a7c(%rbp)
  jmp    L102
L260:
  mov    -0x28a7c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28a80(%rbp),%eax
  cltq
  imul   $0x66,%rax,%rax
  add    %rdx,%rax
  mov    -0x28a50(%rbp,%rax,8),%rax
  movq   %rax,%xmm0
  lea    D10(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  addl   $0x1,-0x28a7c(%rbp)
L102:
  cmpl   $0x65,-0x28a7c(%rbp)
  jle    L260
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x28a80(%rbp)
L0:
  cmpl   $0x65,-0x28a80(%rbp)
  jle    L150
  mov    $0x0,%eax
  call   <omp_get_wtime@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x28a70(%rbp)
  movsd  D88(%rip),%xmm0
  movsd  %xmm0,-0x28a68(%rbp)
L35:
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x28a78(%rbp)
  movl   $0x1,-0x28a80(%rbp)
  jmp    L261
L257:
  movl   $0x1,-0x28a7c(%rbp)
  jmp    L250
L167:
  mov    -0x28a7c(%rbp),%eax
  add    $0x1,%eax
  movslq %eax,%rdx
  mov    -0x28a80(%rbp),%eax
  cltq
  imul   $0x66,%rax,%rax
  add    %rdx,%rax
  movsd  -0x28a50(%rbp,%rax,8),%xmm1
  mov    -0x28a7c(%rbp),%eax
  sub    $0x1,%eax
  movslq %eax,%rdx
  mov    -0x28a80(%rbp),%eax
  cltq
  imul   $0x66,%rax,%rax
  add    %rdx,%rax
  movsd  -0x28a50(%rbp,%rax,8),%xmm0
  addsd  %xmm0,%xmm1
  mov    -0x28a80(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    -0x28a7c(%rbp),%eax
  movslq %eax,%rcx
  movslq %edx,%rax
  imul   $0x66,%rax,%rax
  add    %rcx,%rax
  movsd  -0x28a50(%rbp,%rax,8),%xmm0
  addsd  %xmm0,%xmm1
  mov    -0x28a80(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    -0x28a7c(%rbp),%eax
  movslq %eax,%rcx
  movslq %edx,%rax
  imul   $0x66,%rax,%rax
  add    %rcx,%rax
  movsd  -0x28a50(%rbp,%rax,8),%xmm0
  addsd  %xmm0,%xmm1
  mov    -0x28a7c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28a80(%rbp),%eax
  cltq
  imul   $0x66,%rax,%rax
  add    %rdx,%rax
  movsd  -0x28a50(%rbp,%rax,8),%xmm0
  addsd  %xmm1,%xmm0
  movsd  D23(%rip),%xmm1
  divsd  %xmm1,%xmm0
  mov    -0x28a7c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28a80(%rbp),%eax
  cltq
  imul   $0x66,%rax,%rax
  add    %rdx,%rax
  movsd  %xmm0,-0x14530(%rbp,%rax,8)
  mov    -0x28a7c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28a80(%rbp),%eax
  cltq
  imul   $0x66,%rax,%rax
  add    %rdx,%rax
  movsd  -0x14530(%rbp,%rax,8),%xmm0
  mov    -0x28a7c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28a80(%rbp),%eax
  cltq
  imul   $0x66,%rax,%rax
  add    %rdx,%rax
  movsd  -0x28a50(%rbp,%rax,8),%xmm1
  subsd  %xmm1,%xmm0
  movq   D78(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  -0x28a78(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28a78(%rbp)
  addl   $0x1,-0x28a7c(%rbp)
L250:
  cmpl   $0x64,-0x28a7c(%rbp)
  jle    L167
  addl   $0x1,-0x28a80(%rbp)
L261:
  cmpl   $0x64,-0x28a80(%rbp)
  jle    L257
  movl   $0x0,-0x28a80(%rbp)
  jmp    L223
L130:
  movl   $0x0,-0x28a7c(%rbp)
  jmp    L298
L91:
  cmpl   $0x0,-0x28a80(%rbp)
  je     L186
  cmpl   $0x65,-0x28a80(%rbp)
  je     L186
  cmpl   $0x0,-0x28a7c(%rbp)
  je     L186
  cmpl   $0x65,-0x28a7c(%rbp)
  jne    L324
L186:
  mov    -0x28a7c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28a80(%rbp),%eax
  cltq
  imul   $0x66,%rax,%rax
  add    %rdx,%rax
  movsd  D31(%rip),%xmm0
  movsd  %xmm0,-0x28a50(%rbp,%rax,8)
  jmp    L51
L324:
  mov    -0x28a7c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28a80(%rbp),%eax
  cltq
  imul   $0x66,%rax,%rax
  add    %rdx,%rax
  movsd  -0x14530(%rbp,%rax,8),%xmm0
  mov    -0x28a7c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28a80(%rbp),%eax
  cltq
  imul   $0x66,%rax,%rax
  add    %rdx,%rax
  movsd  %xmm0,-0x28a50(%rbp,%rax,8)
L51:
  addl   $0x1,-0x28a7c(%rbp)
L298:
  cmpl   $0x65,-0x28a7c(%rbp)
  jle    L91
  addl   $0x1,-0x28a80(%rbp)
L223:
  cmpl   $0x65,-0x28a80(%rbp)
  jle    L130
  movsd  -0x28a78(%rbp),%xmm0
  comisd -0x28a68(%rbp),%xmm0
  ja     L35
  mov    $0x0,%eax
  call   <omp_get_wtime@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x28a60(%rbp)
  lea    D36(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x0,-0x28a80(%rbp)
  jmp    L222
L66:
  movl   $0x0,-0x28a7c(%rbp)
  jmp    L315
L75:
  mov    -0x28a7c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28a80(%rbp),%eax
  cltq
  imul   $0x66,%rax,%rax
  add    %rdx,%rax
  mov    -0x28a50(%rbp,%rax,8),%rax
  movq   %rax,%xmm0
  lea    D64(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  addl   $0x1,-0x28a7c(%rbp)
L315:
  cmpl   $0x65,-0x28a7c(%rbp)
  jle    L75
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x28a80(%rbp)
L222:
  cmpl   $0x65,-0x28a80(%rbp)
  jle    L66
  movsd  -0x28a60(%rbp),%xmm0
  subsd  -0x28a70(%rbp),%xmm0
  movsd  %xmm0,-0x28a58(%rbp)
  mov    -0x28a58(%rbp),%rax
  movq   %rax,%xmm0
  lea    D90(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L249
  call   <__stack_chk_fail@plt>
L249:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D31
type_guessed: byte[8]
name: extract_symbolic_data
arguments: label: D35
type_guessed: string
name: extract_symbolic_data
arguments: label: D10
type_guessed: string
name: extract_symbolic_data
arguments: label: D88
type_guessed: f64
name: extract_symbolic_data
arguments: label: D23
type_guessed: byte[8]
name: extract_symbolic_data
arguments: label: D78
type_guessed: qword
name: extract_symbolic_data
arguments: label: D36
type_guessed: string
name: extract_symbolic_data
arguments: label: D64
type_guessed: string
name: extract_symbolic_data
arguments: label: D90
type_guessed: string

tool: {"D31": [0x00,0x00,0x00,0x00,0x00,0x40,0x8f,0x40]}

tool: D35: Tableau initial :

tool: D10: %5.1f 

tool: D88: 1e-06

tool: {"D23": [0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x40]}

tool: D78: 9223372036854775807

tool: D36: Tableau final

tool: D64: %6.2f 

tool: D90: Finished in about %f seconds. 


assistant: ```c
int main() {
  int i, j;
  omp_set_num_threads(1);
  double T[100 + 2][100 + 2], T1[100 + 2][100 + 2];
  for (i = 0; i < 100 + 2; i++) {
    for (j = 0; j < 100 + 2; j++) {
      if (i == 0 || i == 100 + 1 || j == 0 || j == 100 + 1)
        T[i][j] = 1000;
      else
        T[i][j] = 0;
    }
  }
  printf("Tableau initial :\n");
  for (i = 0; i < 100 + 2; i++) {
    for (j = 0; j < 100 + 2; j++) {
      printf("%5.1f ", T[i][j]);
    }
    printf("\n");
  }
  double debut = omp_get_wtime();
  double delta;
  double seuil;
  seuil = 0.000001;
  do {
    delta = 0;
#pragma omp parallel for reduction(+ : delta) private(j)
    for (i = 1; i < 100 + 1; i++) {
      for (j = 1; j < 100 + 1; j++) {
        T1[i][j] = (double)(T[i][j + 1] + T[i][j - 1] + T[i + 1][j] + T[i - 1][j] + T[i][j]) / 5;
        delta = delta + fabs(T1[i][j] - T[i][j]);
      }
    }
#pragma omp parallel for private(j)
    for (i = 0; i < 100 + 2; i++) {
      for (j = 0; j < 100 + 2; j++) {
        if (i == 0 || i == 100 + 1 || j == 0 || j == 100 + 1)
          T[i][j] = 1000;
        else
          T[i][j] = T1[i][j];
      }
    }
  } while (delta > seuil);
  double fin = omp_get_wtime();
  printf("Tableau final\n");
  for (i = 0; i < 100 + 2; i++) {
    for (j = 0; j < 100 + 2; j++) {
      printf("%6.2f ", T[i][j]);
    }
    printf("\n");
  }
  double temps = (double)(fin - debut);
  printf("Finished in about %f seconds. \n", temps);
  return 0;
}
```