user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<ft_get_expo>:
  endbr64
  push   %rbp
  push   %rbx
  sub    $0x38,%rsp
  mov    %rdi,%rbx
  fldt   (%rdi)
  fld    %st(0)
  fstpt  0x10(%rsp)
  fldz
  fcomi  %st(1),%st
  fstp   %st(1)
  mov    $0xffffffff,%ebp
  mov    $0x1,%eax
  cmovbe %eax,%ebp
  fstpt  (%rsp)
  jmp    L79
L149:
  fld1
  fxch   %st(1)
  fcomip %st(1),%st
  fstp   %st(0)
  jbe    L184
L218:
  fld1
  fldt   (%rsp)
  faddp  %st,%st(1)
  fld    %st(0)
  fstpt  (%rsp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  mov    $0xa,%edi
  call   <ft_power@plt>
  fldt   0x20(%rsp)
  fdivp  %st,%st(1)
  add    $0x10,%rsp
L92:
  fstpt  (%rbx)
L79:
  fldt   (%rbx)
  fnstcw 0x2e(%rsp)
  movzwl 0x2e(%rsp),%eax
  or     $0xc,%ah
  mov    %ax,0x2c(%rsp)
  fld    %st(0)
  fldcw  0x2c(%rsp)
  fistpl 0x28(%rsp)
  fldcw  0x2e(%rsp)
  mov    0x28(%rsp),%eax
  lea    0x9(%rax),%edx
  cmp    $0x12,%edx
  ja     L125
  fldz
  fucomip %st(1),%st
  setp   %dl
  mov    $0x1,%ecx
  cmovne %ecx,%edx
  test   %dl,%dl
  je     L176
  test   %eax,%eax
  jne    L250
L125:
  cmp    $0x1,%ebp
  je     L149
  fld1
  fchs
  fcomip %st(1),%st
  fstp   %st(0)
  ja     L218
L184:
  fldt   (%rsp)
  fld1
  fsubrp %st,%st(1)
  fld    %st(0)
  fstpt  (%rsp)
  lea    -0x10(%rsp),%rsp
  fstpt  (%rsp)
  mov    $0xa,%edi
  call   <ft_power@plt>
  fldt   0x20(%rsp)
  fdivp  %st,%st(1)
  add    $0x10,%rsp
  jmp    L92
L176:
  fstp   %st(0)
  jmp    L58
L250:
  fstp   %st(0)
L58:
  push   0x8(%rsp)
  push   0x8(%rsp)
  call   <ft_itoa@plt>
  add    $0x10,%rsp
  fldz
  fldt   (%rsp)
  fcomi  %st(1),%st
  fstp   %st(1)
  jb     L63
  flds   0xd85(%rip)        # 2004 <_fini+0xcb0>
  fcomip %st(1),%st
  fstp   %st(0)
  jae    L175
  fld1
  fchs
  fldt   (%rsp)
  fxch   %st(1)
  fcomip %st(1),%st
  jae    L137
  fstp   %st(0)
L76:
  fldt   (%rsp)
  flds   0xd5f(%rip)        # 2004 <_fini+0xcb0>
  fcomip %st(1),%st
  fstp   %st(0)
  jb     L10
  jmp    L249
L63:
  fstp   %st(0)
  fld1
  fchs
  fldt   (%rsp)
  fxch   %st(1)
  fcomip %st(1),%st
  jae    L106
  fstp   %st(0)
L178:
  fldz
  fldt   (%rsp)
  fcomip %st(1),%st
  fstp   %st(0)
  jae    L76
L10:
  fld1
  fchs
  fldt   (%rsp)
  fxch   %st(1)
  fcomip %st(1),%st
  fstp   %st(0)
  jb     L220
L32:
  flds   0xd2a(%rip)        # 2008 <_fini+0xcb4>
  fldt   (%rsp)
  fcomip %st(1),%st
  fstp   %st(0)
  jb     L220
  jmp    L249
L106:
  flds   0xd19(%rip)        # 2008 <_fini+0xcb4>
  fxch   %st(1)
  fcomip %st(1),%st
  fstp   %st(0)
  jb     L22
L177:
  cmpb   $0x2d,(%rax)
  jne    L178
L154:
  mov    $0x1,%edx
  lea    D3(%rip),%rsi
  mov    %rax,%rdi
  call   <ft_strinsert@plt>
  jmp    L220
L22:
  fldz
  fldt   (%rsp)
  fcomip %st(1),%st
  fstp   %st(0)
  jb     L32
  jmp    L76
L175:
  cmpb   $0x2d,(%rax)
  je     L154
L249:
  mov    $0x30,%edx
  mov    $0x1,%esi
  mov    %rax,%rdi
  call   <ft_strjoinnchar@plt>
L220:
  add    $0x38,%rsp
  pop    %rbx
  pop    %rbp
  ret
L137:
  flds   0xcc2(%rip)        # 2008 <_fini+0xcb4>
  fxch   %st(1)
  fcomip %st(1),%st
  fstp   %st(0)
  jae    L177
  jmp    L76
```

tool_calls: name: extract_symbolic_data
arguments: tag: D3
type_infered: string

tool: D3: 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);
}
```