user: 下面的汇编指令对应的C源代码是什么:

```asm
<mk_bms>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x38(%rbp)
  mov    %rsi,-0x40(%rbp)
  mov    -0x40(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x1c(%rbp)
  movl   $0x0,-0x2c(%rbp)
  jmp    L156
L119:
  mov    -0x2c(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  cvtss2sd %xmm0,%xmm0
  comisd D16(%rip),%xmm0
  jb     L10
  mov    -0x2c(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D3(%rip),%xmm0
  comisd %xmm1,%xmm0
  jae    L69
L10:
  addl   $0x1,-0x2c(%rbp)
L156:
  mov    -0x2c(%rbp),%eax
  cmp    -0x1c(%rbp),%eax
  jb     L119
  jmp    L120
L69:
  nop
L120:
  mov    -0x2c(%rbp),%eax
  cmp    -0x1c(%rbp),%eax
  jne    L32
  mov    $0x6,%edi
  call   <malloc@plt>
  mov    %rax,-0x8(%rbp)
  cmpq   $0x0,-0x8(%rbp)
  jne    L56
  lea    D31(%rip),%rax
  mov    %rax,%rsi
  lea    D59(%rip),%rax
  mov    %rax,%rdi
  call   <fatal_error@plt>
L56:
  mov    -0x8(%rbp),%rax
  mov    %rax,%rsi
  mov    $0x6,%edi
  call   <uint_char@plt>
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  movb   $0x6,(%rax)
  mov    -0x8(%rbp),%rax
  add    $0x5,%rax
  movb   $0xff,(%rax)
  mov    -0x8(%rbp),%rax
  jmp    L55
L32:
  mov    -0x1c(%rbp),%eax
  add    $0x7,%eax
  shr    $0x3,%eax
  add    $0x6,%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x18(%rbp),%eax
  mov    %eax,%edi
  call   <malloc@plt>
  mov    %rax,-0x8(%rbp)
  cmpq   $0x0,-0x8(%rbp)
  jne    L131
  lea    D31(%rip),%rax
  mov    %rax,%rsi
  lea    D59(%rip),%rax
  mov    %rax,%rdi
  call   <fatal_error@plt>
L131:
  mov    -0x8(%rbp),%rdx
  mov    -0x18(%rbp),%eax
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <uint_char@plt>
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  movb   $0x6,(%rax)
  mov    -0x8(%rbp),%rax
  add    $0x5,%rax
  movb   $0x0,(%rax)
  mov    -0x8(%rbp),%rax
  add    $0x6,%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x2c(%rbp),%eax
  shr    $0x3,%eax
  mov    %eax,-0x14(%rbp)
  movl   $0x0,-0x2c(%rbp)
  jmp    L27
L122:
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x10(%rbp)
  movb   $0xff,(%rax)
  addl   $0x1,-0x2c(%rbp)
L27:
  mov    -0x2c(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jb     L122
  movl   $0x0,-0x24(%rbp)
  movl   $0x80,-0x20(%rbp)
  shll   $0x3,-0x14(%rbp)
  mov    -0x14(%rbp),%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x14(%rbp),%eax
  mov    %eax,-0x2c(%rbp)
  jmp    L149
L79:
  mov    -0x2c(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D16(%rip),%xmm0
  comisd %xmm1,%xmm0
  ja     L64
  mov    -0x2c(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  cvtss2sd %xmm0,%xmm0
  comisd D3(%rip),%xmm0
  jbe    L103
L64:
  mov    -0x20(%rbp),%eax
  add    %eax,-0x24(%rbp)
  mov    -0x2c(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x38(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x28(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x28(%rbp)
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movss  (%rcx),%xmm0
  movss  %xmm0,(%rax)
L103:
  shrl   -0x20(%rbp)
  cmpl   $0x0,-0x20(%rbp)
  jne    L19
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x10(%rbp)
  mov    -0x24(%rbp),%edx
  mov    %dl,(%rax)
  movl   $0x0,-0x24(%rbp)
  movl   $0x80,-0x20(%rbp)
L19:
  addl   $0x1,-0x2c(%rbp)
L149:
  mov    -0x2c(%rbp),%eax
  cmp    -0x1c(%rbp),%eax
  jb     L79
  cmpl   $0x80,-0x20(%rbp)
  je     L77
  mov    -0x24(%rbp),%eax
  mov    %eax,%edx
  mov    -0x10(%rbp),%rax
  mov    %dl,(%rax)
L77:
  mov    -0x40(%rbp),%rax
  mov    -0x28(%rbp),%edx
  mov    %edx,(%rax)
  mov    -0x8(%rbp),%rax
L55:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D16
type_guessed: f64[2]
name: disassemble_data
arguments: data_label: D3
type_guessed: f64
name: disassemble_data
arguments: data_label: D31
type_guessed: string
name: disassemble_data
arguments: data_label: D59
type_guessed: string

tool: {"D16": [9.9989e20,9.9991e20]}

tool: D3: 9.9991e+20

tool: 

tool: D59: mk_bms: memory allocation problem

assistant: ```c
unsigned char *mk_bms(float *data, unsigned int *ndata) {
  int bms_size;
  unsigned char *bms, *cbits;
  unsigned int nn, i, start, c, imask, i0;
  nn = *ndata;
  for (i = 0; i < nn; i++) {
    if (((data[i]) >= 9.9989e20 && (data[i]) <= 9.9991e20))
      break;
  }
  if (i == nn) {
    bms = (unsigned char *)malloc(6);
    if (bms == NULL)
      fatal_error("mk_bms: memory allocation problem", "");
    uint_char(6, bms);
    bms[4] = 6;
    bms[5] = 255;
    return bms;
  }
  bms_size = 6 + (nn + 7) / 8;
  bms = (unsigned char *)malloc(bms_size);
  if (bms == NULL)
    fatal_error("mk_bms: memory allocation problem", "");
  uint_char(bms_size, bms);
  bms[4] = 6;
  bms[5] = 0;
  cbits = bms + 6;
  i0 = i >> 3;
  for (i = 0; i < i0; i++) {
    *cbits++ = 255;
  }
  c = 0;
  imask = 128;
  i0 = i0 << 3;
  start = i0;
  for (i = i0; i < nn; i++) {
    if (((data[i]) < 9.9989e20 || (data[i]) > 9.9991e20)) {
      c += imask;
      data[start++] = data[i];
    }
    if ((imask >>= 1) == 0) {
      *cbits++ = c;
      c = 0;
      imask = 128;
    }
  }
  if (imask != 128)
    *cbits = c;
  *ndata = start;
  return bms;
}
```