user: Demonstrate the C code that generates the assembly output below:

```asm
<conversion>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D50(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x3c(%rbp),%rax
  mov    %rax,%rsi
  lea    D56(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  mov    -0x3c(%rbp),%eax
  cmp    $0x1,%eax
  jne    L20
  lea    D54(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x28(%rbp),%rcx
  lea    -0x30(%rbp),%rdx
  lea    -0x38(%rbp),%rax
  mov    %rax,%rsi
  lea    D29(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  movsd  -0x28(%rbp),%xmm1
  movsd  -0x30(%rbp),%xmm0
  mov    -0x38(%rbp),%rsi
  lea    -0x10(%rbp),%rdx
  lea    -0x18(%rbp),%rcx
  lea    -0x20(%rbp),%rax
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rsi,%xmm0
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <rgb2yuv@plt>
  movsd  -0x10(%rbp),%xmm4
  movsd  -0x18(%rbp),%xmm3
  movsd  -0x20(%rbp),%xmm2
  movsd  -0x28(%rbp),%xmm1
  movsd  -0x30(%rbp),%xmm0
  mov    -0x38(%rbp),%rax
  movapd %xmm4,%xmm5
  movapd %xmm3,%xmm4
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D70(%rip),%rax
  mov    %rax,%rdi
  mov    $0x6,%eax
  call   <printf@plt>
  jmp    L16
L20:
  lea    D37(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x10(%rbp),%rcx
  lea    -0x18(%rbp),%rdx
  lea    -0x20(%rbp),%rax
  mov    %rax,%rsi
  lea    D29(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  movsd  -0x10(%rbp),%xmm1
  movsd  -0x18(%rbp),%xmm0
  mov    -0x20(%rbp),%rsi
  lea    -0x28(%rbp),%rdx
  lea    -0x30(%rbp),%rcx
  lea    -0x38(%rbp),%rax
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rsi,%xmm0
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <yuv2rgb@plt>
  movsd  -0x28(%rbp),%xmm4
  movsd  -0x30(%rbp),%xmm3
  movsd  -0x38(%rbp),%xmm2
  movsd  -0x10(%rbp),%xmm1
  movsd  -0x18(%rbp),%xmm0
  mov    -0x20(%rbp),%rax
  movapd %xmm4,%xmm5
  movapd %xmm3,%xmm4
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D34(%rip),%rax
  mov    %rax,%rdi
  mov    $0x6,%eax
  call   <printf@plt>
L16:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L27
  call   <__stack_chk_fail@plt>
L27:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D50
type_infered: string
name: disassemble_data
arguments: data_label: D56
type_infered: string
name: disassemble_data
arguments: data_label: D54
type_infered: string
name: disassemble_data
arguments: data_label: D29
type_infered: string
name: disassemble_data
arguments: data_label: D70
type_infered: string
name: disassemble_data
arguments: data_label: D37
type_infered: string
name: disassemble_data
arguments: data_label: D34
type_infered: string

tool: D50: Conversion rgb->Yuv 1;Yuv->rgb 2
Choix ?=(1 ou 2)

tool: D56: %d

tool: D54: Entrez les valeurs r,g,b

tool: D29: %lf %lf %lf

tool: D70: r=%lf g=%lf b=%lf -> Y=%lf u=%lf v=%lf


tool: D37: Entrez les valeurs Y,u,v

tool: D34: Y=%lf u=%lf v=%lf -> r=%lf g=%lf b=%lf


assistant: ```c
void conversion() {
  int choix;
  double r, g, b, y, u, v;
  printf("Conversion rgb->Yuv 1;Yuv->rgb 2\nChoix ?=(1 ou 2)");
  scanf("%d", &choix);
  printf("\n");
  if (choix == 1) {
    printf("Entrez les valeurs r,g,b\n");
    scanf("%lf %lf %lf", &r, &g, &b);
    printf("\n");
    rgb2yuv(&y, &u, &v, r, g, b);
    printf("r=%lf g=%lf b=%lf -> Y=%lf u=%lf v=%lf\n", r, g, b, y, u, v);
  } else {
    printf("Entrez les valeurs Y,u,v\n");
    scanf("%lf %lf %lf", &y, &u, &v);
    printf("\n");
    yuv2rgb(&r, &g, &b, y, u, v);
    printf("Y=%lf u=%lf v=%lf -> r=%lf g=%lf b=%lf\n", y, u, v, r, g, b);
  }
}
```