user: 提供的汇编代码用C语言表示会是什么样子：

```asm
<encode_double_array_common>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %edi,-0x24(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %rdx,-0x38(%rbp)
  mov    %rcx,-0x40(%rbp)
  mov    %r8,-0x48(%rbp)
  movsd  %xmm0,-0x50(%rbp)
  movsd  %xmm1,-0x58(%rbp)
  mov    %r9,-0x60(%rbp)
  mov    -0x60(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x8(%rbp)
  movl   $0x8,-0x20(%rbp)
  movl   $0x0,-0x18(%rbp)
  mov    -0x30(%rbp),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L29
L21:
  mov    -0x10(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  subsd  -0x50(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x58(%rbp),%xmm1
  movsd  D13(%rip),%xmm0
  addsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%rax
  mov    %eax,-0x14(%rbp)
  mov    -0x24(%rbp),%eax
  mov    %eax,-0x1c(%rbp)
  jmp    L70
L61:
  cmpl   $0x8,-0x20(%rbp)
  jne    L34
  subl   $0x8,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  mov    -0x14(%rbp),%edx
  mov    %eax,%ecx
  shr    %cl,%edx
  mov    %edx,%ecx
  mov    -0x8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x8(%rbp)
  mov    %rax,%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    %ecx,%edx
  mov    %dl,(%rax)
  jmp    L70
L34:
  mov    -0x20(%rbp),%eax
  sub    %eax,-0x1c(%rbp)
  mov    -0x20(%rbp),%eax
  mov    -0x18(%rbp),%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  mov    %eax,%esi
  mov    -0x1c(%rbp),%eax
  mov    -0x14(%rbp),%edx
  mov    %eax,%ecx
  shr    %cl,%edx
  mov    %edx,%eax
  mov    %eax,%ecx
  mov    -0x20(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  lea    D24(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  and    %eax,%ecx
  mov    -0x8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x8(%rbp)
  mov    %rax,%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  lea    (%rsi,%rcx,1),%edx
  mov    %dl,(%rax)
  movl   $0x8,-0x20(%rbp)
  movl   $0x0,-0x18(%rbp)
L70:
  mov    -0x20(%rbp),%eax
  cmp    -0x1c(%rbp),%eax
  jle    L61
  cmpl   $0x0,-0x1c(%rbp)
  je     L9
  mov    -0x1c(%rbp),%eax
  mov    -0x18(%rbp),%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%ecx
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  lea    D24(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  and    -0x14(%rbp),%eax
  add    %ecx,%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x1c(%rbp),%eax
  sub    %eax,-0x20(%rbp)
L9:
  addq   $0x1,-0x10(%rbp)
L29:
  mov    -0x10(%rbp),%rax
  cmp    -0x38(%rbp),%rax
  jl     L21
  cmpl   $0x8,-0x20(%rbp)
  je     L15
  mov    -0x20(%rbp),%eax
  mov    -0x18(%rbp),%edx
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%ecx
  mov    -0x8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x8(%rbp)
  mov    %rax,%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    %ecx,%edx
  mov    %dl,(%rax)
L15:
  mov    -0x60(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  mov    %rdx,(%rax)
  nop
  pop    %rbp
  ret
```

tool_calls: name: disassemble_data
arguments: tag: D13
type_infered: f64

tool: D13: 0.5

assistant: ```c
void encode_double_array_common(int numBits, long packStart, long datasize, unsigned char *lGrib, const double *data, double zref, double factor, long *gz) {
  long i, z = *gz;
  unsigned int ival;
  int cbits, jbits;
  unsigned int c;
  static unsigned int mask[] = {0, 1, 3, 7, 15, 31, 63, 127, 255};
  cbits = 8;
  c = 0;
  for (i = packStart; i < datasize; i++) {
    ival = (unsigned int)((data[i] - zref) * factor + 0.5);
    jbits = numBits;
    while (cbits <= jbits) {
      if (cbits == 8) {
        jbits -= 8;
        lGrib[z++] = (ival >> jbits) & 0xFF;
      } else {
        jbits -= cbits;
        lGrib[z++] = (c << cbits) + ((ival >> jbits) & mask[cbits]);
        cbits = 8;
        c = 0;
      }
    }
    if (jbits) {
      c = (c << jbits) + (ival & mask[jbits]);
      cbits -= jbits;
    }
  }
  if (cbits != 8)
    lGrib[z++] = c << cbits;
  *gz = z;
}
```