user: 提供的汇编代码用C语言表示会是什么样子：

```asm
<calc_operation>:
  endbr64
  push   %rbp
  sub    $0x10,%rsp
  movsd  %xmm0,0x8(%rsp)
  pxor   %xmm0,%xmm0
  movsd  %xmm1,(%rsp)
  test   %rdi,%rdi
  je     L142
  lea    D55(%rip),%rsi
  mov    %rdi,%rbp
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L57
  movsd  0x8(%rsp),%xmm0
  addsd  (%rsp),%xmm0
L142:
  add    $0x10,%rsp
  pop    %rbp
  ret
  nopw   0x0(%rax,%rax,1)
L57:
  lea    D74(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L34
  movsd  0x8(%rsp),%xmm0
  subsd  (%rsp),%xmm0
  add    $0x10,%rsp
  pop    %rbp
  ret
  nopl   (%rax)
L34:
  lea    D79(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L49
  movsd  0x8(%rsp),%xmm0
  mulsd  (%rsp),%xmm0
  jmp    L142
  nopl   0x0(%rax)
L49:
  lea    D91(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L41
  movsd  (%rsp),%xmm4
  pxor   %xmm0,%xmm0
  ucomisd %xmm0,%xmm4
  jp     L167
  je     L142
L167:
  movsd  0x8(%rsp),%xmm0
  divsd  (%rsp),%xmm0
  jmp    L142
  nopl   0x0(%rax)
L41:
  lea    D10(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L162
  movsd  (%rsp),%xmm3
  pxor   %xmm0,%xmm0
  ucomisd %xmm0,%xmm3
  jp     L178
  je     L142
L178:
  movsd  D96(%rip),%xmm2
  movsd  0x8(%rsp),%xmm0
  divsd  (%rsp),%xmm0
  movapd %xmm0,%xmm1
  movsd  D25(%rip),%xmm3
  andpd  %xmm2,%xmm1
  ucomisd %xmm1,%xmm3
  jbe    L142
  cvttsd2si %xmm0,%rax
  pxor   %xmm1,%xmm1
  movsd  D2(%rip),%xmm4
  andnpd %xmm0,%xmm2
  cvtsi2sd %rax,%xmm1
  movapd %xmm1,%xmm3
  cmpnlesd %xmm0,%xmm3
  andpd  %xmm4,%xmm3
  subsd  %xmm3,%xmm1
  orpd   %xmm2,%xmm1
  movapd %xmm1,%xmm0
  jmp    L142
  nopw   0x0(%rax,%rax,1)
L162:
  lea    D3(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L153
  movsd  (%rsp),%xmm3
  pxor   %xmm0,%xmm0
  ucomisd %xmm0,%xmm3
  jp     L87
  je     L142
L87:
  movsd  (%rsp),%xmm1
  movsd  0x8(%rsp),%xmm0
  add    $0x10,%rsp
  pop    %rbp
  jmp    1070 <fmod@plt>
L153:
  lea    D18(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  pxor   %xmm0,%xmm0
  test   %rax,%rax
  jne    L142
  movsd  (%rsp),%xmm1
  movsd  0x8(%rsp),%xmm0
  add    $0x10,%rsp
  pop    %rbp
  jmp    1090 <pow@plt>
```

tool_calls: name: unpack_data
arguments: data_tag: D55
type_guessed: string
name: unpack_data
arguments: data_tag: D74
type_guessed: string
name: unpack_data
arguments: data_tag: D79
type_guessed: string
name: unpack_data
arguments: data_tag: D91
type_guessed: string
name: unpack_data
arguments: data_tag: D10
type_guessed: string
name: unpack_data
arguments: data_tag: D96
type_guessed: byte[8]
name: unpack_data
arguments: data_tag: D25
type_guessed: byte[8]
name: unpack_data
arguments: data_tag: D2
type_guessed: byte[8]
name: unpack_data
arguments: data_tag: D3
type_guessed: string
name: unpack_data
arguments: data_tag: D18
type_guessed: string

tool: D55: +

tool: D74: -

tool: D79: *

tool: D91: /

tool: D10: //

tool: {"D96": [0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f]}

tool: {"D25": [0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x43]}

tool: {"D2": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

tool: D3: %

tool: D18: **

assistant: ```c
double calc_operation(const char *oper, double value1, double value2) {
  if (!oper)
    return 0;
  if (strcmp(oper, "+") == 0)
    return value1 + value2;
  if (strcmp(oper, "-") == 0)
    return value1 - value2;
  if (strcmp(oper, "*") == 0)
    return value1 * value2;
  if (strcmp(oper, "/") == 0)
    return (value2 != 0) ? value1 / value2 : 0;
  if (strcmp(oper, "//") == 0)
    return (value2 != 0) ? floor(value1 / value2) : 0;
  if (strcmp(oper, "%") == 0)
    return (value2 != 0) ? fmod(value1, value2) : 0;
  if (strcmp(oper, "**") == 0)
    return pow(value1, value2);
  return 0;
}
```