user: 这段汇编代码用C语言表示是什么样的:

```asm
<extendsurface>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xd0,%rsp
  mov    %edi,-0xa4(%rbp)
  mov    %esi,-0xa8(%rbp)
  mov    %edx,-0xac(%rbp)
  mov    %rcx,-0xb8(%rbp)
  mov    %r8,-0xc0(%rbp)
  mov    %r9,-0xc8(%rbp)
  mov    0x10(%rbp),%rax
  mov    %rax,-0xd0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x94(%rbp)
  jmp    L401
L470:
  movl   $0x0,-0x90(%rbp)
  jmp    L404
L4:
  movl   $0x0,-0x8c(%rbp)
  jmp    L262
L391:
  cmpl   $0x1,-0x94(%rbp)
  je     L102
  cmpl   $0x1,-0x90(%rbp)
  je     L113
  cmpl   $0x1,-0x8c(%rbp)
  je     L112
  movss  D44(%rip),%xmm0
  jmp    L504
L112:
  movss  D16(%rip),%xmm0
  jmp    L504
L113:
  cmpl   $0x1,-0x8c(%rbp)
  je     L418
  movss  D16(%rip),%xmm0
  jmp    L504
L418:
  movss  D32(%rip),%xmm0
  jmp    L504
L102:
  cmpl   $0x1,-0x90(%rbp)
  je     L224
  cmpl   $0x1,-0x8c(%rbp)
  je     L276
  movss  D16(%rip),%xmm0
  jmp    L504
L276:
  movss  D32(%rip),%xmm0
  jmp    L504
L224:
  cmpl   $0x1,-0x8c(%rbp)
  je     L45
  movss  D32(%rip),%xmm0
  jmp    L504
L45:
  pxor   %xmm0,%xmm0
L504:
  mov    -0x8c(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %eax,%edx
  mov    -0x90(%rbp),%eax
  add    %eax,%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %eax,%edx
  mov    -0x94(%rbp),%eax
  add    %edx,%eax
  cltq
  movss  %xmm0,-0x80(%rbp,%rax,4)
  addl   $0x1,-0x8c(%rbp)
L262:
  cmpl   $0x2,-0x8c(%rbp)
  jle    L391
  addl   $0x1,-0x90(%rbp)
L404:
  cmpl   $0x2,-0x90(%rbp)
  jle    L4
  addl   $0x1,-0x94(%rbp)
L401:
  cmpl   $0x2,-0x94(%rbp)
  jle    L470
  movl   $0x0,-0x98(%rbp)
  jmp    L85
L327:
  movl   $0x0,-0xa0(%rbp)
  jmp    L191
L249:
  movl   $0x0,-0x9c(%rbp)
  jmp    L312
L455:
  cmpl   $0x0,-0x98(%rbp)
  je     L278
  cmpl   $0x0,-0xa0(%rbp)
  je     L278
  cmpl   $0x0,-0x9c(%rbp)
  je     L278
  mov    -0xac(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x98(%rbp)
  je     L278
  mov    -0xa4(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0xa0(%rbp)
  je     L278
  mov    -0xa8(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x9c(%rbp)
  jne    L152
L278:
  mov    -0x98(%rbp),%eax
  imul   -0xa4(%rbp),%eax
  mov    %eax,%edx
  mov    -0xa0(%rbp),%eax
  add    %edx,%eax
  imul   -0xa8(%rbp),%eax
  mov    %eax,%edx
  mov    -0x9c(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xb8(%rbp),%rax
  add    %rax,%rdx
  mov    -0x98(%rbp),%eax
  imul   -0xa4(%rbp),%eax
  mov    %eax,%ecx
  mov    -0xa0(%rbp),%eax
  add    %ecx,%eax
  imul   -0xa8(%rbp),%eax
  mov    %eax,%ecx
  mov    -0x9c(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0xc8(%rbp),%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x98(%rbp),%eax
  imul   -0xa4(%rbp),%eax
  mov    %eax,%edx
  mov    -0xa0(%rbp),%eax
  add    %edx,%eax
  imul   -0xa8(%rbp),%eax
  mov    %eax,%edx
  mov    -0x9c(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0xd0(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  jmp    L57
L152:
  mov    -0x98(%rbp),%eax
  imul   -0xa4(%rbp),%eax
  mov    %eax,%edx
  mov    -0xa0(%rbp),%eax
  add    %edx,%eax
  imul   -0xa8(%rbp),%eax
  mov    %eax,%edx
  mov    -0x9c(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0xc0(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L332
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x88(%rbp)
  movl   $0xffffffff,-0x94(%rbp)
  jmp    L273
L384:
  movl   $0xffffffff,-0x90(%rbp)
  jmp    L150
L462:
  movl   $0xffffffff,-0x8c(%rbp)
  jmp    L212
L335:
  mov    -0x94(%rbp),%eax
  lea    0x1(%rax),%ecx
  mov    -0x90(%rbp),%eax
  lea    0x1(%rax),%esi
  mov    -0x8c(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  lea    (%rsi,%rax,1),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    %ecx,%eax
  cltq
  movss  -0x80(%rbp,%rax,4),%xmm1
  mov    -0x9c(%rbp),%edx
  mov    -0x90(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0xa0(%rbp),%edx
  mov    -0x94(%rbp),%eax
  lea    (%rdx,%rax,1),%esi
  mov    -0x98(%rbp),%edx
  mov    -0x8c(%rbp),%eax
  add    %edx,%eax
  imul   -0xa4(%rbp),%eax
  add    %esi,%eax
  imul   -0xa8(%rbp),%eax
  add    %ecx,%eax
  movslq %eax,%rdx
  mov    -0xc0(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x88(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x88(%rbp)
  addl   $0x1,-0x8c(%rbp)
L212:
  cmpl   $0x1,-0x8c(%rbp)
  jle    L335
  addl   $0x1,-0x90(%rbp)
L150:
  cmpl   $0x1,-0x90(%rbp)
  jle    L462
  addl   $0x1,-0x94(%rbp)
L273:
  cmpl   $0x1,-0x94(%rbp)
  jle    L384
  pxor   %xmm0,%xmm0
  ucomiss -0x88(%rbp),%xmm0
  jp     L218
  pxor   %xmm0,%xmm0
  ucomiss -0x88(%rbp),%xmm0
  je     L307
L218:
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x84(%rbp)
  movl   $0xffffffff,-0x94(%rbp)
  jmp    L303
L47:
  movl   $0xffffffff,-0x90(%rbp)
  jmp    L393
L246:
  movl   $0xffffffff,-0x8c(%rbp)
  jmp    L90
L88:
  mov    -0x94(%rbp),%eax
  lea    0x1(%rax),%ecx
  mov    -0x90(%rbp),%eax
  lea    0x1(%rax),%esi
  mov    -0x8c(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  lea    (%rsi,%rax,1),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    %ecx,%eax
  cltq
  movss  -0x80(%rbp,%rax,4),%xmm1
  mov    -0x9c(%rbp),%edx
  mov    -0x90(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0xa0(%rbp),%edx
  mov    -0x94(%rbp),%eax
  lea    (%rdx,%rax,1),%esi
  mov    -0x98(%rbp),%edx
  mov    -0x8c(%rbp),%eax
  add    %edx,%eax
  imul   -0xa4(%rbp),%eax
  add    %esi,%eax
  imul   -0xa8(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xb8(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x9c(%rbp),%edx
  mov    -0x90(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0xa0(%rbp),%edx
  mov    -0x94(%rbp),%eax
  lea    (%rdx,%rax,1),%esi
  mov    -0x98(%rbp),%edx
  mov    -0x8c(%rbp),%eax
  add    %edx,%eax
  imul   -0xa4(%rbp),%eax
  add    %esi,%eax
  imul   -0xa8(%rbp),%eax
  add    %ecx,%eax
  movslq %eax,%rdx
  mov    -0xc0(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  mulss  %xmm1,%xmm0
  movss  -0x84(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x84(%rbp)
  addl   $0x1,-0x8c(%rbp)
L90:
  cmpl   $0x1,-0x8c(%rbp)
  jle    L88
  addl   $0x1,-0x90(%rbp)
L393:
  cmpl   $0x1,-0x90(%rbp)
  jle    L246
  addl   $0x1,-0x94(%rbp)
L303:
  cmpl   $0x1,-0x94(%rbp)
  jle    L47
  mov    -0x98(%rbp),%eax
  imul   -0xa4(%rbp),%eax
  mov    %eax,%edx
  mov    -0xa0(%rbp),%eax
  add    %edx,%eax
  imul   -0xa8(%rbp),%eax
  mov    %eax,%edx
  mov    -0x9c(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xc8(%rbp),%rax
  add    %rdx,%rax
  movss  -0x84(%rbp),%xmm0
  divss  -0x88(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x98(%rbp),%eax
  imul   -0xa4(%rbp),%eax
  mov    %eax,%edx
  mov    -0xa0(%rbp),%eax
  add    %edx,%eax
  imul   -0xa8(%rbp),%eax
  mov    %eax,%edx
  mov    -0x9c(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0xd0(%rbp),%rax
  add    %rdx,%rax
  movb   $0x1,(%rax)
  jmp    L57
L307:
  mov    -0x98(%rbp),%eax
  imul   -0xa4(%rbp),%eax
  mov    %eax,%edx
  mov    -0xa0(%rbp),%eax
  add    %edx,%eax
  imul   -0xa8(%rbp),%eax
  mov    %eax,%edx
  mov    -0x9c(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xb8(%rbp),%rax
  add    %rax,%rdx
  mov    -0x98(%rbp),%eax
  imul   -0xa4(%rbp),%eax
  mov    %eax,%ecx
  mov    -0xa0(%rbp),%eax
  add    %ecx,%eax
  imul   -0xa8(%rbp),%eax
  mov    %eax,%ecx
  mov    -0x9c(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0xc8(%rbp),%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x98(%rbp),%eax
  imul   -0xa4(%rbp),%eax
  mov    %eax,%edx
  mov    -0xa0(%rbp),%eax
  add    %edx,%eax
  imul   -0xa8(%rbp),%eax
  mov    %eax,%edx
  mov    -0x9c(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0xd0(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  jmp    L57
L332:
  mov    -0x98(%rbp),%eax
  imul   -0xa4(%rbp),%eax
  mov    %eax,%edx
  mov    -0xa0(%rbp),%eax
  add    %edx,%eax
  imul   -0xa8(%rbp),%eax
  mov    %eax,%edx
  mov    -0x9c(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xb8(%rbp),%rax
  add    %rax,%rdx
  mov    -0x98(%rbp),%eax
  imul   -0xa4(%rbp),%eax
  mov    %eax,%ecx
  mov    -0xa0(%rbp),%eax
  add    %ecx,%eax
  imul   -0xa8(%rbp),%eax
  mov    %eax,%ecx
  mov    -0x9c(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0xc8(%rbp),%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x98(%rbp),%eax
  imul   -0xa4(%rbp),%eax
  mov    %eax,%edx
  mov    -0xa0(%rbp),%eax
  add    %edx,%eax
  imul   -0xa8(%rbp),%eax
  mov    %eax,%edx
  mov    -0x9c(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  mov    -0xd0(%rbp),%rax
  add    %rdx,%rax
  movb   $0x1,(%rax)
L57:
  addl   $0x1,-0x9c(%rbp)
L312:
  mov    -0x9c(%rbp),%eax
  cmp    -0xa8(%rbp),%eax
  jl     L455
  addl   $0x1,-0xa0(%rbp)
L191:
  mov    -0xa0(%rbp),%eax
  cmp    -0xa4(%rbp),%eax
  jl     L249
  addl   $0x1,-0x98(%rbp)
L85:
  mov    -0x98(%rbp),%eax
  cmp    -0xac(%rbp),%eax
  jl     L327
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L51
  call   <__stack_chk_fail@plt>
L51:
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D44
datatype: byte[4]
name: parse_data
arguments: data_tag: D16
datatype: byte[4]
name: parse_data
arguments: data_tag: D32
datatype: f32

tool: {"D44": [0x3a,0xcd,0x13,0x3f]}

tool: {"D16": [0xf3,0x04,0x35,0x3f]}

tool: D32: 1

assistant: ```c
void extendsurface(int nx, int ny, int nz, float *E, char *c, float *Ex, char *cx) {
  int ix, iy, iz, i, j, k;
  float R[27], s, t;
  for (i = 0; i < 3; i++)
    for (j = 0; j < 3; j++)
      for (k = 0; k < 3; k++) {
        R[i + 3 * (j + 3 * k)] = (i != 1 ? (j != 1 ? (k != 1 ? 1.0 / sqrt(3.0) : 1.0 / sqrt(2.0)) : (k != 1 ? 1.0 / sqrt(2.0) : 1)) : (j != 1 ? (k != 1 ? 1.0 / sqrt(2.0) : 1) : (k != 1 ? 1 : 0)));
      }
  for (iz = 0; iz < nz; iz++) {
    for (ix = 0; ix < nx; ix++) {
      for (iy = 0; iy < ny; iy++) {
        if (iz == 0 || ix == 0 || iy == 0 || iz == nz - 1 || ix == nx - 1 || iy == ny - 1) {
          Ex[iy + ny * (ix + iz * nx)] = E[iy + ny * (ix + iz * nx)];
          cx[iy + ny * (ix + iz * nx)] = 0;
        } else {
          if (!c[iy + ny * (ix + iz * nx)]) {
            s = 0;
            for (i = -1; i < 2; i++) {
              for (j = -1; j < 2; j++) {
                for (k = -1; k < 2; k++) {
                  s += R[(i + 1) + 3 * ((j + 1) + 3 * (k + 1))] * c[iy + j + ny * (ix + i + nx * (iz + k))];
                }
              }
            }
            if (s) {
              t = 0;
              for (i = -1; i <= 1; i++) {
                for (j = -1; j <= 1; j++) {
                  for (k = -1; k <= 1; k++) {
                    t += (R[(i + 1) + 3 * ((j + 1) + 3 * (k + 1))] * E[iy + j + ny * (ix + i + nx * (iz + k))] * c[iy + j + ny * (ix + i + nx * (iz + k))]);
                  }
                }
              }
              Ex[iy + ny * (ix + iz * nx)] = t / s;
              cx[iy + ny * (ix + iz * nx)] = 1;
            } else {
              Ex[iy + ny * (ix + iz * nx)] = E[iy + ny * (ix + iz * nx)];
              cx[iy + ny * (ix + iz * nx)] = 0;
            }
          } else {
            Ex[iy + ny * (ix + iz * nx)] = E[iy + ny * (ix + iz * nx)];
            cx[iy + ny * (ix + iz * nx)] = 1;
          }
        }
      }
    }
  }
}
```