user: 请从给定的汇编指令推导出C源代码：

```asm
<ft_get_expo>:
  endbr64
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  sub    $0x38,%rsp
  fldt   (%rdi)
  fld    %st(0)
  fstpt  0x10(%rsp)
  fldz
  fld    %st(0)
  fcomip %st(2),%st
  ja     L99
  fstp   %st(0)
  fstp   %st(0)
  fldz
  fldt   0x10(%rsp)
  mov    $0x1,%ebp
L192:
  fnstcw 0x2e(%rsp)
  movzwl 0x2e(%rsp),%eax
  or     $0xc,%ah
  mov    %ax,0x2c(%rsp)
  fld    %st(0)
  fldcw  0x2c(%rsp)
  fistpl (%rsp)
  fldcw  0x2e(%rsp)
  mov    (%rsp),%eax
  lea    0x9(%rax),%edx
  cmp    $0x12,%edx
  jbe    L144
L337:
  fld1
  fxch   %st(1)
  fcomip %st(1),%st
  jbe    L124
  faddp  %st,%st(1)
  sub    $0x10,%rsp
  mov    $0xa,%edi
  fld    %st(0)
  fstpt  (%rsp)
  fstpt  0x10(%rsp)
  call   <ft_power@plt>
  fldt   0x20(%rsp)
  pop    %r8
  pop    %r9
  fdivp  %st,%st(1)
  fldt   (%rsp)
  fxch   %st(1)
  fld    %st(0)
  fstpt  (%rbx)
  jmp    L192
  nopl   0x0(%rax,%rax,1)
L144:
  fldz
  fucomip %st(1),%st
  setp   %dl
  cmovne %ebp,%edx
  test   %dl,%dl
  je     L22
  test   %eax,%eax
  je     L337
  fstp   %st(0)
  jmp    L324
L22:
  fstp   %st(0)
  jmp    L324
  nopw   0x0(%rax,%rax,1)
L215:
  fstp   %st(0)
  jmp    L324
  nopl   0x0(%rax)
L254:
  fstp   %st(0)
L324:
  sub    $0x10,%rsp
  fld    %st(0)
  fstpt  (%rsp)
  fstpt  0x10(%rsp)
  call   <ft_itoa@plt>
  pop    %rdx
  pop    %rcx
  fldz
  fldt   (%rsp)
  fcomi  %st(1),%st
  jb     L37
  fstp   %st(1)
  flds   0xd99(%rip)        # 2004 <_fini+0xba4>
  fld    %st(0)
  fcomip %st(2),%st
  jb     L102
  fstp   %st(0)
  fstp   %st(0)
  cmpb   $0x2d,(%rax)
  je     L279
  jmp    L194
L334:
  fstp   %st(0)
L194:
  add    $0x38,%rsp
  mov    $0x30,%edx
  mov    $0x1,%esi
  mov    %rax,%rdi
  pop    %rbx
  pop    %rbp
  jmp    1090 <ft_strjoinnchar@plt>
  nopw   0x0(%rax,%rax,1)
L124:
  fstp   %st(0)
  fld1
  sub    $0x10,%rsp
  mov    $0xa,%edi
  fsubrp %st,%st(1)
  fld    %st(0)
  fstpt  (%rsp)
  fstpt  0x10(%rsp)
  call   <ft_power@plt>
  fldt   0x20(%rsp)
  pop    %rsi
  pop    %rdi
  fdivp  %st,%st(1)
  fldt   (%rsp)
  fxch   %st(1)
  fld    %st(0)
  fstpt  (%rbx)
  jmp    L192
  nopl   0x0(%rax,%rax,1)
L102:
  fld1
  fchs
  fcomip %st(2),%st
  jae    L268
L176:
  fcomip %st(1),%st
  jae    L334
L170:
  fld1
  fchs
  fcomip %st(1),%st
  jae    L319
  fstp   %st(0)
L256:
  add    $0x38,%rsp
  pop    %rbx
  pop    %rbp
  ret
  nopl   (%rax)
L37:
  fld1
  fchs
  fcomip %st(1),%st
  jae    L327
  fstp   %st(1)
L147:
  fldz
  fxch   %st(1)
  fcomi  %st(1),%st
  fstp   %st(1)
  jb     L170
L247:
  flds   0xce6(%rip)        # 2004 <_fini+0xba4>
  jmp    L176
L99:
  fxch   %st(1)
  mov    $0x1,%ebp
  nopw   0x0(%rax,%rax,1)
L241:
  fnstcw 0x2e(%rsp)
  movzwl 0x2e(%rsp),%eax
  or     $0xc,%ah
  mov    %ax,0x2c(%rsp)
  fld    %st(0)
  fldcw  0x2c(%rsp)
  fistpl (%rsp)
  fldcw  0x2e(%rsp)
  mov    (%rsp),%eax
  lea    0x9(%rax),%edx
  cmp    $0x12,%edx
  ja     L93
  test   %eax,%eax
  jne    L215
  fldz
  fucomip %st(1),%st
  setp   %al
  cmovne %ebp,%eax
  test   %al,%al
  je     L254
L93:
  fld1
  fchs
  fcomip %st(1),%st
  fstp   %st(0)
  jbe    L313
  fld1
  sub    $0x10,%rsp
  mov    $0xa,%edi
  faddp  %st,%st(1)
  fld    %st(0)
  fstpt  (%rsp)
  fstpt  0x10(%rsp)
  call   <ft_power@plt>
  fldt   0x20(%rsp)
  pop    %r10
  pop    %r11
  fdivp  %st,%st(1)
  fldt   (%rsp)
  fxch   %st(1)
  fld    %st(0)
  fstpt  (%rbx)
  jmp    L241
  nopl   (%rax)
L313:
  fld1
  sub    $0x10,%rsp
  mov    $0xa,%edi
  fsubrp %st,%st(1)
  fld    %st(0)
  fstpt  (%rsp)
  fstpt  0x10(%rsp)
  call   <ft_power@plt>
  fldt   0x20(%rsp)
  pop    %rax
  pop    %rdx
  fdivp  %st,%st(1)
  fldt   (%rsp)
  fxch   %st(1)
  fld    %st(0)
  fstpt  (%rbx)
  jmp    L241
  nopl   0x0(%rax)
L319:
  flds   0xc1a(%rip)        # 2008 <_fini+0xba8>
L200:
  fxch   %st(1)
  fcomip %st(1),%st
  fstp   %st(0)
  jb     L256
  jmp    L194
L268:
  flds   0xc03(%rip)        # 2008 <_fini+0xba8>
  fxch   %st(2)
  fcomi  %st(2),%st
  fstp   %st(2)
  jb     L176
  fstp   %st(0)
  jmp    L213
L165:
  fstp   %st(0)
  fstp   %st(1)
L213:
  cmpb   $0x2d,(%rax)
  jne    L147
  fstp   %st(0)
L279:
  add    $0x38,%rsp
  mov    $0x1,%edx
  lea    D2(%rip),%rsi
  mov    %rax,%rdi
  pop    %rbx
  pop    %rbp
  jmp    10b0 <ft_strinsert@plt>
L327:
  flds   0xbc4(%rip)        # 2008 <_fini+0xba8>
  fld    %st(0)
  fxch   %st(2)
  fcomi  %st(2),%st
  fstp   %st(2)
  jae    L165
  fxch   %st(1)
  fcomi  %st(2),%st
  fstp   %st(2)
  jb     L200
  fstp   %st(0)
  jmp    L247
```

tool_calls: name: disassemble_data
arguments: data_label: D2
type_infered: string

tool: D2: 0

assistant: ```c
char *ft_get_expo(long double *a) {
  long double f;
  long double x;
  int sign;
  char *s;
  x = 0;
  f = *a;
  if ((sign = (f < 0 ? -1 : 1)) == -1)
    (void)1;
  *a = f;
  while ((int)*a < -9 || (int)*a > 9 || ((int)*a == 0 && *a)) {
    if ((sign == 1 ? (*a > 1) : (*a < -1)))
      *a = f / ft_power(10, ++x);
    else
      *a = f / ft_power(10, --x);
  }
  s = ft_itoa(x);
  if (((x >= 0 && x <= 9) || (x <= -1 && x >= -9) ? 1 : 0) && s[0] == '-')
    s = ft_strinsert(s, "0", 1);
  else if (((x >= 0 && x <= 9) || (x <= -1 && x >= -9) ? 1 : 0))
    s = ft_strjoinnchar(s, 1, '0');
  return (s);
}
```