user: 请将以下的汇编代码转换成C语言代码：

```asm
<cmdline>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0xc8,%rsp
  mov    %edi,%r15d
  mov    %rsi,0x18(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0xb8(%rsp)
  xor    %eax,%eax
  call   <get_Clkgen@plt>
  mov    %al,0x23(%rsp)
  movabs $0x7361632d2d,%rcx
  mov    %rcx,0x50(%rsp)
  movb   $0x0,0x58(%rsp)
  movabs $0x6372742d2d,%rcx
  mov    %rcx,0x59(%rsp)
  movb   $0x0,0x61(%rsp)
  movabs $0x736172742d2d,%rcx
  mov    %rcx,0x62(%rsp)
  movb   $0x0,0x6a(%rsp)
  movabs $0x7277742d2d,%rcx
  mov    %rcx,0x6b(%rsp)
  movb   $0x0,0x73(%rsp)
  movabs $0x64726d742d2d,%rcx
  mov    %rcx,0x74(%rsp)
  movb   $0x0,0x7c(%rsp)
  movabs $0x636672742d2d,%rcx
  mov    %rcx,0x7d(%rsp)
  movb   $0x0,0x85(%rsp)
  movabs $0x7072742d2d,%rcx
  mov    %rcx,0x86(%rsp)
  movb   $0x0,0x8e(%rsp)
  movabs $0x646372742d2d,%rcx
  mov    %rcx,0x8f(%rsp)
  movb   $0x0,0x97(%rsp)
  movabs $0x7669646d61722d2d,%rcx
  mov    %rcx,0x98(%rsp)
  movb   $0x0,0xa0(%rsp)
  movabs $0x6b6c637570632d2d,%rcx
  mov    %rcx,0xa1(%rsp)
  movb   $0x0,0xa9(%rsp)
  movabs $0x7669647570632d2d,%rcx
  mov    %rcx,0xaa(%rsp)
  movb   $0x0,0xb2(%rsp)
  lea    0x30(%rsp),%rdx
  mov    %rdx,0x10(%rsp)
  lea    0x46(%rsp),%rcx
L169:
  movw   $0xffff,(%rdx)
  add    $0x2,%rdx
  cmp    %rcx,%rdx
  jne    L169
  cmp    $0x1,%r15d
  jle    L167
  movss  D76(%rip),%xmm2
  movss  %xmm2,0x28(%rsp)
  movl   $0xffffffff,0x24(%rsp)
  movw   $0xff9c,0x2e(%rsp)
  movw   $0x1,0x20(%rsp)
  movl   $0x1,0xc(%rsp)
  jmp    L141
L362:
  mov    %rbx,%rsi
  lea    D140(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  call   <gp2x_deinit@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L494:
  add    $0x9,%rbx
  add    $0x2,%rbp
  cmp    %r13,%rbx
  je     L270
L290:
  mov    %rbx,(%rsp)
  mov    %rbx,%rsi
  mov    (%r12),%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L494
  cmp    %r15d,0x8(%rsp)
  je     L362
  mov    (%r14),%rdi
  mov    $0x0,%eax
  call   <atoi@plt>
  mov    %ax,0x0(%rbp)
  jmp    L494
L270:
  mov    (%r12),%rbx
  lea    D95(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L305
  mov    0xc(%rsp),%eax
  add    $0x1,%eax
  cmp    %r15d,%eax
  je     L301
  mov    (%r14),%rdi
  mov    $0x0,%eax
  call   <atoi@plt>
  mov    %eax,0x24(%rsp)
  lea    D4(%rip),%rsi
  mov    (%r12),%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L391
  lea    D28(%rip),%rsi
  mov    (%r12),%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L339
  jmp    L278
L301:
  mov    %rbx,%rsi
  lea    D140(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <gp2x_deinit@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L305:
  lea    D4(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L194
  mov    0xc(%rsp),%eax
  add    $0x1,%eax
  cmp    %r15d,%eax
  je     L546
L391:
  mov    (%r14),%rdi
  mov    $0x0,%eax
  call   <atof@plt>
  pxor   %xmm1,%xmm1
  cvtsi2ss %eax,%xmm1
  movss  %xmm1,0x28(%rsp)
  lea    D28(%rip),%rsi
  mov    (%r12),%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L278
L339:
  mov    (%r14),%rdi
  mov    $0x0,%eax
  call   <atoi@plt>
  mov    %ax,0x2e(%rsp)
L278:
  addw   $0x1,0x20(%rsp)
  movzwl 0x20(%rsp),%eax
  cwtl
  mov    %eax,0xc(%rsp)
  cmp    %r15d,%eax
  jge    L559
L141:
  movswq 0x20(%rsp),%rbx
  shl    $0x3,%rbx
  mov    0x18(%rsp),%r13
  lea    0x0(%r13,%rbx,1),%r12
  mov    (%r12),%rbp
  lea    D46(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  mov    $0x0,%eax
  movzbl 0x23(%rsp),%r14d
  cmove  %eax,%r14d
  lea    D65(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  mov    $0x1,%eax
  cmove  %eax,%r14d
  mov    %r14b,0x23(%rsp)
  lea    0x8(%r13,%rbx,1),%r14
  lea    0x50(%rsp),%rbx
  lea    0xb3(%rsp),%r13
  mov    0x10(%rsp),%rbp
  mov    0xc(%rsp),%eax
  add    $0x1,%eax
  mov    %eax,0x8(%rsp)
  jmp    L290
L546:
  mov    %rbx,%rsi
  lea    D140(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <gp2x_deinit@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L194:
  mov    (%r12),%rbx
  lea    D28(%rip),%rsi
  mov    %rbx,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L278
  mov    0xc(%rsp),%eax
  add    $0x1,%eax
  cmp    %r15d,%eax
  jne    L339
  mov    %rbx,%rsi
  lea    D140(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <gp2x_deinit@plt>
  mov    $0x1,%edi
  call   <exit@plt>
L559:
  cmpb   $0x0,0x23(%rsp)
  jne    L166
  movzwl 0x2e(%rsp),%eax
  cmp    $0xffec,%ax
  jl     L555
  cmp    $0x24,%ax
  jle    L361
L274:
  mov    0x24(%rsp),%eax
  sub    $0x1,%eax
  cmp    $0xfffe,%eax
  jbe    L133
L444:
  movss  0x28(%rsp),%xmm3
  comiss D21(%rip),%xmm3
  jbe    L229
  movss  D30(%rip),%xmm0
  comiss %xmm3,%xmm0
  ja     L433
L229:
  movzwl 0x30(%rsp),%eax
  lea    -0x2(%rax),%edx
  cmp    $0x1,%dx
  jbe    L436
L410:
  movzwl 0x32(%rsp),%eax
  lea    -0x1(%rax),%edx
  cmp    $0xf,%dx
  jbe    L209
L67:
  movzwl 0x34(%rsp),%eax
  lea    -0x1(%rax),%edx
  cmp    $0xf,%dx
  jbe    L435
L26:
  movzwl 0x36(%rsp),%eax
  lea    -0x1(%rax),%edx
  cmp    $0xf,%dx
  jbe    L61
L287:
  movzwl 0x38(%rsp),%eax
  lea    -0x1(%rax),%edx
  cmp    $0xf,%dx
  jbe    L485
L174:
  movzwl 0x3a(%rsp),%eax
  lea    -0x1(%rax),%edx
  cmp    $0xf,%dx
  jbe    L289
L473:
  movzwl 0x3c(%rsp),%eax
  lea    -0x1(%rax),%edx
  cmp    $0xe,%dx
  jbe    L66
L479:
  movzwl 0x3e(%rsp),%eax
  lea    -0x1(%rax),%edx
  cmp    $0xf,%dx
  jbe    L373
L272:
  movzwl 0x40(%rsp),%eax
  lea    -0x1(%rax),%edx
  cmp    $0x7,%dx
  jbe    L380
L148:
  movzwl 0x42(%rsp),%eax
  lea    -0x21(%rax),%edx
  cmp    $0x133,%dx
  jbe    L456
L103:
  movzwl 0x44(%rsp),%eax
  lea    -0x1(%rax),%edx
  cmp    $0x7,%dx
  jbe    L518
L32:
  mov    0xb8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L192
  add    $0xc8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L361:
  movswl %ax,%edi
  mov    $0x0,%eax
  call   <set_add_FLCDCLK@plt>
  jmp    L274
L262:
  movss  D76(%rip),%xmm4
  movss  %xmm4,0x28(%rsp)
  movl   $0xffffffff,0x24(%rsp)
L555:
  mov    $0x0,%edi
  mov    $0x0,%eax
  call   <get_LCDClk@plt>
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <set_add_FLCDCLK@plt>
  jmp    L274
L166:
  cmpb   $0x1,0x23(%rsp)
  jne    L274
  movzwl 0x2e(%rsp),%eax
  cmp    $0xfffa,%ax
  jl     L344
  cmp    $0xa,%ax
  jg     L274
  movswl %ax,%edi
  mov    $0x0,%eax
  call   <set_add_ULCDCLK@plt>
  jmp    L274
L133:
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <set_REFPERD@plt>
  jmp    L444
L433:
  pxor   %xmm0,%xmm0
  cvtss2sd %xmm3,%xmm0
  mov    $0x1,%eax
  call   <set_gamma@plt>
  jmp    L229
L436:
  cwtl
  lea    -0x2(%rax),%edi
  mov    $0x0,%eax
  call   <set_CAS@plt>
  jmp    L410
L209:
  cwtl
  lea    -0x1(%rax),%edi
  mov    $0x0,%eax
  call   <set_tRC@plt>
  jmp    L67
L435:
  cwtl
  lea    -0x1(%rax),%edi
  mov    $0x0,%eax
  call   <set_tRAS@plt>
  jmp    L26
L61:
  cwtl
  lea    -0x1(%rax),%edi
  mov    $0x0,%eax
  call   <set_tWR@plt>
  jmp    L287
L485:
  cwtl
  lea    -0x1(%rax),%edi
  mov    $0x0,%eax
  call   <set_tMRD@plt>
  jmp    L174
L289:
  cwtl
  lea    -0x1(%rax),%edi
  mov    $0x0,%eax
  call   <set_tRFC@plt>
  jmp    L473
L66:
  cwtl
  lea    -0x1(%rax),%edi
  mov    $0x0,%eax
  call   <set_tRP@plt>
  jmp    L479
L373:
  cwtl
  lea    -0x1(%rax),%edi
  mov    $0x0,%eax
  call   <set_tRCD@plt>
  jmp    L272
L380:
  cwtl
  lea    -0x1(%rax),%edi
  mov    $0x0,%eax
  call   <set_DCLK_Div@plt>
  jmp    L148
L456:
  movswl %ax,%edi
  mov    $0x0,%eax
  call   <set_FCLK@plt>
  jmp    L103
L518:
  cwtl
  lea    -0x1(%rax),%edi
  mov    $0x0,%eax
  call   <set_920_Div@plt>
  jmp    L32
L167:
  test   %al,%al
  je     L262
  movss  D76(%rip),%xmm5
  movss  %xmm5,0x28(%rsp)
  movl   $0xffffffff,0x24(%rsp)
  cmp    $0x1,%al
  jne    L274
L344:
  mov    $0x1,%edi
  mov    $0x0,%eax
  call   <get_LCDClk@plt>
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <set_add_ULCDCLK@plt>
  jmp    L274
L192:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D76
type_guessed: byte[4]
name: extract_symbolic_data
arguments: data_label: D140
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D95
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D4
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D28
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D46
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D65
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D21
type_guessed: f32
name: extract_symbolic_data
arguments: data_label: D30
type_guessed: f32

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

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


tool: D95: --refperd

tool: D4: --gamma

tool: D28: --timing

tool: D46: --fpll

tool: D65: --upll

tool: D21: 0

tool: D30: 15

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