user: 这段汇编代码用C语言表示是什么样的？

```asm
<generic_print>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %rdi,-0x8(%rbp)
  mov    %rsi,-0x10(%rbp)
  mov    -0x10(%rbp),%rax
  lea    D12(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L125
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,%esi
  lea    D13(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L7
L125:
  mov    -0x10(%rbp),%rax
  lea    D33(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L44
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,%esi
  lea    D1(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L7
L44:
  mov    -0x10(%rbp),%rax
  lea    D125(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L72
  mov    -0x8(%rbp),%rax
  movss  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  lea    D93(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  jmp    L7
L72:
  mov    -0x10(%rbp),%rax
  lea    D75(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L115
  mov    -0x8(%rbp),%rax
  mov    (%rax),%rax
  movq   %rax,%xmm0
  lea    D128(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  jmp    L7
L115:
  mov    -0x10(%rbp),%rax
  lea    D127(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L95
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <putchar@plt>
  jmp    L7
L95:
  mov    -0x10(%rbp),%rax
  lea    D110(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L105
  mov    -0x8(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D46(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L7
L105:
  mov    -0x10(%rbp),%rax
  lea    D0(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L7
  mov    -0x8(%rbp),%rax
  mov    %rax,%rsi
  lea    D92(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L7:
  nop
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: label: D12
data_type: string
name: disassemble_data
arguments: label: D13
data_type: string
name: disassemble_data
arguments: label: D33
data_type: string
name: disassemble_data
arguments: label: D1
data_type: string
name: disassemble_data
arguments: label: D125
data_type: string
name: disassemble_data
arguments: label: D93
data_type: string
name: disassemble_data
arguments: label: D75
data_type: string
name: disassemble_data
arguments: label: D128
data_type: string
name: disassemble_data
arguments: label: D127
data_type: string
name: disassemble_data
arguments: label: D110
data_type: string
name: disassemble_data
arguments: label: D46
data_type: string
name: disassemble_data
arguments: label: D0
data_type: string
name: disassemble_data
arguments: label: D92
data_type: string

tool: D12: d

tool: D13: %d

tool: D33: u

tool: D1: %u

tool: D125: f

tool: D93: %f

tool: D75: lf

tool: D128: %lf

tool: D127: c

tool: D110: s

tool: D46: %s

tool: D0: p

tool: D92: %p

assistant: ```c
void generic_print(void *data, char *type) {
  if (strcmp(type, "d") == 0) {
    printf("%d", *(int *)data);
  } else if (strcmp(type, "u") == 0) {
    printf("%u", *(unsigned *)data);
  } else if (strcmp(type, "f") == 0) {
    printf("%f", *(float *)data);
  } else if (strcmp(type, "lf") == 0) {
    printf("%lf", *(double *)data);
  } else if (strcmp(type, "c") == 0) {
    printf("%c", *(char *)data);
  } else if (strcmp(type, "s") == 0) {
    printf("%s", *(char **)data);
  } else if (strcmp(type, "p") == 0) {
    printf("%p", data);
  }
}
```