user: 请从给定的汇编指令推导出C源代码：

```asm
<Asc2>:
  endbr64
  push   %r15
  push   %r14
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  movq   %xmm0,%r15
  movq   %xmm2,%rbp
  movq   %xmm3,%rbx
  movsd  D91(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  call   <tan@plt>
  movq   %xmm0,%r14
  lea    0x8(%rsp),%rdi
  mov    %rsp,%rsi
  movsd  D91(%rip),%xmm0
  movq   %r15,%xmm4
  mulsd  %xmm4,%xmm0
  call   <sincos@plt>
  movsd  0x8(%rsp),%xmm1
  movq   %r14,%xmm2
  movq   %rbp,%xmm5
  mulsd  %xmm5,%xmm2
  movq   %rbx,%xmm3
  mulsd  (%rsp),%xmm3
  subsd  %xmm2,%xmm3
  movapd %xmm3,%xmm0
  andpd  D111(%rip),%xmm0
  movsd  D52(%rip),%xmm2
  comisd %xmm0,%xmm2
  ja     L57
  movapd %xmm1,%xmm2
  andpd  D111(%rip),%xmm1
  movsd  D52(%rip),%xmm0
  comisd %xmm1,%xmm0
  ja     L132
L111:
  ucomisd D118(%rip),%xmm2
  jp     L126
  je     L132
L126:
  ucomisd D118(%rip),%xmm3
  jp     L120
  jne    L120
  pxor   %xmm0,%xmm0
  comisd %xmm2,%xmm0
  ja     L86
  movsd  D116(%rip),%xmm0
  jmp    L25
L132:
  movsd  D20(%rip),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm3,%xmm1
  jbe    L50
L5:
  addsd  D99(%rip),%xmm0
L25:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r14
  pop    %r15
  ret
L50:
  movsd  D52(%rip),%xmm0
  jmp    L25
L120:
  divsd  %xmm3,%xmm2
  movapd %xmm2,%xmm0
  call   <atan@plt>
  mulsd  D37(%rip),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm0,%xmm1
  jbe    L25
  jmp    L5
L86:
  movsd  D117(%rip),%xmm0
  jmp    L5
L57:
  movapd %xmm1,%xmm2
  andpd  D111(%rip),%xmm1
  movsd  D52(%rip),%xmm0
  comisd %xmm1,%xmm0
  ja     L25
  pxor   %xmm3,%xmm3
  jmp    L111
```

tool_calls: name: parse_data
arguments: tag: D91
data_type: byte[8]
name: parse_data
arguments: tag: D111
data_type: qword[2]
name: parse_data
arguments: tag: D52
data_type: byte[8]
name: parse_data
arguments: tag: D118
data_type: byte[8]
name: parse_data
arguments: tag: D116
data_type: byte[8]
name: parse_data
arguments: tag: D20
data_type: byte[8]
name: parse_data
arguments: tag: D99
data_type: f64
name: parse_data
arguments: tag: D37
data_type: byte[8]
name: parse_data
arguments: tag: D117
data_type: byte[8]

tool: {"D91": [0x39,0x9d,0x52,0xa2,0x46,0xdf,0x91,0x3f]}

tool: {"D111": [0x7fffffffffffffff,0x0000000000000000]}

tool: {"D52": [0xbb,0xbd,0xd7,0xd9,0xdf,0x7c,0xdb,0x3d]}

tool: {"D118": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D116": [0x00,0x00,0x00,0x00,0x00,0x80,0x56,0x40]}

tool: {"D20": [0xbb,0xbd,0xd7,0xd9,0xdf,0x7c,0xdb,0xbd]}

tool: D99: 180

tool: {"D37": [0xf8,0xc1,0x63,0x1a,0xdc,0xa5,0x4c,0x40]}

tool: {"D117": [0x00,0x00,0x00,0x00,0x00,0x80,0x56,0xc0]}

assistant: ```c
double Asc2(double x, double f, double sine, double cose) {
  double ass, sinx;
  ass = -tan((f) * (3.14159265358979323846 / 180.0)) * sine + cose * cos((x) * (3.14159265358979323846 / 180.0));
  if (fabs(ass) < 1E-10)
    ass = 0;
  sinx = sin((x) * (3.14159265358979323846 / 180.0));
  if (fabs(sinx) < 1E-10)
    sinx = 0;
  if (sinx == 0) {
    if (ass < 0)
      ass = -1E-10;
    else
      ass = 1E-10;
  } else if (ass == 0) {
    if (sinx < 0)
      ass = -90;
    else
      ass = 90;
  } else {
    ass = (atan(sinx / ass) * (180.0 / 3.14159265358979323846));
  }
  if (ass < 0)
    ass = 180 + ass;
  return (ass);
}
```