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

```asm
<digit>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %rdi,-0x38(%rbp)
  mov    %rsi,-0x40(%rbp)
  mov    %rdx,-0x48(%rbp)
  movss  %xmm0,-0x4c(%rbp)
  movss  %xmm1,-0x50(%rbp)
  mov    %ecx,-0x54(%rbp)
  mov    -0x48(%rbp),%rax
  movl   $0x1,(%rax)
  pxor   %xmm0,%xmm0
  cvtss2sd -0x50(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd -0x4c(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  mov    -0x54(%rbp),%eax
  sub    $0x1,%eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movss  -0x4c(%rbp),%xmm0
  movss  D234(%rip),%xmm1
  andps  %xmm1,%xmm0
  movss  -0x50(%rbp),%xmm1
  movss  D234(%rip),%xmm2
  andps  %xmm2,%xmm1
  comiss %xmm1,%xmm0
  jbe    L416
  movss  -0x4c(%rbp),%xmm0
  movss  D234(%rip),%xmm1
  andps  %xmm1,%xmm0
  cvtss2sd %xmm0,%xmm0
  jmp    L6
L416:
  movss  -0x50(%rbp),%xmm0
  movss  D234(%rip),%xmm1
  andps  %xmm1,%xmm0
  cvtss2sd %xmm0,%xmm0
L6:
  movsd  D7(%rip),%xmm1
  mulsd  %xmm1,%xmm0
  divsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movl   $0xffffffff,-0x30(%rbp)
  jmp    L200
L227:
  movsd  -0x20(%rbp),%xmm1
  movsd  D235(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  subl   $0x1,-0x30(%rbp)
L200:
  movsd  D281(%rip),%xmm0
  comisd -0x20(%rbp),%xmm0
  ja     L227
  jmp    L49
L58:
  movsd  -0x20(%rbp),%xmm1
  movsd  D235(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  subl   $0x1,-0x30(%rbp)
L49:
  mov    -0x20(%rbp),%rax
  movq   %rax,%xmm0
  call   <round@plt>
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  subsd  -0x20(%rbp),%xmm0
  movq   D223(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  -0x20(%rbp),%xmm1
  mulsd  -0x10(%rbp),%xmm1
  comisd %xmm1,%xmm0
  ja     L58
  jmp    L63
L356:
  movsd  -0x20(%rbp),%xmm0
  movsd  D235(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  addl   $0x1,-0x30(%rbp)
L63:
  mov    -0x20(%rbp),%rax
  movq   %rax,%xmm0
  call   <round@plt>
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  subsd  -0x20(%rbp),%xmm0
  movq   D223(%rip),%xmm1
  andpd  %xmm0,%xmm1
  movsd  -0x20(%rbp),%xmm0
  mulsd  -0x10(%rbp),%xmm0
  comisd %xmm1,%xmm0
  ja     L356
  mov    -0x30(%rbp),%eax
  neg    %eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    D235(%rip),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x8(%rbp)
  movss  -0x4c(%rbp),%xmm0
  movss  D234(%rip),%xmm1
  andps  %xmm1,%xmm0
  cvtss2sd %xmm0,%xmm0
  mulsd  -0x8(%rbp),%xmm0
  movss  -0x50(%rbp),%xmm1
  movss  D234(%rip),%xmm2
  andps  %xmm2,%xmm1
  cvtss2sd %xmm1,%xmm1
  mulsd  -0x8(%rbp),%xmm1
  comisd %xmm1,%xmm0
  jbe    L114
  movss  -0x4c(%rbp),%xmm0
  movss  D234(%rip),%xmm1
  andps  %xmm1,%xmm0
  cvtss2sd %xmm0,%xmm0
  mulsd  -0x8(%rbp),%xmm0
  jmp    L157
L114:
  movss  -0x50(%rbp),%xmm0
  movss  D234(%rip),%xmm1
  andps  %xmm1,%xmm0
  cvtss2sd %xmm0,%xmm0
  mulsd  -0x8(%rbp),%xmm0
L157:
  movsd  -0x18(%rbp),%xmm2
  movsd  D167(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  mulsd  -0x8(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <log10@plt>
  movsd  D281(%rip),%xmm1
  addsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,-0x24(%rbp)
  cmpl   $0x3,-0x30(%rbp)
  jg     L110
  mov    -0x30(%rbp),%edx
  mov    -0x24(%rbp),%eax
  add    %edx,%eax
  cmp    $0xfffffffd,%eax
  jge    L89
L110:
  mov    -0x24(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x24(%rbp),%eax
  mov    %eax,-0x2c(%rbp)
  cmpl   $0x1,-0x24(%rbp)
  jle    L362
  addl   $0x1,-0x2c(%rbp)
L362:
  pxor   %xmm0,%xmm0
  comiss -0x4c(%rbp),%xmm0
  ja     L74
  pxor   %xmm0,%xmm0
  comiss -0x50(%rbp),%xmm0
  jbe    L50
L74:
  addl   $0x1,-0x2c(%rbp)
L50:
  mov    -0x30(%rbp),%eax
  neg    %eax
  sub    -0x24(%rbp),%eax
  add    $0x1,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mov    D235(%rip),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  cvtsd2ss %xmm0,%xmm0
  mov    -0x40(%rbp),%rax
  movss  %xmm0,(%rax)
  cmpl   $0x3,-0x30(%rbp)
  jle    L230
  mov    -0x30(%rbp),%edx
  mov    -0x24(%rbp),%eax
  add    %edx,%eax
  lea    -0x1(%rax),%esi
  mov    -0x28(%rbp),%ecx
  mov    -0x2c(%rbp),%edx
  mov    -0x38(%rbp),%rax
  mov    %esi,%r8d
  lea    D201(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L91
L230:
  mov    -0x30(%rbp),%edx
  mov    -0x24(%rbp),%eax
  add    %edx,%eax
  mov    $0x1,%edx
  mov    %edx,%esi
  sub    %eax,%esi
  mov    -0x28(%rbp),%ecx
  mov    -0x2c(%rbp),%edx
  mov    -0x38(%rbp),%rax
  mov    %esi,%r8d
  lea    D220(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
L91:
  cmpl   $0x3,-0x54(%rbp)
  jne    L196
  pxor   %xmm0,%xmm0
  cvtss2sd -0x4c(%rbp),%xmm0
  mulsd  -0x8(%rbp),%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  D99(%rip),%xmm1
  ucomiss %xmm1,%xmm0
  jp     L101
  movss  D99(%rip),%xmm1
  ucomiss %xmm1,%xmm0
  je     L287
  jmp    L101
L287:
  pxor   %xmm0,%xmm0
  cvtss2sd -0x50(%rbp),%xmm0
  mulsd  -0x8(%rbp),%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  D115(%rip),%xmm1
  ucomiss %xmm1,%xmm0
  jp     L101
  movss  D115(%rip),%xmm1
  ucomiss %xmm1,%xmm0
  je     L194
  jmp    L101
L194:
  mov    -0x48(%rbp),%rax
  movl   $0x0,(%rax)
  jmp    L101
L196:
  cmpl   $0x2,-0x54(%rbp)
  jne    L101
  pxor   %xmm0,%xmm0
  ucomiss -0x4c(%rbp),%xmm0
  jp     L85
  pxor   %xmm0,%xmm0
  ucomiss -0x4c(%rbp),%xmm0
  je     L354
L85:
  pxor   %xmm0,%xmm0
  cvtss2sd -0x4c(%rbp),%xmm0
  mulsd  -0x8(%rbp),%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  D99(%rip),%xmm1
  ucomiss %xmm1,%xmm0
  jp     L101
  movss  D99(%rip),%xmm1
  ucomiss %xmm1,%xmm0
  je     L354
  jmp    L101
L354:
  pxor   %xmm0,%xmm0
  ucomiss -0x50(%rbp),%xmm0
  jp     L238
  pxor   %xmm0,%xmm0
  ucomiss -0x50(%rbp),%xmm0
  je     L376
L238:
  pxor   %xmm0,%xmm0
  cvtss2sd -0x50(%rbp),%xmm0
  mulsd  -0x8(%rbp),%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  D115(%rip),%xmm1
  ucomiss %xmm1,%xmm0
  jp     L101
  movss  D115(%rip),%xmm1
  ucomiss %xmm1,%xmm0
  je     L376
  jmp    L101
L376:
  mov    -0x48(%rbp),%rax
  movl   $0x0,(%rax)
  jmp    L101
L89:
  cmpl   $0x0,-0x30(%rbp)
  js     L314
  movl   $0x0,-0x28(%rbp)
  mov    -0x30(%rbp),%edx
  mov    -0x24(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x2c(%rbp)
  jmp    L192
L314:
  mov    -0x30(%rbp),%eax
  neg    %eax
  mov    %eax,-0x28(%rbp)
  mov    -0x24(%rbp),%eax
  lea    0x1(%rax),%ecx
  mov    -0x30(%rbp),%eax
  neg    %eax
  cmp    %eax,-0x24(%rbp)
  setle  %al
  movzbl %al,%edx
  mov    $0x1,%eax
  sub    -0x30(%rbp),%eax
  sub    -0x24(%rbp),%eax
  imul   %edx,%eax
  add    %ecx,%eax
  mov    %eax,-0x2c(%rbp)
L192:
  pxor   %xmm0,%xmm0
  comiss -0x4c(%rbp),%xmm0
  ja     L322
  pxor   %xmm0,%xmm0
  comiss -0x50(%rbp),%xmm0
  jbe    L348
L322:
  addl   $0x1,-0x2c(%rbp)
L348:
  mov    -0x40(%rbp),%rax
  movss  D115(%rip),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x28(%rbp),%ecx
  mov    -0x2c(%rbp),%edx
  mov    -0x38(%rbp),%rax
  lea    D44(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L143
L101:
  nop
L143:
  nop
  leave
  ret
```

tool_calls: name: parse_data
arguments: label: D234
type_infered: dword
name: parse_data
arguments: label: D7
type_infered: byte[8]
name: parse_data
arguments: label: D235
type_infered: f64
name: parse_data
arguments: label: D281
type_infered: f64
name: parse_data
arguments: label: D223
type_infered: qword
name: parse_data
arguments: label: D167
type_infered: f64
name: parse_data
arguments: label: D201
type_infered: string
name: parse_data
arguments: label: D220
type_infered: string
name: parse_data
arguments: label: D99
type_infered: byte[4]
name: parse_data
arguments: label: D115
type_infered: byte[4]
name: parse_data
arguments: label: D44
type_infered: string

tool: D234: 2147483647

tool: {"D7": [0x8d,0xed,0xb5,0xa0,0xf7,0xc6,0xb0,0x3e]}

tool: D235: 10

tool: D281: 1

tool: D223: 9223372036854775807

tool: D167: 0.1

tool: D201: %%%d.%dfe+%2.2d

tool: D220: %%%d.%dfe-%2.2d

tool: {"D99": [0x00,0x00,0x80,0xbf]}

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

tool: D44: %%%d.%df

assistant: ```c
void digit(char *format, float *scale, int *digflag, float xlo, float xhi, int nlab) {
  double sig, delta, x, y, log10(), pow();
  int p, q, width, digits;
  *digflag = 1;
  x = delta = ((double)xhi - (double)xlo) / (nlab - 1);
  sig = (1.0e-6) * (((fabs(xlo)) > (fabs(xhi)) ? (fabs(xlo)) : (fabs(xhi)))) / x;
  for (p = -1; x < 1.0;) {
    x *= 10.0;
    p--;
  }
  while (fabs(round(x) - x) > x * sig) {
    x *= 10.0;
    p--;
  }
  while (fabs(round(x) - x) < x * sig) {
    x /= 10.0;
    p++;
  }
  y = pow((double)10, (double)(-p));
  q = (int)(1.0 + log10(((fabs((double)xlo) * y) > (fabs((double)xhi) * y) ? (fabs((double)xlo) * y) : (fabs((double)xhi) * y)) + 0.1 * delta * y));
  if (p >= 4 || p + q < -3) {
    digits = q - 1;
    width = q;
    if (q > 1)
      width++;
    if (xlo < 0 || xhi < 0)
      (width)++;
    *scale = pow((double)10, (double)(-p - q + 1));
    if (p >= 4)
      sprintf(format, "%%%d.%dfe+%2.2d", width, digits, p + q - 1);
    else
      sprintf(format, "%%%d.%dfe-%2.2d", width, digits, 1 - (p + q));
    if (nlab == 3) {
      if ((float)(xlo * y) == -1.0 && (float)(xhi * y) == 1.0)
        *digflag = 0;
    } else if (nlab == 2) {
      if (((float)xlo == 0.0 || (float)(xlo * y) == -1.0) && ((float)xhi == 0.0 || (float)(xhi * y) == 1.0))
        *digflag = 0;
    }
  } else {
    if (p >= 0) {
      digits = 0;
      width = p + q;
    } else {
      digits = -p;
      width = 1 + q + ((-p) >= q) * (1 + (-p) - q);
    }
    if (xlo < 0 || xhi < 0)
      (width)++;
    *scale = 1.0;
    sprintf(format, "%%%d.%df", width, digits);
  }
}
```