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

```asm
<amplstr>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x1c(%rbp)
  lea    -0x18(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strtod@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L177
  movl   $0xffffffff,-0x1c(%rbp)
  jmp    L117
L177:
  mov    -0x18(%rbp),%rax
  lea    D98(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  je     L117
  mov    -0x18(%rbp),%rax
  lea    D199(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  jne    L8
  movsd  -0x10(%rbp),%xmm0
  movsd  D16(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  jmp    L117
L8:
  mov    -0x18(%rbp),%rax
  lea    D61(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  jne    L35
  movsd  -0x10(%rbp),%xmm1
  movsd  D154(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  jmp    L117
L35:
  mov    -0x18(%rbp),%rax
  lea    D221(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  jne    L63
  movsd  -0x10(%rbp),%xmm0
  movsd  D37(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  jmp    L117
L63:
  mov    -0x18(%rbp),%rax
  lea    D3(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  jne    L283
  movsd  -0x10(%rbp),%xmm0
  movsd  D225(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  jmp    L117
L283:
  mov    -0x18(%rbp),%rax
  lea    D53(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  jne    L111
  movsd  -0x10(%rbp),%xmm1
  movsd  D57(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  jmp    L117
L111:
  mov    -0x18(%rbp),%rax
  lea    D119(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  jne    L0
  movsd  -0x10(%rbp),%xmm0
  movsd  D45(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  jmp    L117
L0:
  mov    -0x18(%rbp),%rax
  lea    D268(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  jne    L19
  movsd  -0x10(%rbp),%xmm0
  movsd  D262(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  jmp    L117
L19:
  mov    -0x18(%rbp),%rax
  lea    D94(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  jne    L50
  mov    D154(%rip),%rdx
  lea    -0x10(%rbp),%rax
  movq   %rdx,%xmm0
  mov    %rax,%rdi
  call   <_vtodb@plt>
  mov    %eax,-0x1c(%rbp)
  jmp    L117
L50:
  mov    -0x18(%rbp),%rax
  lea    D245(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  jne    L188
  mov    D135(%rip),%rdx
  lea    -0x10(%rbp),%rax
  movq   %rdx,%xmm0
  mov    %rax,%rdi
  call   <_vtodb@plt>
  mov    %eax,-0x1c(%rbp)
  jmp    L117
L188:
  mov    -0x18(%rbp),%rax
  lea    D15(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  jne    L92
  mov    D178(%rip),%rdx
  lea    -0x10(%rbp),%rax
  movq   %rdx,%xmm0
  mov    %rax,%rdi
  call   <_vtodb@plt>
  mov    %eax,-0x1c(%rbp)
  jmp    L117
L92:
  mov    -0x18(%rbp),%rax
  lea    D69(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  jne    L211
  mov    D57(%rip),%rdx
  lea    -0x10(%rbp),%rax
  movq   %rdx,%xmm0
  mov    %rax,%rdi
  call   <_vtodb@plt>
  mov    %eax,-0x1c(%rbp)
  jmp    L117
L211:
  mov    -0x18(%rbp),%rax
  lea    D18(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  jne    L157
  mov    D158(%rip),%rdx
  lea    -0x10(%rbp),%rax
  movq   %rdx,%xmm0
  mov    %rax,%rdi
  call   <_vtodb@plt>
  mov    %eax,-0x1c(%rbp)
  jmp    L117
L157:
  mov    -0x18(%rbp),%rax
  lea    D261(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcasecmp@plt>
  test   %eax,%eax
  jne    L95
  mov    D171(%rip),%rdx
  lea    -0x10(%rbp),%rax
  movq   %rdx,%xmm0
  mov    %rax,%rdi
  call   <_vtodb@plt>
  mov    %eax,-0x1c(%rbp)
  jmp    L117
L95:
  movl   $0xffffffff,-0x1c(%rbp)
L117:
  cmpl   $0x0,-0x1c(%rbp)
  jne    L131
  cmpq   $0x0,-0x30(%rbp)
  je     L131
  movsd  -0x10(%rbp),%xmm0
  mov    -0x30(%rbp),%rax
  movsd  %xmm0,(%rax)
L131:
  mov    -0x1c(%rbp),%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L277
  call   <__stack_chk_fail@plt>
L277:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D98
type: string
name: extract_symbolic_data
arguments: data_tag: D199
type: string
name: extract_symbolic_data
arguments: data_tag: D16
type: f64
name: extract_symbolic_data
arguments: data_tag: D61
type: string
name: extract_symbolic_data
arguments: data_tag: D154
type: f64
name: extract_symbolic_data
arguments: data_tag: D221
type: string
name: extract_symbolic_data
arguments: data_tag: D37
type: f64
name: extract_symbolic_data
arguments: data_tag: D3
type: string
name: extract_symbolic_data
arguments: data_tag: D225
type: f64
name: extract_symbolic_data
arguments: data_tag: D53
type: string
name: extract_symbolic_data
arguments: data_tag: D57
type: f64
name: extract_symbolic_data
arguments: data_tag: D119
type: string
name: extract_symbolic_data
arguments: data_tag: D45
type: f64
name: extract_symbolic_data
arguments: data_tag: D268
type: string
name: extract_symbolic_data
arguments: data_tag: D262
type: f64
name: extract_symbolic_data
arguments: data_tag: D94
type: string
name: extract_symbolic_data
arguments: data_tag: D245
type: string
name: extract_symbolic_data
arguments: data_tag: D135
type: byte[8]
name: extract_symbolic_data
arguments: data_tag: D15
type: string
name: extract_symbolic_data
arguments: data_tag: D178
type: byte[8]
name: extract_symbolic_data
arguments: data_tag: D69
type: string
name: extract_symbolic_data
arguments: data_tag: D18
type: string
name: extract_symbolic_data
arguments: data_tag: D158
type: byte[8]
name: extract_symbolic_data
arguments: data_tag: D261
type: string
name: extract_symbolic_data
arguments: data_tag: D171
type: byte[8]

tool: D98: dbm

tool: D199: dbf

tool: D16: 120

tool: D61: dbv

tool: D154: 13

tool: D221: dbmv

tool: D37: 47

tool: D3: dbuv

tool: D225: 107

tool: D53: dbemfv

tool: D57: 7

tool: D119: dbemfmv

tool: D45: 53

tool: D268: dbemfuv

tool: D262: 113

tool: D94: v

tool: D245: mv

tool: {"D135": [0x00,0x00,0x00,0x00,0x00,0x80,0x47,0xc0]}

tool: D15: uv

tool: {"D178": [0x00,0x00,0x00,0x00,0x00,0xc0,0x5a,0xc0]}

tool: D69: emfv

tool: D18: emfmv

tool: {"D158": [0x00,0x00,0x00,0x00,0x00,0x80,0x4a,0xc0]}

tool: D261: emfmuv

tool: {"D171": [0x00,0x00,0x00,0x00,0x00,0x40,0x5c,0xc0]}

assistant: ```c
int amplstr(char *str, double *ampl) {
  int result = 0;
  char *end;
  double a = strtod(str, &end);
  if (!*end)
    result = -1;
  else if (!strcasecmp(end, "dbm"))
    ;
  else if (!strcasecmp(end, "dbf"))
    a -= 120.0;
  else if (!strcasecmp(end, "dbv"))
    a += 13.0;
  else if (!strcasecmp(end, "dbmv"))
    a -= 47.0;
  else if (!strcasecmp(end, "dbuv"))
    a -= 107.0;
  else if (!strcasecmp(end, "dbemfv"))
    a += 7.0;
  else if (!strcasecmp(end, "dbemfmv"))
    a -= 53.0;
  else if (!strcasecmp(end, "dbemfuv"))
    a -= 113.0;
  else if (!strcasecmp(end, "v"))
    result = _vtodb(&a, 13.0);
  else if (!strcasecmp(end, "mv"))
    result = _vtodb(&a, -47.0);
  else if (!strcasecmp(end, "uv"))
    result = _vtodb(&a, -107.0);
  else if (!strcasecmp(end, "emfv"))
    result = _vtodb(&a, 7.0);
  else if (!strcasecmp(end, "emfmv"))
    result = _vtodb(&a, -53.0);
  else if (!strcasecmp(end, "emfmuv"))
    result = _vtodb(&a, -113.0);
  else
    result = -1;
  if (result == 0 && ampl != NULL)
    *ampl = a;
  return result;
}
```