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

```asm
<dd_to_string>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  add    $0xffffffffffffff80,%rsp
  mov    %rdi,-0x58(%rbp)
  mov    %rsi,-0x60(%rbp)
  mov    %edx,-0x64(%rbp)
  mov    %ecx,-0x68(%rbp)
  mov    %r8d,-0x6c(%rbp)
  mov    %r9d,-0x70(%rbp)
  mov    0x18(%rbp),%eax
  mov    %al,-0x74(%rbp)
  mov    0x20(%rbp),%rax
  mov    %rax,-0x80(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x1,-0x38(%rbp)
  movl   $0x0,-0x4c(%rbp)
  mov    -0x60(%rbp),%rax
  mov    %rax,-0x30(%rbp)
  movl   $0x0,-0x44(%rbp)
  mov    -0x58(%rbp),%rax
  mov    %rax,%rdi
  call   <dd_is_negative@plt>
  cmp    $0x1,%eax
  jne    L250
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  movb   $0x2d,(%rax)
  addl   $0x1,-0x44(%rbp)
  jmp    L9
L250:
  cmpl   $0x1,-0x70(%rbp)
  jne    L261
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  movb   $0x2b,(%rax)
  addl   $0x1,-0x44(%rbp)
  jmp    L9
L261:
  movl   $0x0,-0x38(%rbp)
L9:
  mov    -0x58(%rbp),%rax
  mov    %rax,%rdi
  call   <dd_is_zero@plt>
  cmp    $0x1,%eax
  jne    L400
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  movb   $0x30,(%rax)
  addl   $0x1,-0x44(%rbp)
  cmpl   $0x0,-0x64(%rbp)
  jle    L306
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  movb   $0x2e,(%rax)
  addl   $0x1,-0x44(%rbp)
  movl   $0x0,-0x48(%rbp)
  jmp    L15
L325:
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  movb   $0x30,(%rax)
  addl   $0x1,-0x48(%rbp)
  addl   $0x1,-0x44(%rbp)
L15:
  mov    -0x48(%rbp),%eax
  cmp    -0x64(%rbp),%eax
  jl     L325
  jmp    L306
L400:
  cmpl   $0x1,-0x6c(%rbp)
  je     L343
  movl   $0x1,-0x40(%rbp)
  jmp    L72
L343:
  lea    -0x20(%rbp),%rdx
  mov    -0x58(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <dd_abs@plt>
  lea    -0x20(%rbp),%rdx
  lea    -0x20(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <dd_log10@plt>
  lea    -0x20(%rbp),%rdx
  lea    -0x20(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <dd_floor@plt>
  lea    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <dd_to_int@plt>
  add    $0x1,%eax
  mov    %eax,-0x40(%rbp)
L72:
  mov    -0x64(%rbp),%edx
  mov    -0x40(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x34(%rbp)
  cmpl   $0x1,-0x6c(%rbp)
  jne    L457
  cmpl   $0x0,-0x34(%rbp)
  jg     L457
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  movb   $0x30,(%rax)
  addl   $0x1,-0x44(%rbp)
  cmpl   $0x0,-0x64(%rbp)
  jle    L306
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  movb   $0x2e,(%rax)
  addl   $0x1,-0x44(%rbp)
  movl   $0x0,-0x48(%rbp)
  jmp    L429
L146:
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  movb   $0x30,(%rax)
  addl   $0x1,-0x48(%rbp)
  addl   $0x1,-0x44(%rbp)
L429:
  mov    -0x48(%rbp),%eax
  cmp    -0x64(%rbp),%eax
  jl     L146
  jmp    L306
L457:
  mov    -0x34(%rbp),%eax
  add    $0x1,%eax
  mov    $0x1,%esi
  mov    %eax,%edi
  call   <calloc@plt>
  mov    %rax,-0x28(%rbp)
  mov    -0x34(%rbp),%ecx
  lea    -0x4c(%rbp),%rdx
  mov    -0x28(%rbp),%rsi
  mov    -0x58(%rbp),%rax
  mov    %rax,%rdi
  call   <dd_to_digits@plt>
  cmpl   $0x1,-0x6c(%rbp)
  jne    L255
  cmpl   $0x0,-0x40(%rbp)
  jle    L379
  movl   $0x0,-0x48(%rbp)
  jmp    L55
L426:
  mov    -0x48(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  movzbl (%rcx),%edx
  mov    %dl,(%rax)
  addl   $0x1,-0x48(%rbp)
  addl   $0x1,-0x44(%rbp)
L55:
  mov    -0x48(%rbp),%eax
  cmp    -0x40(%rbp),%eax
  jl     L426
  cmpl   $0x0,-0x64(%rbp)
  jle    L390
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  movb   $0x2e,(%rax)
  addl   $0x1,-0x44(%rbp)
  movl   $0x0,-0x3c(%rbp)
  jmp    L477
L440:
  mov    -0x48(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  movzbl (%rcx),%edx
  mov    %dl,(%rax)
  addl   $0x1,-0x3c(%rbp)
  addl   $0x1,-0x48(%rbp)
  addl   $0x1,-0x44(%rbp)
L477:
  mov    -0x3c(%rbp),%eax
  cmp    -0x64(%rbp),%eax
  jl     L440
  jmp    L390
L379:
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  movb   $0x30,(%rax)
  addl   $0x1,-0x44(%rbp)
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  movb   $0x2e,(%rax)
  addl   $0x1,-0x44(%rbp)
  cmpl   $0x0,-0x40(%rbp)
  jns    L200
  movl   $0x0,-0x48(%rbp)
  jmp    L83
L441:
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  movb   $0x30,(%rax)
  addl   $0x1,-0x48(%rbp)
  addl   $0x1,-0x44(%rbp)
L83:
  mov    -0x40(%rbp),%eax
  neg    %eax
  cmp    %eax,-0x48(%rbp)
  jl     L441
L200:
  movl   $0x0,-0x48(%rbp)
  jmp    L101
L413:
  mov    -0x48(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  movzbl (%rcx),%edx
  mov    %dl,(%rax)
  addl   $0x1,-0x48(%rbp)
  addl   $0x1,-0x44(%rbp)
L101:
  mov    -0x48(%rbp),%eax
  cmp    -0x34(%rbp),%eax
  jl     L413
  jmp    L390
L255:
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  mov    -0x28(%rbp),%rdx
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
  addl   $0x1,-0x44(%rbp)
  cmpl   $0x0,-0x64(%rbp)
  jle    L46
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  movb   $0x2e,(%rax)
  addl   $0x1,-0x44(%rbp)
L46:
  movl   $0x1,-0x48(%rbp)
  jmp    L411
L276:
  mov    -0x48(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  movzbl (%rcx),%edx
  mov    %dl,(%rax)
  addl   $0x1,-0x48(%rbp)
  addl   $0x1,-0x44(%rbp)
L411:
  mov    -0x48(%rbp),%eax
  cmp    -0x64(%rbp),%eax
  jle    L276
L390:
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
L306:
  cmpl   $0x0,-0x6c(%rbp)
  jne    L60
  cmpl   $0x1,0x10(%rbp)
  jne    L439
  mov    $0x45,%ecx
  jmp    L199
L439:
  mov    $0x65,%ecx
L199:
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  mov    %cl,(%rax)
  addl   $0x1,-0x44(%rbp)
  mov    -0x4c(%rbp),%eax
  test   %eax,%eax
  jns    L387
  mov    $0x2d,%ecx
  jmp    L460
L387:
  mov    $0x2b,%ecx
L460:
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  mov    %cl,(%rax)
  addl   $0x1,-0x44(%rbp)
  mov    -0x4c(%rbp),%eax
  test   %eax,%eax
  jns    L396
  mov    -0x4c(%rbp),%eax
  neg    %eax
  mov    %eax,-0x4c(%rbp)
L396:
  mov    -0x4c(%rbp),%eax
  cmp    $0x63,%eax
  jle    L316
  mov    -0x4c(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x51eb851f,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x5,%edx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %eax,-0x48(%rbp)
  mov    -0x48(%rbp),%eax
  lea    0x30(%rax),%ecx
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  mov    %ecx,%edx
  mov    %dl,(%rax)
  addl   $0x1,-0x44(%rbp)
  mov    -0x48(%rbp),%eax
  imul   $0xffffff9c,%eax,%edx
  mov    -0x4c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4c(%rbp)
L316:
  mov    -0x4c(%rbp),%eax
  movslq %eax,%rdx
  imul   $0x66666667,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x2,%edx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %eax,-0x48(%rbp)
  mov    -0x48(%rbp),%eax
  lea    0x30(%rax),%ecx
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  mov    %ecx,%edx
  mov    %dl,(%rax)
  addl   $0x1,-0x44(%rbp)
  mov    -0x48(%rbp),%eax
  imul   $0xfffffff6,%eax,%edx
  mov    -0x4c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4c(%rbp)
  mov    -0x4c(%rbp),%eax
  lea    0x30(%rax),%ecx
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  mov    %ecx,%edx
  mov    %dl,(%rax)
  addl   $0x1,-0x44(%rbp)
L60:
  mov    -0x44(%rbp),%eax
  cmp    -0x68(%rbp),%eax
  jl     L293
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  movb   $0x0,(%rax)
  mov    -0x44(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    -0x80(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L119
L293:
  mov    -0x68(%rbp),%eax
  sub    -0x44(%rbp),%eax
  mov    %eax,-0x34(%rbp)
  movl   $0x0,-0x48(%rbp)
  jmp    L177
L208:
  mov    -0x48(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  mov    -0x48(%rbp),%ecx
  mov    -0x34(%rbp),%edx
  add    %ecx,%edx
  movslq %edx,%rcx
  mov    -0x60(%rbp),%rdx
  add    %rcx,%rdx
  movzbl (%rax),%eax
  mov    %al,(%rdx)
  addl   $0x1,-0x48(%rbp)
L177:
  mov    -0x48(%rbp),%eax
  cmp    -0x44(%rbp),%eax
  jl     L208
  movl   $0x0,-0x48(%rbp)
  jmp    L77
L190:
  mov    -0x48(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x60(%rbp),%rax
  add    %rax,%rdx
  movzbl -0x74(%rbp),%eax
  mov    %al,(%rdx)
  addl   $0x1,-0x48(%rbp)
L77:
  mov    -0x48(%rbp),%eax
  cmp    -0x34(%rbp),%eax
  jl     L190
  mov    -0x68(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x60(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  mov    -0x80(%rbp),%rax
  mov    -0x68(%rbp),%edx
  mov    %edx,(%rax)
L119:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L249
  call   <__stack_chk_fail@plt>
L249:
  leave
  ret
```

assistant: ```c
void dd_to_string(const double *a, char *s, int precision, int width, int fixed, int showpos, int uppercase, char fill, int *endstring) {
  int sgn = 1;
  int i, e = 0;
  char *p = s;
  int cnt = 0;
  int off, d;
  double acc[2];
  if (dd_is_negative(a) == 1) {
    *(p++) = '-';
    cnt++;
  } else if (showpos == 1) {
    *(p++) = '+';
    cnt++;
  } else
    sgn = 0;
  if (dd_is_zero(a) == 1) {
    *(p++) = '0';
    cnt++;
    if (precision > 0) {
      *(p++) = '.';
      cnt++;
      for (i = 0; i < precision; i++, cnt++)
        *(p++) = '0';
    }
  } else {
    if (fixed != 1)
      off = 1;
    else {
      dd_abs(a, acc);
      dd_log10(acc, acc);
      dd_floor(acc, acc);
      off = dd_to_int(acc) + 1;
    }
    d = precision + off;
    if ((fixed == 1) && (d <= 0)) {
      *(p++) = '0';
      cnt++;
      if (precision > 0) {
        *(p++) = '.';
        cnt++;
        for (i = 0; i < precision; i++, cnt++)
          *(p++) = '0';
      }
    } else {
      char *t = (char *)calloc(d + 1, sizeof(char));
      int j;
      dd_to_digits(a, t, &e, d);
      if (fixed == 1) {
        if (off > 0) {
          for (i = 0; i < off; i++, cnt++)
            *(p++) = t[i];
          if (precision > 0) {
            *(p++) = '.';
            cnt++;
            for (j = 0; j < precision; j++, i++, cnt++)
              *(p++) = t[i];
          }
        } else {
          *(p++) = '0';
          cnt++;
          *(p++) = '.';
          cnt++;
          if (off < 0)
            for (i = 0; i < (-off); i++, cnt++)
              *(p++) = '0';
          for (i = 0; i < d; i++, cnt++)
            *(p++) = t[i];
        }
      } else {
        *(p++) = t[0];
        cnt++;
        if (precision > 0) {
          *(p++) = '.';
          cnt++;
        }
        for (i = 1; i <= precision; i++, cnt++)
          *(p++) = t[i];
      }
      free(t);
    }
  }
  if (fixed == 0) {
    *(p++) = (uppercase == 1) ? 'E' : 'e';
    cnt++;
    *(p++) = (e < 0 ? '-' : '+');
    cnt++;
    if (e < 0)
      e = -e;
    if (e >= 100) {
      i = e / 100;
      *(p++) = '0' + i;
      cnt++;
      e -= 100 * i;
    }
    i = e / 10;
    *(p++) = '0' + i;
    cnt++;
    e -= 10 * i;
    *(p++) = '0' + e;
    cnt++;
  }
  if (cnt >= width) {
    *(p++) = '\0';
    *endstring = cnt + 1;
  } else {
    d = width - cnt;
    for (i = 0; i < cnt; i++)
      s[i + d] = s[i];
    for (i = 0; i < d; i++)
      s[i] = fill;
    s[width] = '\0';
    *endstring = width;
  }
}
```