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

```asm
<_change_freq>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x48,%rsp
  mov    %rdi,%rbx
  mov    %fs:0x28,%rax
  mov    %rax,0x38(%rsp)
  xor    %eax,%eax
  movl   $0x800,0x14(%rsp)
  movl   $0x1000,0x18(%rsp)
  movl   $0x1800,0x1c(%rsp)
  movl   $0x0,0x20(%rsp)
  movl   $0x80,0x24(%rsp)
  movl   $0x100,0x28(%rsp)
  movl   $0x180,0x2c(%rsp)
  pxor   %xmm0,%xmm0
  cvtsi2sd %edx,%xmm0
  divsd  D14(%rip),%xmm0
  mulsd  D12(%rip),%xmm0
  cvttsd2si %xmm0,%r14d
  mov    %r14d,%eax
  sar    $0x10,%eax
  mov    %eax,0xc(%rsp)
  lea    0x14(%rsp),%r12
  lea    0x20(%rsp),%r15
  movslq %esi,%r13
L12:
  mov    0x20(%rsp,%r13,4),%ebp
  add    (%r12),%ebp
  movswl %r14w,%edx
  lea    0x62(%rbp),%esi
  mov    %rbx,%rdi
  call   <write16@plt>
  lea    0x64(%rbp),%esi
  mov    0xc(%rsp),%edx
  mov    %rbx,%rdi
  call   <write16@plt>
  add    $0x4,%r12
  cmp    %r15,%r12
  jne    L12
  mov    $0x152,%edx
  mov    $0x210,%esi
  mov    %rbx,%rdi
  call   <write32@plt>
  mov    $0x152,%edx
  mov    $0x310,%esi
  mov    %rbx,%rdi
  call   <write32@plt>
  mov    $0x152,%edx
  mov    $0x350,%esi
  mov    %rbx,%rdi
  call   <write32@plt>
  mov    $0x152,%edx
  mov    $0x390,%esi
  mov    %rbx,%rdi
  call   <write32@plt>
  mov    $0x152,%edx
  mov    $0x3d0,%esi
  mov    %rbx,%rdi
  call   <write32@plt>
  mov    $0x152,%edx
  mov    $0x410,%esi
  mov    %rbx,%rdi
  call   <write32@plt>
  mov    $0x152,%edx
  mov    $0x450,%esi
  mov    %rbx,%rdi
  call   <write32@plt>
  mov    $0x152,%edx
  mov    $0x490,%esi
  mov    %rbx,%rdi
  call   <write32@plt>
  mov    $0x152,%edx
  mov    $0x4d0,%esi
  mov    %rbx,%rdi
  call   <write32@plt>
  mov    $0x152,%edx
  mov    $0x510,%esi
  mov    %rbx,%rdi
  call   <write32@plt>
  mov    $0x152,%edx
  mov    $0x550,%esi
  mov    %rbx,%rdi
  call   <write32@plt>
  mov    $0x152,%edx
  mov    $0x590,%esi
  mov    %rbx,%rdi
  call   <write32@plt>
  mov    $0x152,%edx
  mov    $0x5d0,%esi
  mov    %rbx,%rdi
  call   <write32@plt>
  mov    $0x10000,%edx
  mov    $0x11c,%esi
  mov    %rbx,%rdi
  call   <write32@plt>
  orl    $0x40040,0x100(%rbx)
  mov    0x38(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L7
  mov    $0x1,%eax
  add    $0x48,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L7:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: data_tag: D14
type_infered: byte[8]
name: unpack_data
arguments: data_tag: D12
type_infered: f64

tool: {"D14": [0x00,0x00,0x00,0x00,0x84,0xd7,0x97,0x41]}

tool: D12: 4294967296

assistant: ```c
int _change_freq(char *BASE, int channel, int freq) {
  int FREQ, i;
  double freq_frac;
  unsigned int GC314FS_GCoffset[3] = {0x800, 0x1000, 0x1800};
  unsigned int chan_control_map[4] = {0x00, 0x80, 0x100, 0x180};
  freq_frac = (double)freq / (double)100000000;
  FREQ = 4294967296.0 * freq_frac;
  for (i = 0; i < 3; i++) {
    write16(BASE, GC314FS_GCoffset[i] + chan_control_map[channel] + 0x62, (short)(FREQ & 0x0000ffff));
    write16(BASE, GC314FS_GCoffset[i] + chan_control_map[channel] + 0x64, (short)((FREQ >> 16) & 0x0000ffff));
  }
  write32(BASE, 0x210, 0x152);
  write32(BASE, 0x310, 0x152);
  write32(BASE, 0x350, 0x152);
  write32(BASE, 0x390, 0x152);
  write32(BASE, 0x3d0, 0x152);
  write32(BASE, 0x410, 0x152);
  write32(BASE, 0x450, 0x152);
  write32(BASE, 0x490, 0x152);
  write32(BASE, 0x4d0, 0x152);
  write32(BASE, 0x510, 0x152);
  write32(BASE, 0x550, 0x152);
  write32(BASE, 0x590, 0x152);
  write32(BASE, 0x5d0, 0x152);
  write32(BASE, 0x11c, 0x00010000);
  *((unsigned int *)(BASE + 0x100)) |= 0x00000040;
  *((unsigned int *)(BASE + 0x100)) |= 0x00040000;
  return 1;
}
```