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

```asm
<price_to_str>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  movss  %xmm0,-0x24(%rbp)
  mov    %rdi,-0x30(%rbp)
  mov    %rsi,-0x38(%rbp)
  mov    %rdx,-0x40(%rbp)
  mov    %rcx,-0x48(%rbp)
  movss  -0x24(%rbp),%xmm0
  cvttss2si %xmm0,%eax
  mov    %eax,-0xc(%rbp)
  movss  -0x24(%rbp),%xmm0
  cvttss2si %xmm0,%eax
  pxor   %xmm1,%xmm1
  cvtsi2ss %eax,%xmm1
  movss  -0x24(%rbp),%xmm0
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x8(%rbp)
  cmpq   $0x0,-0x48(%rbp)
  je     L14
  movss  -0x24(%rbp),%xmm0
  cvttss2si %xmm0,%edx
  mov    -0x48(%rbp),%rax
  mov    %rax,%rsi
  lea    D16(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  mov    -0x40(%rbp),%rax
  movl   $0x0,(%rax)
  mov    -0x40(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x38(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x38(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x30(%rbp),%rax
  mov    %edx,(%rax)
  lea    D16(%rip),%rax
  jmp    L90
L14:
  movss  -0x8(%rbp),%xmm1
  movss  D135(%rip),%xmm0
  mulss  %xmm1,%xmm0
  movss  %xmm0,-0x14(%rbp)
  movss  -0x14(%rbp),%xmm0
  cvttss2si %xmm0,%eax
  pxor   %xmm1,%xmm1
  cvtsi2ss %eax,%xmm1
  movss  -0x14(%rbp),%xmm0
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x4(%rbp)
  movss  D134(%rip),%xmm0
  comiss -0x4(%rbp),%xmm0
  ja     L123
  movss  D114(%rip),%xmm0
  movaps %xmm0,%xmm1
  subss  -0x4(%rbp),%xmm1
  movss  D134(%rip),%xmm0
  comiss %xmm1,%xmm0
  jbe    L129
  movss  -0x14(%rbp),%xmm1
  movss  D114(%rip),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x14(%rbp)
  jmp    L123
L129:
  movss  -0x24(%rbp),%xmm0
  cvttss2si %xmm0,%eax
  mov    %eax,%edx
  lea    D66(%rip),%rax
  mov    %rax,%rsi
  lea    D16(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  mov    -0x40(%rbp),%rax
  movl   $0x0,(%rax)
  mov    -0x40(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x38(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x38(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x30(%rbp),%rax
  mov    %edx,(%rax)
  lea    D16(%rip),%rax
  jmp    L90
L123:
  pxor   %xmm0,%xmm0
  ucomiss -0x14(%rbp),%xmm0
  jp     L109
  pxor   %xmm0,%xmm0
  ucomiss -0x14(%rbp),%xmm0
  je     L95
L109:
  movl   $0x8,-0x10(%rbp)
  jmp    L51
L124:
  movss  -0x14(%rbp),%xmm0
  movss  D96(%rip),%xmm1
  divss  %xmm1,%xmm0
  movss  %xmm0,-0x14(%rbp)
  subl   $0x1,-0x10(%rbp)
L51:
  pxor   %xmm0,%xmm0
  cvtss2sd -0x14(%rbp),%xmm0
  movsd  D41(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movss  -0x14(%rbp),%xmm1
  movss  D96(%rip),%xmm2
  divss  %xmm2,%xmm1
  cvttss2si %xmm1,%eax
  pxor   %xmm1,%xmm1
  cvtsi2ss %eax,%xmm1
  cvtss2sd %xmm1,%xmm1
  ucomisd %xmm1,%xmm0
  jp     L56
  ucomisd %xmm1,%xmm0
  je     L124
L56:
  cmpl   $0x0,-0xc(%rbp)
  jns    L9
  pxor   %xmm0,%xmm0
  comiss -0x14(%rbp),%xmm0
  jbe    L9
  movss  -0x14(%rbp),%xmm0
  movss  D88(%rip),%xmm1
  xorps  %xmm1,%xmm0
  movss  %xmm0,-0x14(%rbp)
L9:
  movss  -0x14(%rbp),%xmm0
  cvttss2si %xmm0,%edx
  mov    -0x30(%rbp),%rax
  mov    %edx,(%rax)
  pxor   %xmm0,%xmm0
  cvtsi2ssl -0x10(%rbp),%xmm0
  mov    D41(%rip),%rax
  movaps %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  mov    %eax,%edx
  mov    -0x38(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x40(%rbp),%rax
  mov    -0xc(%rbp),%edx
  mov    %edx,(%rax)
  mov    -0x38(%rbp),%rax
  mov    (%rax),%ecx
  movss  -0x14(%rbp),%xmm0
  cvttss2si %xmm0,%edx
  mov    -0xc(%rbp),%eax
  mov    %ecx,%r8d
  mov    %edx,%ecx
  mov    %eax,%edx
  lea    D142(%rip),%rax
  mov    %rax,%rsi
  lea    D16(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L23
L95:
  mov    -0x38(%rbp),%rax
  movl   $0x0,(%rax)
  mov    -0x38(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x30(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x40(%rbp),%rax
  mov    -0xc(%rbp),%edx
  mov    %edx,(%rax)
  mov    -0xc(%rbp),%eax
  mov    %eax,%edx
  lea    D73(%rip),%rax
  mov    %rax,%rsi
  lea    D16(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
L23:
  lea    D16(%rip),%rax
L90:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_tag: D135
type_infered: f32
name: retrieve_data
arguments: data_tag: D134
type_infered: byte[4]
name: retrieve_data
arguments: data_tag: D114
type_infered: f32
name: retrieve_data
arguments: data_tag: D66
type_infered: string
name: retrieve_data
arguments: data_tag: D96
type_infered: f32
name: retrieve_data
arguments: data_tag: D41
type_infered: f32[2]
name: retrieve_data
arguments: data_tag: D88
type_infered: byte[4]
name: retrieve_data
arguments: data_tag: D142
type_infered: string
name: retrieve_data
arguments: data_tag: D73
type_infered: string

tool: D135: 256

tool: {"D134": [0x00,0x00,0x00,0x3b]}

tool: D114: 1

tool: D66: %f

tool: D96: 2

tool: {"D41": [0.0,2.0]}

tool: {"D88": [0x00,0x00,0x00,0x80]}

tool: D142: %d %d/%d

tool: D73: %d

assistant: ```c
char *price_to_str(float price, int *numorator, int *demoninator, int *decimal, char *fltfmt) {
  static char rtn[64];
  int whole = (int)price;
  float dec = ((price) - (float)(int)(price)), numr;
  if (fltfmt) {
    sprintf(rtn, fltfmt, price);
    *numorator = *demoninator = *decimal = 0;
    return rtn;
  }
  numr = dec * 256;
  {
    float rdec = ((numr) - (float)(int)(numr));
    if (rdec < ((1.0 / 256.0) / 2.0))
      ;
    else if ((1 - rdec) < ((1.0 / 256.0) / 2.0))
      ++numr;
    else {
      sprintf(rtn, "%f", price);
      *numorator = *demoninator = *decimal = 0;
      return rtn;
    }
  }
  if (numr != 0) {
    int cnt = 8;
    while ((float)(numr) / 2.0 == (float)(int)(numr / 2)) {
      numr /= 2;
      --cnt;
    }
    if ((whole < 0) && (numr < 0.0))
      numr = -numr;
    *numorator = (int)numr;
    *demoninator = (int)pow(2.0, (float)cnt);
    *decimal = whole;
    sprintf(rtn, "%d %d/%d", whole, (int)numr, *demoninator);
  } else {
    *numorator = *demoninator = 0;
    *decimal = whole;
    sprintf(rtn, "%d", whole);
  }
  return rtn;
}
```