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

```asm
<ncctop>:
  endbr64
  push   %rbp
  mov    %rsi,%r9
  mov    %rcx,%r8
  mov    %rdx,%rsi
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    0xf(,%r9,8),%rax
  mov    %rsp,%rcx
  mov    %rax,%rdx
  and    $0xfffffffffffff000,%rax
  sub    %rax,%rcx
  and    $0xfffffffffffffff0,%rdx
  cmp    %rcx,%rsp
  je     L10
L3:
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  cmp    %rcx,%rsp
  jne    L3
L10:
  and    $0xfff,%edx
  sub    %rdx,%rsp
  test   %rdx,%rdx
  jne    L180
L142:
  lea    0xf(,%rdi,8),%rdx
  mov    %rsp,%r10
  mov    %rsp,%rax
  mov    %rdx,%rcx
  and    $0xfffffffffffff000,%rdx
  sub    %rdx,%r10
  and    $0xfffffffffffffff0,%rcx
  cmp    %r10,%rsp
  je     L113
L111:
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  cmp    %r10,%rsp
  jne    L111
L113:
  and    $0xfff,%ecx
  sub    %rcx,%rsp
  test   %rcx,%rcx
  jne    L81
L214:
  mov    %rsp,%rcx
  test   %r9,%r9
  jle    L145
  cmp    $0x1,%r9
  je     L186
  mov    %r9,%r10
  movapd D23(%rip),%xmm2
  xor    %edx,%edx
  shr    %r10
  shl    $0x4,%r10
  nopl   0x0(%rax)
L93:
  movupd (%r8,%rdx,1),%xmm1
  movupd (%rsi,%rdx,1),%xmm3
  mulpd  %xmm2,%xmm1
  addpd  %xmm3,%xmm1
  movups %xmm1,(%rax,%rdx,1)
  add    $0x10,%rdx
  cmp    %rdx,%r10
  jne    L93
  mov    %r9,%rdx
  and    $0xfffffffffffffffe,%rdx
  and    $0x1,%r9d
  je     L145
L12:
  movsd  D23(%rip),%xmm1
  mulsd  (%r8,%rdx,8),%xmm1
  addsd  (%rsi,%rdx,8),%xmm1
  movsd  %xmm1,(%rax,%rdx,8)
L145:
  test   %rdi,%rdi
  jle    L1
  cmp    $0x1,%rdi
  je     L75
  mov    %rdi,%r8
  movapd D4(%rip),%xmm2
  xor    %edx,%edx
  xor    %esi,%esi
  shr    %r8
  nopw   0x0(%rax,%rax,1)
L172:
  movupd 0x8(%rax,%rdx,1),%xmm1
  movupd (%rax,%rdx,1),%xmm4
  add    $0x1,%rsi
  addpd  %xmm4,%xmm1
  mulpd  %xmm2,%xmm1
  movups %xmm1,(%rcx,%rdx,1)
  add    $0x10,%rdx
  cmp    %r8,%rsi
  jne    L172
  mov    %rdi,%rdx
  and    $0xfffffffffffffffe,%rdx
  test   $0x1,%dil
  je     L62
L34:
  movsd  0x8(%rax,%rdx,8),%xmm1
  addsd  (%rax,%rdx,8),%xmm1
  mulsd  D4(%rip),%xmm1
  movsd  %xmm1,(%rcx,%rdx,8)
L62:
  xor    %eax,%eax
  jmp    L152
  nopl   (%rax)
L184:
  lea    0x1(%rax),%rdx
  cmp    %rdx,%rdi
  je     L227
  mov    %rdx,%rax
L152:
  movsd  (%rcx,%rax,8),%xmm1
  comisd %xmm0,%xmm1
  jb     L184
L227:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  jne    L57
  leave
  ret
  nopl   0x0(%rax,%rax,1)
L180:
  orq    $0x0,-0x8(%rsp,%rdx,1)
  jmp    L142
  nopl   0x0(%rax,%rax,1)
L1:
  xor    %eax,%eax
  jmp    L227
L75:
  xor    %edx,%edx
  jmp    L34
L186:
  xor    %edx,%edx
  jmp    L12
L81:
  orq    $0x0,-0x8(%rsp,%rcx,1)
  jmp    L214
L57:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_tag: D23
type_guessed: f64[2]
name: parse_data
arguments: data_tag: D4
type_guessed: f64[2]

tool: {"D23": [101320.0,101320.0]}

tool: {"D4": [0.5,0.5]}

assistant: ```c
long ncctop(double cptop, long nlev, long nlevp1, double *vct_a, double *vct_b) {
  long nctop = 0;
  long jk;
  double za, zb, zph[nlevp1], zp[nlev];
  for (jk = 0; jk < nlevp1; ++jk) {
    za = vct_a[jk];
    zb = vct_b[jk];
    zph[jk] = za + zb * 101320.;
  }
  for (jk = 0; jk < nlev; ++jk)
    zp[jk] = (zph[jk] + zph[jk + 1]) * 0.5;
  for (jk = 0; jk < nlev; ++jk) {
    nctop = jk;
    if (zp[jk] >= cptop)
      break;
  }
  return (nctop);
}
```