user: Translate the below assembly code into C programming language:

```asm
<dmstorad>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %edi,-0x14(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %rdx,-0x28(%rbp)
  mov    %rcx,-0x30(%rbp)
  mov    %r8,-0x38(%rbp)
  mov    %r9,-0x40(%rbp)
  cmpl   $0x0,-0x14(%rbp)
  je     L32
  mov    -0x38(%rbp),%rax
  movsd  (%rax),%xmm0
  movq   D43(%rip),%xmm1
  andpd  %xmm1,%xmm0
  movsd  D29(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  mov    -0x30(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,%edi
  call   <abs@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  addsd  -0x48(%rbp),%xmm0
  movsd  D29(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x48(%rbp)
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,%edi
  call   <abs@plt>
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  movsd  -0x48(%rbp),%xmm1
  addsd  %xmm0,%xmm1
  movsd  D82(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mov    -0x40(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  js     L75
  mov    -0x30(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  js     L75
  mov    -0x38(%rbp),%rax
  movsd  (%rax),%xmm1
  pxor   %xmm0,%xmm0
  comisd %xmm1,%xmm0
  ja     L75
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L76
L75:
  mov    -0x40(%rbp),%rax
  movsd  (%rax),%xmm0
  movq   D7(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  mov    -0x40(%rbp),%rax
  movsd  %xmm0,(%rax)
  jmp    L76
L32:
  mov    -0x40(%rbp),%rax
  movsd  (%rax),%xmm1
  pxor   %xmm0,%xmm0
  comisd %xmm1,%xmm0
  jbe    L74
  mov    -0x40(%rbp),%rax
  movsd  (%rax),%xmm0
  movq   D7(%rip),%xmm1
  xorpd  %xmm0,%xmm1
  movsd  D25(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0x20(%rbp),%rax
  movb   $0x2d,(%rax)
  jmp    L67
L74:
  mov    -0x40(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  D25(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0x20(%rbp),%rax
  movb   $0x2b,(%rax)
L67:
  mov    -0x8(%rbp),%rax
  movq   %rax,%xmm0
  call   <floor@plt>
  mov    -0x28(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  pxor   %xmm2,%xmm2
  cvtsi2sd %eax,%xmm2
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D29(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <floor@plt>
  mov    -0x30(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  pxor   %xmm2,%xmm2
  cvtsi2sd %eax,%xmm2
  movsd  -0x8(%rbp),%xmm0
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D29(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mov    -0x30(%rbp),%rax
  mov    (%rax),%eax
  pxor   %xmm2,%xmm2
  cvtsi2sd %eax,%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D29(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  mov    -0x38(%rbp),%rax
  movsd  %xmm0,(%rax)
L76:
  nop
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D43
datatype: qword
name: disassemble_data
arguments: data_label: D29
datatype: f64
name: disassemble_data
arguments: data_label: D82
datatype: f64
name: disassemble_data
arguments: data_label: D7
datatype: f32[2]
name: disassemble_data
arguments: data_label: D25
datatype: f64

tool: D43: 9223372036854775807

tool: D29: 60

tool: D82: 0.0174532925199432

tool: {"D7": [0.0,-0.0]}

tool: D25: 57.29577951308232

assistant: ```c
void dmstorad(int torad, char *sign, int *deg, int *min, double *sec, double *rad) {
  double absdeg;
  if (torad) {
    *rad = ((fabs(*sec) / 60.0 + (double)(abs(*min))) / 60.0 + (double)(abs(*deg))) * 0.0174532925199432;
    if (*deg < 0 || *min < 0 || *sec < 0.0 || *sign == '-')
      *rad *= -1;
  } else {
    if (*rad < 0) {
      absdeg = -(*rad) * 57.295779513082321;
      *sign = '-';
    } else {
      absdeg = (*rad) * 57.295779513082321;
      *sign = '+';
    }
    *deg = floor(absdeg);
    *min = floor(60.0 * (absdeg - (double)*deg));
    *sec = 60.0 * (60.0 * (absdeg - (double)*deg) - (double)*min);
  }
}
```