user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<arghandler>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %edi,-0x24(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    $0x28,%edi
  call   <malloc@plt>
  mov    %rax,-0x18(%rbp)
  mov    $0x8,%edi
  call   <malloc@plt>
  mov    -0x18(%rbp),%rdx
  mov    %rax,(%rdx)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  movsd  D58(%rip),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x18(%rbp),%rax
  lea    0x8(%rax),%rbx
  mov    $0x8,%edi
  call   <malloc@plt>
  mov    %rax,(%rbx)
  mov    -0x18(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  movsd  D108(%rip),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x18(%rbp),%rax
  lea    0x10(%rax),%rbx
  mov    $0x4,%edi
  call   <malloc@plt>
  mov    %rax,(%rbx)
  mov    -0x18(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  movl   $0x64,(%rax)
  mov    -0x18(%rbp),%rax
  lea    0x18(%rax),%rbx
  mov    $0x8,%edi
  call   <malloc@plt>
  mov    %rax,(%rbx)
  mov    -0x18(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rax
  movsd  D16(%rip),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x18(%rbp),%rax
  lea    0x20(%rax),%rbx
  mov    $0x8,%edi
  call   <malloc@plt>
  mov    %rax,(%rbx)
  mov    -0x18(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%rax
  movsd  D144(%rip),%xmm0
  movsd  %xmm0,(%rax)
  movl   $0x1,-0x1c(%rbp)
  jmp    L63
L53:
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    D1(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L186
  mov    -0x30(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <usage@plt>
  jmp    L228
L186:
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    D79(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L271
  mov    -0x1c(%rbp),%eax
  add    $0x1,%eax
  cmp    %eax,-0x24(%rbp)
  jne    L226
  mov    -0x30(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <usage@plt>
  jmp    L228
L226:
  addl   $0x1,-0x1c(%rbp)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x30(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%rax
  lea    D112(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sscanf@plt>
  test   %eax,%eax
  jne    L228
  mov    -0x30(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <usage@plt>
  jmp    L228
L271:
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    D94(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L123
  mov    -0x1c(%rbp),%eax
  add    $0x1,%eax
  cmp    %eax,-0x24(%rbp)
  jne    L132
  mov    -0x30(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <usage@plt>
  jmp    L228
L132:
  addl   $0x1,-0x1c(%rbp)
  mov    -0x18(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rdx
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x30(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%rax
  lea    D112(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sscanf@plt>
  test   %eax,%eax
  jne    L228
  mov    -0x30(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <usage@plt>
  jmp    L228
L123:
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    D105(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L232
  mov    -0x1c(%rbp),%eax
  add    $0x1,%eax
  cmp    %eax,-0x24(%rbp)
  jne    L136
  mov    -0x30(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <usage@plt>
  jmp    L228
L136:
  addl   $0x1,-0x1c(%rbp)
  mov    -0x18(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rdx
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x30(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%rax
  lea    D60(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sscanf@plt>
  test   %eax,%eax
  jne    L228
  mov    -0x30(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <usage@plt>
  jmp    L228
L232:
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    D59(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L233
  mov    -0x1c(%rbp),%eax
  add    $0x1,%eax
  cmp    %eax,-0x24(%rbp)
  jne    L276
  mov    -0x30(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <usage@plt>
  jmp    L228
L276:
  addl   $0x1,-0x1c(%rbp)
  mov    -0x18(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rdx
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x30(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%rax
  lea    D112(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sscanf@plt>
  test   %eax,%eax
  jne    L228
  mov    -0x30(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <usage@plt>
  jmp    L228
L233:
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    D81(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L119
  mov    -0x1c(%rbp),%eax
  add    $0x1,%eax
  cmp    %eax,-0x24(%rbp)
  jne    L277
  mov    -0x30(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <usage@plt>
  jmp    L228
L277:
  addl   $0x1,-0x1c(%rbp)
  mov    -0x18(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%rdx
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x30(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%rax
  lea    D112(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sscanf@plt>
  test   %eax,%eax
  jne    L228
  mov    -0x30(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <usage@plt>
  jmp    L228
L119:
  mov    -0x30(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <usage@plt>
L228:
  addl   $0x1,-0x1c(%rbp)
L63:
  mov    -0x1c(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  jl     L53
  mov    -0x18(%rbp),%rax
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: parse_data
arguments: label: D58
type: f64
name: parse_data
arguments: label: D108
type: byte[8]
name: parse_data
arguments: label: D16
type: byte[8]
name: parse_data
arguments: label: D144
type: byte[8]
name: parse_data
arguments: label: D1
type: string
name: parse_data
arguments: label: D79
type: string
name: parse_data
arguments: label: D112
type: string
name: parse_data
arguments: label: D94
type: string
name: parse_data
arguments: label: D105
type: string
name: parse_data
arguments: label: D60
type: string
name: parse_data
arguments: label: D59
type: string
name: parse_data
arguments: label: D81
type: string

tool: D58: 0.05

tool: {"D108": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

tool: {"D16": [0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x40]}

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

tool: D1: -h

tool: D79: -K

tool: D112: %lf

tool: D94: -L

tool: D105: -N

tool: D60: %u

tool: D59: -T0

tool: D81: -T1

assistant: ```c
void *arghandler(int argc, const char *argv[]) {
  int i;
  void **a;
  a = malloc(5 * sizeof(void *));
  a[0] = malloc(sizeof(double));
  *(double *)a[0] = 0.05;
  a[1] = malloc(sizeof(double));
  *(double *)a[1] = 1;
  a[2] = malloc(sizeof(unsigned int));
  *(unsigned int *)a[2] = 100;
  a[3] = malloc(sizeof(double));
  *(double *)a[3] = 10;
  a[4] = malloc(sizeof(double));
  *(double *)a[4] = 100;
  for (i = 1; i < argc; i++) {
    if (!strcmp(argv[i], "-h"))
      usage(argv[0]);
    else if (!strcmp(argv[i], "-K")) {
      if (i + 1 == argc)
        usage(argv[0]);
      else {
        i++;
        if (!sscanf(argv[i], "%lf", a[0]))
          usage(argv[0]);
      }
    } else if (!strcmp(argv[i], "-L")) {
      if (i + 1 == argc)
        usage(argv[0]);
      else {
        i++;
        if (!sscanf(argv[i], "%lf", a[1]))
          usage(argv[0]);
      }
    } else if (!strcmp(argv[i], "-N")) {
      if (i + 1 == argc)
        usage(argv[0]);
      else {
        i++;
        if (!sscanf(argv[i], "%u", a[2]))
          usage(argv[0]);
      }
    } else if (!strcmp(argv[i], "-T0")) {
      if (i + 1 == argc)
        usage(argv[0]);
      else {
        i++;
        if (!sscanf(argv[i], "%lf", a[3]))
          usage(argv[0]);
      }
    } else if (!strcmp(argv[i], "-T1")) {
      if (i + 1 == argc)
        usage(argv[0]);
      else {
        i++;
        if (!sscanf(argv[i], "%lf", a[4]))
          usage(argv[0]);
      }
    } else
      usage(argv[0]);
  }
  return a;
}
```