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

```asm
<bm_get_hsl>:
  endbr64
  push   %r15
  push   %r14
  mov    %rsi,%r14
  push   %r13
  mov    %rdx,%r13
  push   %r12
  mov    %rcx,%r12
  push   %rbp
  mov    %edi,%ebp
  mov    %rsi,%rdi
  push   %rbx
  sub    $0x18,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  call   <assert@plt>
  mov    %r13,%rdi
  call   <assert@plt>
  mov    %r12,%rdi
  call   <assert@plt>
  mov    %ebp,%edi
  lea    0x7(%rsp),%rcx
  lea    0x6(%rsp),%rdx
  lea    0x5(%rsp),%rsi
  call   <bm_get_rgb@plt>
  movzbl 0x7(%rsp),%edx
  movzbl 0x6(%rsp),%ecx
  movzbl 0x5(%rsp),%eax
  cmp    %cl,%dl
  movzbl %cl,%edi
  movzbl %cl,%ebx
  cmovae %edx,%edi
  movzbl %al,%ebp
  cmp    %al,%dil
  cmovae %edi,%ebp
  cmp    %cl,%dl
  cmovbe %edx,%ebx
  mov    %ebp,%esi
  cmp    %al,%bl
  cmova  %eax,%ebx
  sub    %bl,%sil
  jne    L65
  movq   $0x0,(%r14)
  pxor   %xmm1,%xmm1
  mov    $0x168,%edi
  movapd %xmm1,%xmm0
  call   <fmod@plt>
  pxor   %xmm1,%xmm1
  comisd %xmm0,%xmm1
  movsd  %xmm0,(%r14)
  ja     L20
L129:
  add    %ebx,%ebp
  pxor   %xmm0,%xmm0
  cvtsi2sd %ebp,%xmm0
  mulsd  D63(%rip),%xmm0
  divsd  D94(%rip),%xmm0
  movsd  %xmm0,(%r12)
L105:
  movsd  %xmm1,0x0(%r13)
  movsd  D1(%rip),%xmm0
  movsd  (%r12),%xmm1
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,(%r12)
  mulsd  0x0(%r13),%xmm0
  movsd  %xmm0,0x0(%r13)
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L42
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L20:
  addsd  D133(%rip),%xmm0
  movsd  %xmm0,(%r14)
  jmp    L129
  nopw   0x0(%rax,%rax,1)
L65:
  cmp    %al,%dil
  jbe    L81
  cmp    %bpl,%cl
  je     L98
  cmp    %bpl,%dl
  je     L82
  movsd  (%r14),%xmm0
  movzbl %sil,%r15d
L95:
  mulsd  D100(%rip),%xmm0
  mov    $0x168,%edi
  call   <fmod@plt>
  pxor   %xmm1,%xmm1
  comisd %xmm0,%xmm1
  movsd  %xmm0,(%r14)
  ja     L14
  add    %ebx,%ebp
  pxor   %xmm0,%xmm0
  movsd  D94(%rip),%xmm3
  cvtsi2sd %ebp,%xmm0
  mulsd  D63(%rip),%xmm0
  divsd  %xmm3,%xmm0
  movsd  %xmm0,(%r12)
L31:
  addsd  %xmm0,%xmm0
  movsd  D119(%rip),%xmm2
  pxor   %xmm1,%xmm1
  cvtsi2sd %r15d,%xmm1
  subsd  %xmm2,%xmm0
  andpd  D12(%rip),%xmm0
  subsd  %xmm0,%xmm2
  divsd  %xmm2,%xmm1
  divsd  %xmm3,%xmm1
  jmp    L105
  nopw   0x0(%rax,%rax,1)
L82:
  sub    %ecx,%eax
  pxor   %xmm0,%xmm0
  pxor   %xmm1,%xmm1
  movzbl %sil,%r15d
  cvtsi2sd %eax,%xmm0
  cvtsi2sd %r15d,%xmm1
  divsd  %xmm1,%xmm0
  addsd  D111(%rip),%xmm0
  movsd  %xmm0,(%r14)
  jmp    L95
  nopl   (%rax)
L14:
  addsd  D133(%rip),%xmm0
  add    %ebp,%ebx
  movsd  D94(%rip),%xmm3
  movsd  %xmm0,(%r14)
  pxor   %xmm0,%xmm0
  cvtsi2sd %ebx,%xmm0
  mulsd  D63(%rip),%xmm0
  divsd  %xmm3,%xmm0
  movsd  %xmm0,(%r12)
  jmp    L31
  cs nopw 0x0(%rax,%rax,1)
L98:
  sub    %eax,%edx
  pxor   %xmm0,%xmm0
  pxor   %xmm1,%xmm1
  movzbl %sil,%r15d
  cvtsi2sd %edx,%xmm0
  cvtsi2sd %r15d,%xmm1
  divsd  %xmm1,%xmm0
  addsd  D93(%rip),%xmm0
  movsd  %xmm0,(%r14)
  jmp    L95
  nopl   (%rax)
L81:
  sub    %edx,%ecx
  movzbl %sil,%r15d
  pxor   %xmm0,%xmm0
  mov    $0x6,%edi
  pxor   %xmm1,%xmm1
  cvtsi2sd %ecx,%xmm0
  cvtsi2sd %r15d,%xmm1
  divsd  %xmm1,%xmm0
  call   <fmod@plt>
  movsd  %xmm0,(%r14)
  jmp    L95
L42:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_label: D63
type: f64
name: parse_data
arguments: data_label: D94
type: f64
name: parse_data
arguments: data_label: D1
type: byte[8]
name: parse_data
arguments: data_label: D133
type: f64
name: parse_data
arguments: data_label: D100
type: f64
name: parse_data
arguments: data_label: D119
type: f64
name: parse_data
arguments: data_label: D12
type: qword[2]
name: parse_data
arguments: data_label: D111
type: f64
name: parse_data
arguments: data_label: D93
type: f64

tool: D63: 0.5

tool: D94: 255

tool: {"D1": [0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x40]}

tool: D133: 360

tool: D100: 60

tool: D119: 1

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

tool: D111: 4

tool: D93: 2

assistant: ```c
void bm_get_hsl(unsigned int col, double *H, double *S, double *L) {
  unsigned char R, G, B, M, m, C;
  assert(H);
  assert(S);
  assert(L);
  bm_get_rgb(col, &R, &G, &B);
  M = (((R) > ((((G) > (B)) ? (G) : (B)))) ? (R) : ((((G) > (B)) ? (G) : (B))));
  m = (((R) < ((((G) < (B)) ? (G) : (B)))) ? (R) : ((((G) < (B)) ? (G) : (B))));
  C = M - m;
  if (C == 0) {
    *H = 0;
  } else if (M == R) {
    *H = fmod((double)(G - B) / C, 6);
  } else if (M == G) {
    *H = (double)(B - R) / C + 2.0;
  } else if (M == B) {
    *H = (double)(R - G) / C + 4.0;
  }
  *H = fmod(*H * 60.0, 360);
  if (*H < 0)
    *H = 360.0 + *H;
  *L = 0.5 * (M + m) / 255.0;
  if (C == 0) {
    *S = 0;
  } else {
    *S = (double)C / (1.0 - fabs(2.0 * *L - 1.0)) / 255.0;
  }
  *L *= 100;
  *S *= 100;
}
```