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

```asm
<implicit_3Dz>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x138,%rsp
  mov    0x178(%rsp),%eax
  movslq 0x170(%rsp),%r15
  mov    %rdi,0x48(%rsp)
  mov    %rcx,0xa8(%rsp)
  mov    %eax,0xf0(%rsp)
  mov    0x180(%rsp),%eax
  mov    %r15,%r12
  lea    0x0(,%r15,8),%ebx
  mov    %r9d,0x98(%rsp)
  mov    %eax,0x8(%rsp)
  mov    0x188(%rsp),%eax
  movsd  %xmm0,0xf8(%rsp)
  mov    %eax,0x10(%rsp)
  lea    -0x1(%r15),%eax
  lea    0x0(,%rax,8),%r13d
  movsd  %xmm1,0x20(%rsp)
  mov    %r13d,%edi
  movsd  %xmm2,0x28(%rsp)
  movsd  %xmm3,0x30(%rsp)
  movsd  %xmm4,0x40(%rsp)
  movsd  %xmm5,0x38(%rsp)
  mov    %rsi,0x18(%rsp)
  mov    %rdx,0x110(%rsp)
  mov    %eax,0x9c(%rsp)
  call   <malloc@plt>
  mov    %ebx,%edi
  mov    %rax,0xa0(%rsp)
  call   <malloc@plt>
  mov    %r13d,%edi
  mov    %rax,0xb0(%rsp)
  call   <malloc@plt>
  mov    %r13d,%edi
  mov    %rax,%rbp
  call   <malloc@plt>
  mov    %ebx,%edi
  mov    %rax,%r14
  call   <malloc@plt>
  mov    %r13d,%edi
  mov    %rax,0xb8(%rsp)
  call   <malloc@plt>
  mov    %r13d,%edi
  mov    %rax,0xc0(%rsp)
  call   <malloc@plt>
  mov    %ebx,%edi
  mov    %rax,0x68(%rsp)
  call   <malloc@plt>
  mov    %ebx,%edi
  mov    %rax,0x70(%rsp)
  call   <malloc@plt>
  mov    %ebx,%edi
  mov    %rax,0x60(%rsp)
  call   <malloc@plt>
  mov    %ebx,%edi
  mov    %rax,0x78(%rsp)
  call   <malloc@plt>
  mov    %ebx,%edi
  mov    %rax,%r13
  call   <malloc@plt>
  mov    0xa8(%rsp),%rbx
  mov    0xa0(%rsp),%rdx
  mov    %r15d,%esi
  mov    %rax,0x128(%rsp)
  mov    %rbx,%rdi
  call   <compute_dx@plt>
  mov    0xb0(%rsp),%rdx
  mov    0xa0(%rsp),%rdi
  mov    %r15d,%esi
  call   <compute_dfactor@plt>
  mov    %rbp,%rdx
  mov    %r15d,%esi
  mov    %rbx,%rdi
  call   <compute_xInt@plt>
  test   %r15d,%r15d
  movsd  0x40(%rsp),%xmm6
  jle    L164
  xor    %ebx,%ebx
  mov    %r15d,0x58(%rsp)
  mov    %rbp,0x40(%rsp)
  mov    %rbx,%r12
  mov    0xb8(%rsp),%rbp
  mov    0xa8(%rsp),%rbx
  movsd  %xmm6,0x50(%rsp)
  nopw   0x0(%rax,%rax,1)
L165:
  movsd  0xf8(%rsp),%xmm1
  movsd  (%rbx,%r12,8),%xmm0
  call   <Vfunc@plt>
  movsd  %xmm0,0x0(%rbp,%r12,8)
  add    $0x1,%r12
  cmp    %r15,%r12
  jne    L165
  mov    0x40(%rsp),%rbp
  movsd  0x50(%rsp),%xmm6
  mov    0x58(%rsp),%r12d
L164:
  mov    0x9c(%rsp),%edx
  lea    -0x2(%r12),%eax
  xor    %ebx,%ebx
  test   %edx,%edx
  jle    L11
  mov    %r13,0x40(%rsp)
  mov    %rbx,%r13
  mov    0xc0(%rsp),%rbx
  mov    %r12d,0x58(%rsp)
  mov    %rbp,%r12
  mov    %rax,%rbp
  movsd  %xmm6,0x50(%rsp)
  nopw   0x0(%rax,%rax,1)
L191:
  movsd  0xf8(%rsp),%xmm1
  movsd  (%r12,%r13,8),%xmm0
  call   <Vfunc@plt>
  mov    %r13,%rdx
  movsd  %xmm0,(%rbx,%r13,8)
  add    $0x1,%r13
  cmp    %rbp,%rdx
  jne    L191
  mov    %r12,%rbp
  mov    0x40(%rsp),%r13
  movsd  0x50(%rsp),%xmm6
  mov    0x58(%rsp),%r12d
L11:
  mov    %r12d,%edi
  movsd  %xmm6,0x40(%rsp)
  call   <tridiag_malloc@plt>
  mov    0x10(%rsp),%edi
  cmp    %edi,0x8(%rsp)
  movsd  0x40(%rsp),%xmm6
  jge    L184
  lea    0x0(,%r15,8),%rdi
  mov    0xa8(%rsp),%rcx
  lea    -0x8(%rdi),%rax
  mov    %rdi,0xc8(%rsp)
  add    %rax,%rcx
  add    0x60(%rsp),%rax
  mov    %rax,0x100(%rsp)
  mov    0xa0(%rsp),%rax
  mov    %rcx,0xd0(%rsp)
  lea    -0x10(%rax,%rdi,1),%rax
  mov    %rax,0x108(%rsp)
  mov    0x98(%rsp),%eax
  test   %eax,%eax
  jle    L184
  mov    %eax,%edi
  movslq 0x8(%rsp),%rdx
  mov    0x18(%rsp),%rsi
  imul   %r12d,%edi
  movsd  0x20(%rsp),%xmm3
  movsd  0x28(%rsp),%xmm4
  movsd  0x30(%rsp),%xmm5
  mov    %edi,0x11c(%rsp)
  mov    %eax,%edi
  imul   %edx,%eax
  imul   %r12d,%eax
  mov    %eax,0x118(%rsp)
  lea    (%rsi,%rdx,8),%rax
  mov    %rax,0x58(%rsp)
  mov    0x10(%rsp),%eax
  sub    $0x1,%eax
  sub    %edx,%eax
  add    %rdx,%rax
  lea    0x8(%rsi,%rax,8),%rax
  mov    %rax,0x120(%rsp)
  lea    -0x1(%rdi),%eax
  mov    0x110(%rsp),%rdi
  lea    0x8(%rdi,%rax,8),%rax
  mov    %rax,0xd8(%rsp)
  mov    %r12d,%eax
  shr    %eax
  sub    $0x1,%eax
  add    $0x1,%rax
  shl    $0x4,%rax
  mov    %rax,0xe8(%rsp)
  mov    %r12d,%eax
  and    $0xfffffffe,%eax
  mov    %eax,0xf4(%rsp)
  cltq
  lea    0x0(%r13,%rax,8),%rax
  mov    %rax,0x50(%rsp)
  lea    -0x2(%r12),%eax
  mov    %rax,0xe0(%rsp)
  nopl   0x0(%rax)
L26:
  movslq 0x118(%rsp),%rax
  mov    0x48(%rsp),%rcx
  mov    %eax,0x98(%rsp)
  lea    (%rcx,%rax,8),%rbx
  mov    0x110(%rsp),%rax
  mov    %rax,0x40(%rsp)
  nopl   (%rax)
L200:
  mov    0x58(%rsp),%rax
  movsd  %xmm6,0x30(%rsp)
  xor    %r15d,%r15d
  movsd  %xmm5,0x28(%rsp)
  movsd  (%rax),%xmm1
  mov    0x40(%rsp),%rax
  movsd  %xmm4,0x20(%rsp)
  movsd  %xmm3,0x18(%rsp)
  movsd  (%rax),%xmm2
  mov    0xa8(%rsp),%rax
  movsd  %xmm1,0x8(%rsp)
  movsd  (%rax),%xmm0
  movsd  %xmm2,0x10(%rsp)
  call   <Mfunc3D@plt>
  mov    0xd0(%rsp),%rax
  movsd  0x30(%rsp),%xmm6
  movsd  0x28(%rsp),%xmm5
  movsd  0x20(%rsp),%xmm4
  movsd  %xmm0,0x88(%rsp)
  movsd  0x18(%rsp),%xmm3
  movsd  0x10(%rsp),%xmm2
  movsd  0x8(%rsp),%xmm1
  movsd  (%rax),%xmm0
  call   <Mfunc3D@plt>
  mov    0x9c(%rsp),%eax
  movsd  0x8(%rsp),%xmm1
  movsd  0x10(%rsp),%xmm2
  movsd  0x18(%rsp),%xmm3
  movsd  %xmm0,0x90(%rsp)
  test   %eax,%eax
  movsd  0x20(%rsp),%xmm4
  movsd  0x28(%rsp),%xmm5
  movsd  0x30(%rsp),%xmm6
  jle    L263
  mov    %rbx,0x80(%rsp)
  mov    %rbp,%rbx
  mov    %r15,%rbp
  mov    0xe0(%rsp),%r15
  nopw   0x0(%rax,%rax,1)
L180:
  movsd  (%rbx,%rbp,8),%xmm0
  movsd  %xmm6,0x30(%rsp)
  movsd  %xmm5,0x28(%rsp)
  movsd  %xmm4,0x20(%rsp)
  movsd  %xmm3,0x18(%rsp)
  movsd  %xmm2,0x10(%rsp)
  movsd  %xmm1,0x8(%rsp)
  call   <Mfunc3D@plt>
  mov    %rbp,%rax
  movsd  0x8(%rsp),%xmm1
  movsd  0x10(%rsp),%xmm2
  movsd  %xmm0,(%r14,%rbp,8)
  add    $0x1,%rbp
  cmp    %rax,%r15
  movsd  0x18(%rsp),%xmm3
  movsd  0x20(%rsp),%xmm4
  movsd  0x28(%rsp),%xmm5
  movsd  0x30(%rsp),%xmm6
  jne    L180
  mov    %rbx,%rbp
  mov    0x80(%rsp),%rbx
L263:
  mov    0xa0(%rsp),%r15
  mov    0x68(%rsp),%r8
  mov    %r12d,%ecx
  mov    %r14,%rsi
  mov    0xf0(%rsp),%r9d
  mov    0xc0(%rsp),%rdx
  movsd  %xmm6,0x20(%rsp)
  mov    %r15,%rdi
  movsd  %xmm5,0x18(%rsp)
  movsd  %xmm4,0x10(%rsp)
  movsd  %xmm3,0x8(%rsp)
  call   <compute_delj@plt>
  sub    $0x8,%rsp
  mov    %r12d,%r9d
  mov    %r14,%rcx
  push   0x80(%rsp)
  mov    %r15,%rdi
  push   0x70(%rsp)
  push   0x88(%rsp)
  movsd  0x58(%rsp),%xmm0
  mov    0xd8(%rsp),%r8
  mov    0x88(%rsp),%rdx
  mov    0xd0(%rsp),%rsi
  call   <compute_abc_nobc@plt>
  add    $0x20,%rsp
  test   %r12d,%r12d
  movsd  0x8(%rsp),%xmm3
  movsd  0x10(%rsp),%xmm4
  movsd  0x18(%rsp),%xmm5
  movsd  0x20(%rsp),%xmm6
  jle    L84
  lea    0x8(%rbx),%rax
  cmp    %rax,%r13
  je     L36
  cmp    $0x1,%r12d
  je     L36
  movsd  0x38(%rsp),%xmm1
  mov    0xe8(%rsp),%rdx
  xor    %eax,%eax
  unpcklpd %xmm1,%xmm1
L133:
  movupd (%rbx,%rax,1),%xmm0
  divpd  %xmm1,%xmm0
  movups %xmm0,0x0(%r13,%rax,1)
  add    $0x10,%rax
  cmp    %rdx,%rax
  jne    L133
  mov    0xf4(%rsp),%eax
  cmp    %r12d,%eax
  je     L84
  mov    0x48(%rsp),%rsi
  add    0x98(%rsp),%eax
  cltq
  movsd  (%rsi,%rax,8),%xmm0
  mov    0x50(%rsp),%rax
  divsd  0x38(%rsp),%xmm0
  movsd  %xmm0,(%rax)
L84:
  mov    0x58(%rsp),%rax
  pxor   %xmm7,%xmm7
  movsd  (%rax),%xmm0
  ucomisd %xmm7,%xmm0
  jp     L29
  jne    L29
  mov    0x40(%rsp),%rax
  ucomisd (%rax),%xmm7
  jp     L29
  jne    L29
  movapd %xmm7,%xmm2
  movsd  0x88(%rsp),%xmm7
  comisd %xmm7,%xmm2
  jb     L29
  movsd  D34(%rip),%xmm0
  mov    0xa0(%rsp),%rax
  divsd  0xf8(%rsp),%xmm0
  subsd  %xmm7,%xmm0
  addsd  %xmm0,%xmm0
  divsd  (%rax),%xmm0
  mov    0x60(%rsp),%rax
  addsd  (%rax),%xmm0
  movsd  %xmm0,(%rax)
  mov    0x58(%rsp),%rax
  movsd  (%rax),%xmm0
  cs nopw 0x0(%rax,%rax,1)
L29:
  ucomisd D43(%rip),%xmm0
  jp     L23
  jne    L23
  mov    0x40(%rsp),%rax
  movsd  D43(%rip),%xmm7
  ucomisd (%rax),%xmm7
  jp     L23
  jne    L23
  movsd  0x90(%rsp),%xmm7
  pxor   %xmm2,%xmm2
  comisd %xmm2,%xmm7
  jb     L23
  mov    0x108(%rsp),%rax
  movsd  D5(%rip),%xmm0
  divsd  0xf8(%rsp),%xmm0
  subsd  %xmm7,%xmm0
  xorpd  D11(%rip),%xmm0
  addsd  %xmm0,%xmm0
  divsd  (%rax),%xmm0
  mov    0x100(%rsp),%rax
  addsd  (%rax),%xmm0
  movsd  %xmm0,(%rax)
  nopl   0x0(%rax)
L23:
  mov    0x78(%rsp),%rdx
  mov    0x60(%rsp),%rsi
  mov    %rbx,%r8
  mov    %r12d,%r9d
  mov    0x70(%rsp),%rdi
  mov    %r13,%rcx
  movsd  %xmm6,0x20(%rsp)
  movsd  %xmm5,0x18(%rsp)
  movsd  %xmm4,0x10(%rsp)
  movsd  %xmm3,0x8(%rsp)
  call   <tridiag_premalloc@plt>
  addq   $0x8,0x40(%rsp)
  mov    0x40(%rsp),%rax
  add    %r12d,0x98(%rsp)
  add    0xc8(%rsp),%rbx
  cmp    0xd8(%rsp),%rax
  movsd  0x8(%rsp),%xmm3
  movsd  0x10(%rsp),%xmm4
  movsd  0x18(%rsp),%xmm5
  movsd  0x20(%rsp),%xmm6
  jne    L200
  addq   $0x8,0x58(%rsp)
  mov    0x11c(%rsp),%edi
  mov    0x58(%rsp),%rax
  add    %edi,0x118(%rsp)
  cmp    0x120(%rsp),%rax
  jne    L26
L184:
  xor    %eax,%eax
  call   <tridiag_free@plt>
  mov    0xa0(%rsp),%rdi
  call   <free@plt>
  mov    0xb0(%rsp),%rdi
  call   <free@plt>
  mov    %rbp,%rdi
  call   <free@plt>
  mov    %r14,%rdi
  call   <free@plt>
  mov    0xb8(%rsp),%rdi
  call   <free@plt>
  mov    0xc0(%rsp),%rdi
  call   <free@plt>
  mov    0x68(%rsp),%rdi
  call   <free@plt>
  mov    0x70(%rsp),%rdi
  call   <free@plt>
  mov    0x60(%rsp),%rdi
  call   <free@plt>
  mov    0x78(%rsp),%rdi
  call   <free@plt>
  mov    %r13,%rdi
  call   <free@plt>
  mov    0x128(%rsp),%rdi
  add    $0x138,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1100 <free@plt>
  xchg   %ax,%ax
L36:
  mov    0x9c(%rsp),%ecx
  xor    %eax,%eax
  nopl   0x0(%rax)
L33:
  mov    %rax,%rdx
  movsd  (%rbx,%rax,8),%xmm0
  divsd  0x38(%rsp),%xmm0
  movsd  %xmm0,0x0(%r13,%rax,8)
  add    $0x1,%rax
  cmp    %rdx,%rcx
  jne    L33
  jmp    L84
```

tool_calls: name: disassemble_data
arguments: tag: D34
datatype: f64
name: disassemble_data
arguments: tag: D43
datatype: byte[8]
name: disassemble_data
arguments: tag: D5
datatype: byte[8]
name: disassemble_data
arguments: tag: D11
datatype: byte[16]

tool: D34: 0.5

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

tool: {"D5": [0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0xbf]}

tool: {"D11": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

assistant: ```c
void implicit_3Dz(double *phi, double *xx, double *yy, double *zz, double nu3, double m31, double m32, double gamma3, double h3, double dt, int L, int M, int N, int use_delj_trick, int Lstart, int Lend) {
  int ii, jj, kk;
  double *dz = malloc((N - 1) * sizeof(*dz));
  double *dfactor = malloc(N * sizeof(*dfactor));
  double *zInt = malloc((N - 1) * sizeof(*zInt));
  double Mfirst, Mlast;
  double *MInt = malloc((N - 1) * sizeof(*MInt));
  double *V = malloc(N * sizeof(*V));
  double *VInt = malloc((N - 1) * sizeof(*VInt));
  double *delj = malloc((N - 1) * sizeof(*delj));
  double *a = malloc(N * sizeof(*a));
  double *b = malloc(N * sizeof(*b));
  double *c = malloc(N * sizeof(*c));
  double *r = malloc(N * sizeof(*r));
  double *temp = malloc(N * sizeof(*temp));
  double x, y;
  compute_dx(zz, N, dz);
  compute_dfactor(dz, N, dfactor);
  compute_xInt(zz, N, zInt);
  for (kk = 0; kk < N; kk++)
    V[kk] = Vfunc(zz[kk], nu3);
  for (kk = 0; kk < N - 1; kk++)
    VInt[kk] = Vfunc(zInt[kk], nu3);
  tridiag_malloc(N);
  for (ii = Lstart; ii < Lend; ii++) {
    for (jj = 0; jj < M; jj++) {
      x = xx[ii];
      y = yy[jj];
      Mfirst = Mfunc3D(zz[0], x, y, m31, m32, gamma3, h3);
      Mlast = Mfunc3D(zz[N - 1], x, y, m31, m32, gamma3, h3);
      for (kk = 0; kk < N - 1; kk++)
        MInt[kk] = Mfunc3D(zInt[kk], x, y, m31, m32, gamma3, h3);
      compute_delj(dz, MInt, VInt, N, delj, use_delj_trick);
      compute_abc_nobc(dz, dfactor, delj, MInt, V, dt, N, a, b, c);
      for (kk = 0; kk < N; kk++)
        r[kk] = phi[ii * M * N + jj * N + kk] / dt;
      if ((xx[ii] == 0) && (yy[jj] == 0) && (Mfirst <= 0))
        b[0] += (0.5 / nu3 - Mfirst) * 2. / dz[0];
      if ((xx[ii] == 1) && (yy[jj] == 1) && (Mlast >= 0))
        b[N - 1] += -(-0.5 / nu3 - Mlast) * 2. / dz[N - 2];
      tridiag_premalloc(a, b, c, r, &phi[ii * M * N + jj * N], N);
    }
  }
  tridiag_free();
  free(dz);
  free(dfactor);
  free(zInt);
  free(MInt);
  free(V);
  free(VInt);
  free(delj);
  free(a);
  free(b);
  free(c);
  free(r);
  free(temp);
}
```