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

```asm
<bm_get_hsl>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %edi,%ebx
  mov    %rsi,%r15
  mov    %rdx,%r13
  mov    %rcx,%r12
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  mov    %rsi,%rdi
  call   <assert@plt>
  mov    %r13,%rdi
  call   <assert@plt>
  mov    %r12,%rdi
  call   <assert@plt>
  lea    0x7(%rsp),%rcx
  lea    0x6(%rsp),%rdx
  lea    0x5(%rsp),%rsi
  mov    %ebx,%edi
  call   <bm_get_rgb@plt>
  movzbl 0x7(%rsp),%edx
  movzbl 0x6(%rsp),%ecx
  cmp    %cl,%dl
  mov    %ecx,%esi
  cmovae %edx,%esi
  movzbl 0x5(%rsp),%eax
  cmp    %al,%sil
  mov    %eax,%ebp
  cmovae %esi,%ebp
  cmp    %cl,%dl
  mov    %ecx,%ebx
  cmovbe %edx,%ebx
  cmp    %al,%bl
  cmova  %eax,%ebx
  mov    %ebp,%r14d
  sub    %bl,%r14b
  jne    L72
  movq   $0x0,(%r15)
  mov    $0x168,%edi
  pxor   %xmm0,%xmm0
  call   <fmod@plt>
  movsd  %xmm0,(%r15)
  pxor   %xmm3,%xmm3
  comisd %xmm0,%xmm3
  ja     L124
  movzbl %bpl,%ebp
  movzbl %bl,%ebx
  add    %ebx,%ebp
  pxor   %xmm0,%xmm0
  cvtsi2sd %ebp,%xmm0
  mulsd  D88(%rip),%xmm0
  divsd  D10(%rip),%xmm0
  movsd  %xmm0,(%r12)
  pxor   %xmm0,%xmm0
  jmp    L45
L72:
  cmp    %al,%sil
  jbe    L70
  cmp    %bpl,%cl
  je     L26
  cmp    %bpl,%dl
  je     L107
L112:
  movsd  D124(%rip),%xmm0
  mulsd  (%r15),%xmm0
  mov    $0x168,%edi
  call   <fmod@plt>
  movsd  %xmm0,(%r15)
  pxor   %xmm1,%xmm1
  comisd %xmm0,%xmm1
  ja     L67
  movzbl %bpl,%ebp
  movzbl %bl,%ebx
  add    %ebx,%ebp
  pxor   %xmm0,%xmm0
  cvtsi2sd %ebp,%xmm0
  mulsd  D88(%rip),%xmm0
  divsd  D10(%rip),%xmm0
  movsd  %xmm0,(%r12)
L120:
  movzbl %r14b,%r14d
  pxor   %xmm1,%xmm1
  cvtsi2sd %r14d,%xmm1
  addsd  %xmm0,%xmm0
  movsd  D142(%rip),%xmm2
  subsd  %xmm2,%xmm0
  andpd  D80(%rip),%xmm0
  subsd  %xmm0,%xmm2
  divsd  %xmm2,%xmm1
  movapd %xmm1,%xmm0
  divsd  D10(%rip),%xmm0
L45:
  movsd  %xmm0,0x0(%r13)
  movsd  D103(%rip),%xmm0
  movapd %xmm0,%xmm1
  mulsd  (%r12),%xmm1
  movsd  %xmm1,(%r12)
  mulsd  0x0(%r13),%xmm0
  movsd  %xmm0,0x0(%r13)
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L33
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L70:
  movzbl %cl,%ecx
  movzbl %dl,%edx
  sub    %edx,%ecx
  pxor   %xmm0,%xmm0
  cvtsi2sd %ecx,%xmm0
  movzbl %r14b,%eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  divsd  %xmm1,%xmm0
  mov    $0x6,%edi
  call   <fmod@plt>
  movsd  %xmm0,(%r15)
  jmp    L112
L26:
  movzbl %dl,%edx
  movzbl %al,%eax
  sub    %eax,%edx
  pxor   %xmm0,%xmm0
  cvtsi2sd %edx,%xmm0
  movzbl %r14b,%eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  divsd  %xmm1,%xmm0
  addsd  D166(%rip),%xmm0
  movsd  %xmm0,(%r15)
  jmp    L112
L107:
  movzbl %al,%eax
  movzbl %cl,%ecx
  sub    %ecx,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movzbl %r14b,%eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  divsd  %xmm1,%xmm0
  addsd  D161(%rip),%xmm0
  movsd  %xmm0,(%r15)
  jmp    L112
L67:
  addsd  D60(%rip),%xmm0
  movsd  %xmm0,(%r15)
  movzbl %bl,%ebx
  movzbl %bpl,%ebp
  add    %ebp,%ebx
  pxor   %xmm0,%xmm0
  cvtsi2sd %ebx,%xmm0
  mulsd  D88(%rip),%xmm0
  divsd  D10(%rip),%xmm0
  movsd  %xmm0,(%r12)
  jmp    L120
L124:
  addsd  D60(%rip),%xmm0
  movsd  %xmm0,(%r15)
  movzbl %bpl,%ebp
  movzbl %bl,%ebx
  add    %ebx,%ebp
  pxor   %xmm0,%xmm0
  cvtsi2sd %ebp,%xmm0
  mulsd  D88(%rip),%xmm0
  divsd  D10(%rip),%xmm0
  movsd  %xmm0,(%r12)
  pxor   %xmm0,%xmm0
  jmp    L45
L33:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: label: D88
data_type: f64
name: parse_data
arguments: label: D10
data_type: f64
name: parse_data
arguments: label: D124
data_type: f64
name: parse_data
arguments: label: D142
data_type: f64
name: parse_data
arguments: label: D80
data_type: qword[2]
name: parse_data
arguments: label: D103
data_type: byte[8]
name: parse_data
arguments: label: D166
data_type: f64
name: parse_data
arguments: label: D161
data_type: f64
name: parse_data
arguments: label: D60
data_type: f64

tool: D88: 0.5

tool: D10: 255

tool: D124: 60

tool: D142: 1

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

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

tool: D166: 2

tool: D161: 4

tool: D60: 360

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;
}
```