user: 请将以下的汇编代码转换成C语言代码:

```asm
<pet_c_oplem_dda_att>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xd0,%rsp
  mov    %rdi,-0xa8(%rbp)
  mov    %esi,-0xac(%rbp)
  mov    %rdx,-0xb8(%rbp)
  mov    %ecx,-0xb0(%rbp)
  mov    %r8,-0xc0(%rbp)
  mov    %r9d,-0xc4(%rbp)
  mov    0x50(%rbp),%eax
  imul   0x58(%rbp),%eax
  mov    %eax,-0x6c(%rbp)
  mov    0x48(%rbp),%eax
  cmp    0x50(%rbp),%eax
  jle    L47
  mov    0x48(%rbp),%eax
  mov    %eax,-0x74(%rbp)
L47:
  mov    0x58(%rbp),%eax
  cmp    -0x74(%rbp),%eax
  jle    L34
  mov    0x58(%rbp),%eax
  mov    %eax,-0x74(%rbp)
L34:
  mov    -0x74(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  add    %eax,-0x74(%rbp)
  mov    -0x74(%rbp),%eax
  cltq
  shl    $0x2,%rax
  mov    %rax,%rdi
  call   <malloc@plt>
  mov    %rax,-0x10(%rbp)
  mov    0x50(%rbp),%eax
  imul   0x58(%rbp),%eax
  mov    %eax,-0x6c(%rbp)
  mov    -0x6c(%rbp),%eax
  imul   0x48(%rbp),%eax
  mov    %eax,-0x68(%rbp)
  mov    -0x68(%rbp),%eax
  cltq
  shl    $0x2,%eax
  mov    %eax,-0x64(%rbp)
  mov    -0x64(%rbp),%eax
  mov    %rax,%rdi
  call   <malloc@plt>
  mov    %rax,-0x8(%rbp)
  movl   $0x0,-0x8c(%rbp)
  jmp    L29
L186:
  mov    -0x8c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x60(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x8c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x60(%rbp),%rax
  add    %rdx,%rax
  movss  D26(%rip),%xmm0
  divss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x8c(%rbp)
L29:
  mov    -0x8c(%rbp),%eax
  cmp    -0x68(%rbp),%eax
  jl     L186
  movl   $0x0,-0x70(%rbp)
  jmp    L39
L153:
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0xac(%rbp),%xmm0
  pxor   %xmm2,%xmm2
  cvtsi2ssl 0xa0(%rbp),%xmm2
  movaps %xmm0,%xmm1
  divss  %xmm2,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x70(%rbp),%xmm0
  mulss  %xmm0,%xmm1
  movss  D51(%rip),%xmm0
  addss  %xmm1,%xmm0
  cvttss2si %xmm0,%eax
  mov    %eax,-0x60(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0xac(%rbp),%xmm0
  pxor   %xmm2,%xmm2
  cvtsi2ssl 0xa0(%rbp),%xmm2
  movaps %xmm0,%xmm1
  divss  %xmm2,%xmm1
  mov    -0x70(%rbp),%eax
  add    $0x1,%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  mulss  %xmm0,%xmm1
  movss  D51(%rip),%xmm0
  addss  %xmm1,%xmm0
  cvttss2si %xmm0,%eax
  mov    %eax,-0x5c(%rbp)
  mov    -0x5c(%rbp),%eax
  sub    -0x60(%rbp),%eax
  mov    %eax,-0x58(%rbp)
  mov    -0x64(%rbp),%edx
  mov    -0x8(%rbp),%rax
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <memset@plt>
  mov    -0x60(%rbp),%eax
  mov    %eax,-0x90(%rbp)
  jmp    L81
L90:
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x88(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x84(%rbp)
  mov    -0x90(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0xa8(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%eax
  movzwl %ax,%eax
  mov    %eax,-0x54(%rbp)
  mov    -0x90(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%eax
  movzwl %ax,%eax
  mov    %eax,-0x50(%rbp)
  mov    -0x90(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0xb8(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%eax
  movzwl %ax,%eax
  mov    %eax,-0x4c(%rbp)
  mov    -0x90(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    0x20(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%eax
  movzwl %ax,%eax
  mov    %eax,-0x48(%rbp)
  mov    -0x90(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0xc0(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%eax
  movzwl %ax,%eax
  mov    %eax,-0x44(%rbp)
  mov    -0x90(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    0x30(%rbp),%rax
  add    %rdx,%rax
  movzwl (%rax),%eax
  movzwl %ax,%eax
  mov    %eax,-0x40(%rbp)
  mov    -0x50(%rbp),%eax
  sub    -0x54(%rbp),%eax
  mov    %eax,-0x3c(%rbp)
  mov    -0x48(%rbp),%eax
  sub    -0x4c(%rbp),%eax
  mov    %eax,-0x38(%rbp)
  mov    -0x40(%rbp),%eax
  sub    -0x44(%rbp),%eax
  mov    %eax,-0x34(%rbp)
  mov    -0x3c(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,-0x30(%rbp)
  mov    -0x38(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,-0x2c(%rbp)
  mov    -0x34(%rbp),%eax
  mov    %eax,%edx
  neg    %edx
  cmovns %edx,%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,-0x28(%rbp)
  movss  -0x2c(%rbp),%xmm0
  cvttss2si %xmm0,%eax
  mov    %eax,-0x94(%rbp)
  pxor   %xmm1,%xmm1
  cvtsi2ssl -0x94(%rbp),%xmm1
  movss  -0x30(%rbp),%xmm0
  comiss %xmm1,%xmm0
  jbe    L121
  movss  -0x30(%rbp),%xmm0
  cvttss2si %xmm0,%eax
  mov    %eax,-0x94(%rbp)
L121:
  pxor   %xmm1,%xmm1
  cvtsi2ssl -0x94(%rbp),%xmm1
  movss  -0x28(%rbp),%xmm0
  comiss %xmm1,%xmm0
  jbe    L156
  movss  -0x28(%rbp),%xmm0
  cvttss2si %xmm0,%eax
  mov    %eax,-0x94(%rbp)
L156:
  pxor   %xmm1,%xmm1
  cvtsi2ssl -0x94(%rbp),%xmm1
  movss  D26(%rip),%xmm0
  divss  %xmm1,%xmm0
  movss  %xmm0,-0x24(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x3c(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x24(%rbp),%xmm1
  movss  D53(%rip),%xmm0
  mulss  %xmm1,%xmm0
  cvttss2si %xmm0,%eax
  mov    %eax,-0x20(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x38(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x24(%rbp),%xmm1
  movss  D53(%rip),%xmm0
  mulss  %xmm1,%xmm0
  cvttss2si %xmm0,%eax
  mov    %eax,-0x1c(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x34(%rbp),%xmm0
  movaps %xmm0,%xmm1
  mulss  -0x24(%rbp),%xmm1
  movss  D53(%rip),%xmm0
  mulss  %xmm1,%xmm0
  cvttss2si %xmm0,%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x54(%rbp),%eax
  shl    $0x17,%eax
  mov    %eax,-0x80(%rbp)
  mov    -0x4c(%rbp),%eax
  shl    $0x17,%eax
  mov    %eax,-0x7c(%rbp)
  mov    -0x44(%rbp),%eax
  shl    $0x17,%eax
  mov    %eax,-0x78(%rbp)
  movl   $0x0,-0x8c(%rbp)
  jmp    L72
L109:
  mov    -0x78(%rbp),%eax
  sar    $0x17,%eax
  imul   -0x6c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x7c(%rbp),%eax
  sar    $0x17,%eax
  imul   0x58(%rbp),%eax
  add    %eax,%edx
  mov    -0x80(%rbp),%eax
  sar    $0x17,%eax
  add    %edx,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x8c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rax,%rdx
  mov    -0x14(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x14(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x40(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  movss  -0x88(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x88(%rbp)
  mov    -0x14(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x80(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  movss  -0x84(%rbp),%xmm0
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x84(%rbp)
  mov    -0x20(%rbp),%eax
  add    %eax,-0x80(%rbp)
  mov    -0x1c(%rbp),%eax
  add    %eax,-0x7c(%rbp)
  mov    -0x18(%rbp),%eax
  add    %eax,-0x78(%rbp)
  addl   $0x1,-0x8c(%rbp)
L72:
  mov    -0x8c(%rbp),%eax
  cmp    -0x94(%rbp),%eax
  jl     L109
  pxor   %xmm0,%xmm0
  ucomiss -0x88(%rbp),%xmm0
  jp     L158
  pxor   %xmm0,%xmm0
  ucomiss -0x88(%rbp),%xmm0
  je     L62
L158:
  pxor   %xmm3,%xmm3
  cvtss2sd -0x88(%rbp),%xmm3
  movsd  %xmm3,-0xd0(%rbp)
  movss  -0x84(%rbp),%xmm1
  movss  D48(%rip),%xmm0
  mulss  %xmm1,%xmm0
  pxor   %xmm4,%xmm4
  cvtss2sd %xmm0,%xmm4
  movq   %xmm4,%rax
  movq   %rax,%xmm0
  call   <exp@plt>
  mulsd  -0xd0(%rbp),%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x88(%rbp)
  movss  D26(%rip),%xmm0
  divss  -0x88(%rbp),%xmm0
  movss  %xmm0,-0x88(%rbp)
  movl   $0x0,-0x8c(%rbp)
  jmp    L164
L139:
  mov    -0x8c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x8c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  addss  -0x88(%rbp),%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x8c(%rbp)
L164:
  mov    -0x8c(%rbp),%eax
  cmp    -0x94(%rbp),%eax
  jl     L139
  jmp    L116
L62:
  nop
L116:
  addl   $0x1,-0x90(%rbp)
L81:
  mov    -0x90(%rbp),%eax
  cmp    -0x5c(%rbp),%eax
  jl     L90
  movl   $0x0,-0x8c(%rbp)
  jmp    L182
L84:
  mov    -0x8c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x40(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    -0x8c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm0,%xmm1
  mov    -0x8c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x60(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x8c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x40(%rbp),%rax
  add    %rdx,%rax
  mulss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x8c(%rbp)
L182:
  mov    -0x8c(%rbp),%eax
  cmp    -0x68(%rbp),%eax
  jl     L84
  addl   $0x1,-0x70(%rbp)
L39:
  mov    -0x70(%rbp),%eax
  cmp    0xa0(%rbp),%eax
  jl     L153
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  nop
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D26
type_infered: byte[4]
name: extract_symbolic_data
arguments: data_label: D51
type_infered: byte[4]
name: extract_symbolic_data
arguments: data_label: D53
type_infered: byte[4]
name: extract_symbolic_data
arguments: data_label: D48
type_infered: byte[4]

tool: {"D26": [0x00,0x00,0x80,0x3f]}

tool: {"D51": [0x00,0x00,0x00,0x3f]}

tool: {"D53": [0x00,0x00,0x00,0x4b]}

tool: {"D48": [0x4c,0xa6,0xaa,0x3e]}

assistant: ```c
void pet_c_oplem_dda_att(unsigned short int *X1, int nx1, unsigned short int *Y1, int ny1, unsigned short int *Z1, int nz1, unsigned short int *X2, int nx2, unsigned short int *Y2, int ny2, unsigned short int *Z2, int nz2, float *im, int nim1, int nim2, int nim3, float *NM, int nm1, int nm2, int nm3, float *AM, int am1, int am2, int am3, int nsub) {
  int length, lengthy, lengthz, ilor, n;
  float flength, Qi, Ai;
  float lx, ly, lz;
  int fxinc, fyinc, fzinc, fx, fy, fz;
  int x1, y1, z1, x2, y2, z2, diffx, diffy, diffz;
  int step = nim2 * nim3;
  int ndata, ind;
  if (nim1 > nim2) {
    ndata = nim1;
  }
  if (nim3 > ndata) {
    ndata = nim3;
  }
  ndata += ndata / 3;
  int *buf = (int *)malloc(ndata * sizeof(int));
  step = nim2 * nim3;
  int lor_start, lor_stop, nlor, isub;
  int nvox = step * nim1;
  unsigned int mem_size_F = nvox * sizeof(float);
  float *F = (float *)malloc(mem_size_F);
  for (n = 0; n < nvox; ++n) {
    NM[n] = 1.0f / NM[n];
  }
  for (isub = 0; isub < nsub; ++isub) {
    lor_start = (int)((float)nx1 / nsub * isub + 0.5f);
    lor_stop = (int)((float)nx1 / nsub * (isub + 1) + 0.5f);
    nlor = lor_stop - lor_start;
    memset(F, 0, mem_size_F);
    for (ilor = lor_start; ilor < lor_stop; ++ilor) {
      Qi = 0.0f;
      Ai = 0.0f;
      x1 = X1[ilor];
      x2 = X2[ilor];
      y1 = Y1[ilor];
      y2 = Y2[ilor];
      z1 = Z1[ilor];
      z2 = Z2[ilor];
      diffx = x2 - x1;
      diffy = y2 - y1;
      diffz = z2 - z1;
      lx = abs(diffx);
      ly = abs(diffy);
      lz = abs(diffz);
      length = ly;
      if (lx > length) {
        length = lx;
      }
      if (lz > length) {
        length = lz;
      }
      flength = 1.0f / (float)length;
      fxinc = ((int)diffx * flength * (int)(pow(2, 23)));
      fyinc = ((int)diffy * flength * (int)(pow(2, 23)));
      fzinc = ((int)diffz * flength * (int)(pow(2, 23)));
      fx = ((int)x1 * (int)(pow(2, 23)));
      fy = ((int)y1 * (int)(pow(2, 23)));
      fz = ((int)z1 * (int)(pow(2, 23)));
      for (n = 0; n < length; ++n) {
        ind = (fz >> 23) * step + (fy >> 23) * nim3 + (fx >> 23);
        buf[n] = ind;
        Qi += im[ind];
        Ai -= AM[ind];
        fx = fx + fxinc;
        fy = fy + fyinc;
        fz = fz + fzinc;
      }
      if (Qi == 0.0f) {
        continue;
      }
      Qi = Qi * exp(Ai * 0.3333f);
      Qi = 1.0f / Qi;
      for (n = 0; n < length; ++n) {
        F[buf[n]] += Qi;
      }
    }
    for (n = 0; n < nvox; ++n) {
      im[n] = im[n] * F[n] * NM[n];
    }
  }
  free(buf);
  free(F);
}
```