user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x2f0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0x290(%rbp),%rdx
  mov    $0x0,%eax
  mov    $0x50,%ecx
  mov    %rdx,%rdi
  rep stos %rax,%es:(%rdi)
  movq   $0x0,-0x2d0(%rbp)
  movq   $0x0,-0x2c8(%rbp)
  movq   $0x0,-0x2c0(%rbp)
  movq   $0x0,-0x2b8(%rbp)
  movq   $0x0,-0x2b0(%rbp)
  movq   $0x0,-0x2a8(%rbp)
  movq   $0x0,-0x2a0(%rbp)
  movq   $0x0,-0x298(%rbp)
  movl   $0x0,-0x2e0(%rbp)
  jmp    L180
L238:
  lea    -0x2e4(%rbp),%rax
  mov    %rax,%rsi
  lea    D85(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  mov    -0x2e4(%rbp),%eax
  cmp    $0x1,%eax
  jle    L130
  mov    -0x2e4(%rbp),%eax
  cmp    $0xa,%eax
  jle    L201
L130:
  lea    D39(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  nop
  addl   $0x1,-0x2e0(%rbp)
L180:
  cmpl   $0x13,-0x2e0(%rbp)
  jle    L238
L201:
  movl   $0x0,-0x2e0(%rbp)
  jmp    L166
L160:
  movl   $0x0,-0x2dc(%rbp)
  jmp    L110
L165:
  lea    -0x2d8(%rbp),%rax
  mov    %rax,%rsi
  lea    D43(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  movsd  -0x2d8(%rbp),%xmm0
  mov    -0x2dc(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x2e0(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movsd  %xmm0,-0x290(%rbp,%rax,8)
  addl   $0x1,-0x2dc(%rbp)
L110:
  cmpl   $0x3,-0x2dc(%rbp)
  jle    L165
  addl   $0x1,-0x2e0(%rbp)
L166:
  mov    -0x2e4(%rbp),%eax
  cmp    %eax,-0x2e0(%rbp)
  jl     L160
  movl   $0x0,-0x2e0(%rbp)
  jmp    L159
L198:
  movl   $0x0,-0x2dc(%rbp)
  jmp    L212
L154:
  mov    -0x2dc(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x2e0(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movsd  -0x290(%rbp,%rax,8),%xmm0
  comisd D89(%rip),%xmm0
  jb     L118
  mov    -0x2dc(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x2e0(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movsd  -0x290(%rbp,%rax,8),%xmm1
  movsd  D73(%rip),%xmm0
  comisd %xmm1,%xmm0
  jb     L118
  mov    -0x2dc(%rbp),%eax
  cltq
  movsd  -0x2d0(%rbp,%rax,8),%xmm1
  movsd  D31(%rip),%xmm0
  addsd  %xmm1,%xmm0
  mov    -0x2dc(%rbp),%eax
  cltq
  movsd  %xmm0,-0x2d0(%rbp,%rax,8)
L118:
  addl   $0x1,-0x2dc(%rbp)
L212:
  cmpl   $0x3,-0x2dc(%rbp)
  jle    L154
  addl   $0x1,-0x2e0(%rbp)
L159:
  mov    -0x2e4(%rbp),%eax
  cmp    %eax,-0x2e0(%rbp)
  jl     L198
  movl   $0x0,-0x2e0(%rbp)
  jmp    L141
L102:
  mov    -0x2e4(%rbp),%eax
  pxor   %xmm2,%xmm2
  cvtsi2sd %eax,%xmm2
  movsd  D73(%rip),%xmm0
  movapd %xmm0,%xmm1
  divsd  %xmm2,%xmm1
  mov    -0x2e0(%rbp),%eax
  cltq
  movsd  -0x2d0(%rbp,%rax,8),%xmm0
  mulsd  %xmm1,%xmm0
  mov    -0x2e0(%rbp),%eax
  cltq
  movsd  %xmm0,-0x2b0(%rbp,%rax,8)
  addl   $0x1,-0x2e0(%rbp)
L141:
  cmpl   $0x3,-0x2e0(%rbp)
  jle    L102
  lea    D16(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x0,-0x2e0(%rbp)
  jmp    L21
L104:
  movl   $0x0,-0x2dc(%rbp)
  jmp    L28
L152:
  cmpl   $0x2,-0x2dc(%rbp)
  jg     L185
  mov    -0x2dc(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x2e0(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  mov    -0x290(%rbp,%rax,8),%rax
  movq   %rax,%xmm0
  lea    D93(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  jmp    L192
L185:
  mov    -0x2dc(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x2e0(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  mov    -0x290(%rbp,%rax,8),%rax
  movq   %rax,%xmm0
  lea    D40(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
L192:
  addl   $0x1,-0x2dc(%rbp)
L28:
  cmpl   $0x3,-0x2dc(%rbp)
  jle    L152
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x2e0(%rbp)
L21:
  mov    -0x2e4(%rbp),%eax
  cmp    %eax,-0x2e0(%rbp)
  jl     L104
  movl   $0x0,-0x2e0(%rbp)
  jmp    L251
L17:
  cmpl   $0x2,-0x2e0(%rbp)
  jg     L12
  mov    -0x2e0(%rbp),%eax
  cltq
  mov    -0x2b0(%rbp,%rax,8),%rax
  movq   %rax,%xmm0
  lea    D93(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  jmp    L87
L12:
  mov    -0x2e0(%rbp),%eax
  cltq
  mov    -0x2b0(%rbp,%rax,8),%rax
  movq   %rax,%xmm0
  lea    D40(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
L87:
  addl   $0x1,-0x2e0(%rbp)
L251:
  cmpl   $0x3,-0x2e0(%rbp)
  jle    L17
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L58
  call   <__stack_chk_fail@plt>
L58:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: tag: D85
type_infered: string
name: extract_symbolic_data
arguments: tag: D39
type_infered: string
name: extract_symbolic_data
arguments: tag: D43
type_infered: string
name: extract_symbolic_data
arguments: tag: D89
type_infered: byte[16]
name: extract_symbolic_data
arguments: tag: D73
type_infered: f64
name: extract_symbolic_data
arguments: tag: D31
type_infered: byte[8]
name: extract_symbolic_data
arguments: tag: D16
type_infered: string
name: extract_symbolic_data
arguments: tag: D93
type_infered: string
name: extract_symbolic_data
arguments: tag: D40
type_infered: string

tool: D85: %d

tool: D39: Pogresan unos broja. Unesite ponovno broj studenata:

tool: D43: %lf

tool: {"D89": [0x00,0x00,0x00,0x00,0x00,0x00,0x49,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x40]}

tool: D73: 100

tool: {"D31": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

tool: D16: Prolaznost:

tool: D93: %.0lf	

tool: D40: %.0lf

assistant: ```c
int main() {
  int i, j, studenti;
  double postotak, tablica[20][4] = {{0}}, prolaznost[4] = {}, pomocna[4] = {};
  for (i = 0; i < 20; i++) {
    scanf("%d", &studenti);
    if (studenti < 2 || studenti > 10) {
      printf("Pogresan unos broja. Unesite ponovno broj studenata:\n");
      continue;
    } else {
      break;
    }
  }
  for (i = 0; i < studenti; i++) {
    for (j = 0; j < 4; j++) {
      scanf("%lf", &postotak);
      tablica[i][j] = postotak;
    }
  }
  for (i = 0; i < studenti; i++) {
    for (j = 0; j < 4; j++) {
      if (tablica[i][j] >= 50 && tablica[i][j] <= 100) {
        prolaznost[j]++;
      }
    }
  }
  for (i = 0; i < 4; i++) {
    pomocna[i] = (100.00 / studenti) * prolaznost[i];
  }
  printf("Prolaznost:\n");
  for (i = 0; i < studenti; i++) {
    for (j = 0; j < 4; j++) {
      if (j <= 2) {
        printf("%.0lf\t", tablica[i][j]);
      } else {
        printf("%.0lf", tablica[i][j]);
      }
    }
    printf("\n");
  }
  for (i = 0; i < 4; i++) {
    if (i <= 2) {
      printf("%.0lf\t", pomocna[i]);
    } else {
      printf("%.0lf", pomocna[i]);
    }
  }
  return 0;
}
```