user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<cmdline>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %edi,%ebx
  sub    $0xc8,%rsp
  mov    %rsi,0x18(%rsp)
  mov    %edi,0xc(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0xb8(%rsp)
  xor    %eax,%eax
  call   <get_Clkgen@plt>
  mov    $0x7669,%ecx
  movdqa D75(%rip),%xmm0
  mov    $0xffffffff,%esi
  mov    %al,0x25(%rsp)
  movaps %xmm0,0x50(%rsp)
  movdqa D93(%rip),%xmm0
  mov    %cx,0xb0(%rsp)
  movaps %xmm0,0x60(%rsp)
  movdqa D80(%rip),%xmm0
  movb   $0x0,0xb2(%rsp)
  movaps %xmm0,0x70(%rsp)
  movdqa D198(%rip),%xmm0
  movl   $0xffffffff,0x40(%rsp)
  movaps %xmm0,0x80(%rsp)
  movdqa D136(%rip),%xmm0
  mov    %si,0x44(%rsp)
  movaps %xmm0,0x90(%rsp)
  movdqa D1(%rip),%xmm0
  movaps %xmm0,0xa0(%rsp)
  pcmpeqd %xmm0,%xmm0
  movaps %xmm0,0x30(%rsp)
  cmp    $0x1,%ebx
  jle    L41
  mov    $0xffffff9c,%eax
  mov    $0x1,%edx
  movss  D59(%rip),%xmm2
  movl   $0xffffffff,0x2c(%rsp)
  mov    %ax,0x26(%rsp)
  lea    0x50(%rsp),%rax
  mov    $0x1,%r14d
  mov    %dx,0xa(%rsp)
  mov    %r14d,%ebp
  mov    %rax,0x10(%rsp)
  movss  %xmm2,0x28(%rsp)
  nopl   0x0(%rax)
L411:
  movswq 0xa(%rsp),%rbx
  mov    0x18(%rsp),%r13
  lea    D165(%rip),%rsi
  shl    $0x3,%rbx
  lea    0x0(%r13,%rbx,1),%r12
  lea    0x8(%r13,%rbx,1),%r13
  mov    (%r12),%r14
  mov    %r14,%rdi
  call   <strcmp@plt>
  movzbl 0x25(%rsp),%r15d
  lea    D14(%rip),%rsi
  mov    %r14,%rdi
  test   %eax,%eax
  mov    $0x0,%eax
  cmove  %eax,%r15d
  call   <strcmp@plt>
  test   %eax,%eax
  mov    $0x1,%eax
  cmove  %eax,%r15d
  lea    0x1(%rbp),%eax
  mov    %eax,0x20(%rsp)
  mov    %r15b,0x25(%rsp)
  cmp    0xc(%rsp),%eax
  je     L369
  mov    0x10(%rsp),%r15
  lea    0x30(%rsp),%rbx
  lea    0xb3(%rsp),%rbp
  nop
L146:
  mov    %r15,%rsi
  mov    %r14,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L584
  mov    0x0(%r13),%rdi
  call   <atoi@plt>
  mov    (%r12),%r14
  mov    %ax,(%rbx)
L584:
  add    $0x9,%r15
  add    $0x2,%rbx
  cmp    %rbp,%r15
  jne    L146
L151:
  lea    D76(%rip),%rsi
  mov    %r14,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L380
  mov    0xc(%rsp),%edx
  cmp    %edx,0x20(%rsp)
  je     L258
  mov    0x0(%r13),%rdi
  xor    %eax,%eax
  call   <atoi@plt>
  mov    (%r12),%rbp
  lea    D29(%rip),%rsi
  mov    %eax,0x2c(%rsp)
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L88
  lea    D195(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L347
L300:
  mov    0x0(%r13),%rdi
  xor    %eax,%eax
  call   <atoi@plt>
  mov    %ax,0x26(%rsp)
L347:
  addw   $0x1,0xa(%rsp)
  movswl 0xa(%rsp),%ebp
  cmp    0xc(%rsp),%ebp
  jl     L411
  mov    0x2c(%rsp),%eax
  cmpb   $0x0,0x25(%rsp)
  lea    -0x1(%rax),%ebx
  je     L550
  cmpb   $0x1,0x25(%rsp)
  jne    L190
  movzwl 0x26(%rsp),%eax
  cmp    $0xfffa,%ax
  jl     L345
  cmp    $0xa,%ax
  jle    L155
L190:
  cmp    $0xfffe,%ebx
  jbe    L103
L317:
  movss  0x28(%rsp),%xmm3
  comiss D80(%rip),%xmm3
  jbe    L627
  movss  D148(%rip),%xmm0
  comiss %xmm3,%xmm0
  ja     L582
L627:
  movzwl 0x30(%rsp),%eax
  sub    $0x2,%eax
  cmp    $0x1,%ax
  jbe    L563
L455:
  movzwl 0x32(%rsp),%eax
  sub    $0x1,%eax
  cmp    $0xf,%ax
  jbe    L12
L654:
  movzwl 0x34(%rsp),%eax
  sub    $0x1,%eax
  cmp    $0xf,%ax
  jbe    L242
L617:
  movzwl 0x36(%rsp),%eax
  sub    $0x1,%eax
  cmp    $0xf,%ax
  jbe    L215
L378:
  movzwl 0x38(%rsp),%eax
  sub    $0x1,%eax
  cmp    $0xf,%ax
  jbe    L343
L216:
  movzwl 0x3a(%rsp),%eax
  sub    $0x1,%eax
  cmp    $0xf,%ax
  jbe    L354
L110:
  movzwl 0x3c(%rsp),%eax
  sub    $0x1,%eax
  cmp    $0xe,%ax
  jbe    L189
L86:
  movzwl 0x3e(%rsp),%eax
  sub    $0x1,%eax
  cmp    $0xf,%ax
  jbe    L475
L43:
  movzwl 0x40(%rsp),%eax
  sub    $0x1,%eax
  cmp    $0x7,%ax
  jbe    L251
  movzwl 0x42(%rsp),%eax
  lea    -0x21(%rax),%edx
  cmp    $0x133,%dx
  jbe    L529
L675:
  movzwl 0x44(%rsp),%eax
  sub    $0x1,%eax
  cmp    $0x7,%ax
  jbe    L229
L107:
  mov    0xb8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L253
  add    $0xc8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L380:
  lea    D29(%rip),%rsi
  mov    %r14,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L514
  mov    0xc(%rsp),%edx
  cmp    %edx,0x20(%rsp)
  je     L258
L88:
  mov    0x0(%r13),%rdi
  xor    %eax,%eax
  call   <atof@plt>
  pxor   %xmm1,%xmm1
  mov    (%r12),%rdi
  lea    D195(%rip),%rsi
  cvtsi2ss %eax,%xmm1
  movss  %xmm1,0x28(%rsp)
  call   <strcmp@plt>
  test   %eax,%eax
  je     L300
  jmp    L347
  nopl   0x0(%rax,%rax,1)
L514:
  lea    D195(%rip),%rsi
  mov    %r14,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L347
  mov    0xc(%rsp),%edx
  cmp    %edx,0x20(%rsp)
  jne    L300
L258:
  mov    %r14,%rsi
  lea    D35(%rip),%rdi
L594:
  call   <printf@plt>
  xor    %eax,%eax
  call   <gp2x_deinit@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L550:
  movzwl 0x26(%rsp),%eax
  cmp    $0xffec,%ax
  jl     L70
  cmp    $0x24,%ax
  jg     L190
  movswl %ax,%edi
  xor    %eax,%eax
  call   <set_add_FLCDCLK@plt>
  jmp    L190
L155:
  movswl %ax,%edi
  xor    %eax,%eax
  call   <set_add_ULCDCLK@plt>
  jmp    L190
L229:
  movswl %ax,%edi
  xor    %eax,%eax
  call   <set_920_Div@plt>
  jmp    L107
L251:
  movswl %ax,%edi
  xor    %eax,%eax
  call   <set_DCLK_Div@plt>
  movzwl 0x42(%rsp),%eax
  lea    -0x21(%rax),%edx
  cmp    $0x133,%dx
  ja     L675
L529:
  movswl %ax,%edi
  xor    %eax,%eax
  call   <set_FCLK@plt>
  jmp    L675
L475:
  movswl %ax,%edi
  xor    %eax,%eax
  call   <set_tRCD@plt>
  jmp    L43
L189:
  movswl %ax,%edi
  xor    %eax,%eax
  call   <set_tRP@plt>
  jmp    L86
L354:
  movswl %ax,%edi
  xor    %eax,%eax
  call   <set_tRFC@plt>
  jmp    L110
L343:
  movswl %ax,%edi
  xor    %eax,%eax
  call   <set_tMRD@plt>
  jmp    L216
L215:
  movswl %ax,%edi
  xor    %eax,%eax
  call   <set_tWR@plt>
  jmp    L378
L242:
  movswl %ax,%edi
  xor    %eax,%eax
  call   <set_tRAS@plt>
  jmp    L617
L12:
  movswl %ax,%edi
  xor    %eax,%eax
  call   <set_tRC@plt>
  jmp    L654
L563:
  movswl %ax,%edi
  xor    %eax,%eax
  call   <set_CAS@plt>
  jmp    L455
L582:
  pxor   %xmm0,%xmm0
  mov    $0x1,%eax
  cvtss2sd %xmm3,%xmm0
  call   <set_gamma@plt>
  jmp    L627
L103:
  mov    0x2c(%rsp),%edi
  xor    %eax,%eax
  sub    $0x1,%edi
  call   <set_REFPERD@plt>
  jmp    L317
L41:
  test   %al,%al
  jne    L639
  movss  D59(%rip),%xmm4
  movl   $0xffffffff,0x2c(%rsp)
  mov    $0xfffffffe,%ebx
  movss  %xmm4,0x28(%rsp)
L70:
  xor    %edi,%edi
  xor    %eax,%eax
  call   <get_LCDClk@plt>
  mov    %eax,%edi
  xor    %eax,%eax
  call   <set_add_FLCDCLK@plt>
  jmp    L190
L639:
  cmp    $0x1,%al
  jne    L627
  movss  D59(%rip),%xmm5
  movl   $0xffffffff,0x2c(%rsp)
  mov    $0xfffffffe,%ebx
  movss  %xmm5,0x28(%rsp)
L345:
  mov    $0x1,%edi
  xor    %eax,%eax
  call   <get_LCDClk@plt>
  mov    %eax,%edi
  xor    %eax,%eax
  call   <set_add_ULCDCLK@plt>
  jmp    L190
L253:
  call   <__stack_chk_fail@plt>
  nopl   0x0(%rax)
L369:
  mov    0x10(%rsp),%rsi
  mov    %r14,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L662
  mov    0x10(%rsp),%rbx
L383:
  mov    %rbx,%rsi
  lea    D35(%rip),%rdi
  xor    %eax,%eax
  jmp    L594
L662:
  lea    0x59(%rsp),%rbx
  mov    %r14,%rdi
  mov    %rbx,%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L383
  lea    0x62(%rsp),%rbx
  mov    %r14,%rdi
  mov    %rbx,%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L383
  lea    0x6b(%rsp),%rbx
  mov    %r14,%rdi
  mov    %rbx,%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L383
  lea    0x74(%rsp),%rbx
  mov    %r14,%rdi
  mov    %rbx,%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L383
  lea    0x7d(%rsp),%rbx
  mov    %r14,%rdi
  mov    %rbx,%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L383
  lea    0x86(%rsp),%rbx
  mov    %r14,%rdi
  mov    %rbx,%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L383
  lea    0x8f(%rsp),%rbx
  mov    %r14,%rdi
  mov    %rbx,%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L383
  lea    0x98(%rsp),%rbx
  mov    %r14,%rdi
  mov    %rbx,%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L383
  lea    0xa1(%rsp),%rbx
  mov    %r14,%rdi
  mov    %rbx,%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L383
  lea    0xaa(%rsp),%rbx
  mov    %r14,%rdi
  mov    %rbx,%rsi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L151
  jmp    L383
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D75
data_type: byte[16]
name: extract_symbolic_data
arguments: data_tag: D93
data_type: byte[16]
name: extract_symbolic_data
arguments: data_tag: D80
data_type: f32[4]
name: extract_symbolic_data
arguments: data_tag: D198
data_type: byte[16]
name: extract_symbolic_data
arguments: data_tag: D136
data_type: byte[16]
name: extract_symbolic_data
arguments: data_tag: D1
data_type: byte[16]
name: extract_symbolic_data
arguments: data_tag: D59
data_type: byte[4]
name: extract_symbolic_data
arguments: data_tag: D165
data_type: string
name: extract_symbolic_data
arguments: data_tag: D14
data_type: string
name: extract_symbolic_data
arguments: data_tag: D76
data_type: string
name: extract_symbolic_data
arguments: data_tag: D29
data_type: string
name: extract_symbolic_data
arguments: data_tag: D195
data_type: string
name: extract_symbolic_data
arguments: data_tag: D148
data_type: f32
name: extract_symbolic_data
arguments: data_tag: D35
data_type: string

tool: {"D75": [0x2d,0x2d,0x63,0x61,0x73,0x00,0x00,0x00,0x00,0x2d,0x2d,0x74,0x72,0x63,0x00,0x00]}

tool: {"D93": [0x00,0x00,0x2d,0x2d,0x74,0x72,0x61,0x73,0x00,0x00,0x00,0x2d,0x2d,0x74,0x77,0x72]}

tool: {"D80": [0.0,4.7230597852989115e27,3.6032988711648346e-41,5.488159576163876e31]}

tool: {"D198": [0x72,0x66,0x63,0x00,0x00,0x00,0x2d,0x2d,0x74,0x72,0x70,0x00,0x00,0x00,0x00,0x2d]}

tool: {"D136": [0x2d,0x74,0x72,0x63,0x64,0x00,0x00,0x00,0x2d,0x2d,0x72,0x61,0x6d,0x64,0x69,0x76]}

tool: {"D1": [0x00,0x2d,0x2d,0x63,0x70,0x75,0x63,0x6c,0x6b,0x00,0x2d,0x2d,0x63,0x70,0x75,0x64]}

tool: {"D59": [0x00,0x00,0x80,0xbf]}

tool: D165: --fpll

tool: D14: --upll

tool: D76: --refperd

tool: D29: --gamma

tool: D195: --timing

tool: D148: 15

tool: D35: %s is missing it's parameter


assistant: ```c
void cmdline(int argc, char *argv[]) {
  short i, n;
  short varis = 11;
  char clockgen = get_Clkgen();
  char var[11][9] = {"--cas", "--trc", "--tras", "--twr", "--tmrd", "--trfc", "--trp", "--trcd", "--ramdiv", "--cpuclk", "--cpudiv"};
  short val[varis];
  for (n = 0; n < varis; n++) {
    val[n] = -1;
  }
  short timing = -100;
  int refperd = -1;
  float gamma = -1.;
  for (i = 1; i < argc; i++) {
    if (strcmp(argv[i], "--fpll") == 0)
      clockgen = 0;
    if (strcmp(argv[i], "--upll") == 0)
      clockgen = 1;
    for (n = 0; n < varis; n++) {
      if (strcmp(argv[i], var[n]) == 0) {
        if (i + 1 == argc) {
          printf("%s is missing it's parameter\r\n", var[n]);
          gp2x_deinit();
          exit(1);
        }
        val[n] = atoi(argv[i + 1]);
      }
    }
    if (strcmp(argv[i], "--refperd") == 0) {
      if (i + 1 == argc) {
        printf("%s is missing it's parameter\r\n", argv[i]);
        gp2x_deinit();
        exit(1);
      }
      refperd = atoi(argv[i + 1]);
    }
    if (strcmp(argv[i], "--gamma") == 0) {
      if (i + 1 == argc) {
        printf("%s is missing it's parameter\r\n", argv[i]);
        gp2x_deinit();
        exit(1);
      }
      gamma = atof(argv[i + 1]);
    }
    if (strcmp(argv[i], "--timing") == 0) {
      if (i + 1 == argc) {
        printf("%s is missing it's parameter\r\n", argv[i]);
        gp2x_deinit();
        exit(1);
      }
      timing = atoi(argv[i + 1]);
    }
  }
  if (clockgen == 0) {
    if (timing > -21) {
      if (timing < 37)
        set_add_FLCDCLK(timing);
    } else
      set_add_FLCDCLK(get_LCDClk(clockgen));
  }
  if (clockgen == 1) {
    if (timing > -7) {
      if (timing < 11)
        set_add_ULCDCLK(timing);
    } else
      set_add_ULCDCLK(get_LCDClk(clockgen));
  }
  if (refperd - 1 > -1) {
    if (refperd - 1 < 0xffff)
      set_REFPERD(refperd - 1);
  }
  if (gamma > 0.) {
    if (gamma < 15.)
      set_gamma(gamma);
  }
  if (val[0] - 2 > -1) {
    if (val[0] - 2 < 2)
      set_CAS(val[0] - 2);
  }
  if (val[1] - 1 > -1) {
    if (val[1] - 1 < 16)
      set_tRC(val[1] - 1);
  }
  if (val[2] - 1 > -1) {
    if (val[2] - 1 < 16)
      set_tRAS(val[2] - 1);
  }
  if (val[3] - 1 > -1) {
    if (val[3] - 1 < 16)
      set_tWR(val[3] - 1);
  }
  if (val[4] - 1 > -1) {
    if (val[4] - 1 < 16)
      set_tMRD(val[4] - 1);
  }
  if (val[5] - 1 > -1) {
    if (val[5] - 1 < 16)
      set_tRFC(val[5] - 1);
  }
  if (val[6] - 1 > -1) {
    if (val[6] < 16)
      set_tRP(val[6] - 1);
  }
  if (val[7] - 1 > -1) {
    if (val[7] - 1 < 16)
      set_tRCD(val[7] - 1);
  }
  if (val[8] - 1 > -1) {
    if (val[8] - 1 < 8)
      set_DCLK_Div(val[8] - 1);
  }
  if (val[9] > 32) {
    if (val[9] < 341)
      set_FCLK(val[9]);
  }
  if (val[10] - 1 > -1) {
    if (val[10] - 1 < 8)
      set_920_Div(val[10] - 1);
  }
}
```