user: 请从给定的汇编指令推导出C源代码:

```asm
<Iso2Raw_generateCue>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x230,%rsp
  mov    %rdi,-0x228(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x228(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  sub    $0x1,%eax
  mov    %eax,-0x220(%rbp)
  jmp    L103
L100:
  mov    -0x220(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x228(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2f,%al
  je     L28
  mov    -0x220(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x228(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x5c,%al
  je     L28
  mov    -0x220(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x228(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x3a,%al
  je     L28
  subl   $0x1,-0x220(%rbp)
L103:
  cmpl   $0x0,-0x220(%rbp)
  jns    L100
L28:
  addl   $0x1,-0x220(%rbp)
  movl   $0x0,-0x21c(%rbp)
  jmp    L14
L71:
  mov    -0x220(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x228(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x21c(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x21c(%rbp)
  movzbl (%rcx),%edx
  cltq
  mov    %dl,-0x210(%rbp,%rax,1)
  addl   $0x1,-0x220(%rbp)
L14:
  mov    -0x228(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    %eax,-0x220(%rbp)
  jl     L71
  mov    -0x21c(%rbp),%eax
  cltq
  movb   $0x0,-0x210(%rbp,%rax,1)
  movl   $0x0,-0x21c(%rbp)
  movl   $0x0,-0x220(%rbp)
  jmp    L42
L102:
  mov    -0x220(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x228(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2e,%al
  je     L40
  mov    -0x220(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x228(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x21c(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x21c(%rbp)
  movzbl (%rcx),%edx
  cltq
  mov    %dl,-0x110(%rbp,%rax,1)
  addl   $0x1,-0x220(%rbp)
L42:
  mov    -0x228(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    %eax,-0x220(%rbp)
  jl     L102
  jmp    L55
L40:
  nop
L55:
  mov    -0x21c(%rbp),%eax
  cltq
  movb   $0x0,-0x110(%rbp,%rax,1)
  lea    -0x110(%rbp),%rax
  lea    D34(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  lea    -0x110(%rbp),%rax
  lea    D39(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0x218(%rbp)
  lea    -0x210(%rbp),%rdx
  mov    -0x218(%rbp),%rax
  lea    D18(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    -0x218(%rbp),%rax
  mov    %rax,%rcx
  mov    $0x14,%edx
  mov    $0x1,%esi
  lea    D37(%rip),%rax
  mov    %rax,%rdi
  call   <fwrite@plt>
  mov    -0x218(%rbp),%rax
  mov    %rax,%rcx
  mov    $0x16,%edx
  mov    $0x1,%esi
  lea    D8(%rip),%rax
  mov    %rax,%rdi
  call   <fwrite@plt>
  mov    -0x218(%rbp),%rax
  mov    %rax,%rdi
  call   <fclose@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L10
  call   <__stack_chk_fail@plt>
L10:
  leave
  ret
```

tool_calls: name: parse_data
arguments: label: D34
type: string
name: parse_data
arguments: label: D39
type: string
name: parse_data
arguments: label: D18
type: string
name: parse_data
arguments: label: D37
type: string
name: parse_data
arguments: label: D8
type: string

tool: D34: .cue

tool: D39: wb

tool: D18: FILE "%s" BINARY


tool: D37: TRACK 01 MODE2/2352


tool: D8:     INDEX 01 00:00:00


assistant: ```c
void Iso2Raw_generateCue(char *binFileName) {
  int x, y;
  char binBaseName[256];
  char cueFileName[256];
  FILE *cue_file;
  for (x = (strlen(binFileName) - 1); x >= 0; x--) {
    if (binFileName[x] == '/' || binFileName[x] == '\\' || binFileName[x] == ':')
      break;
  }
  x++;
  y = 0;
  for (; x < strlen(binFileName); x++)
    binBaseName[y++] = binFileName[x];
  binBaseName[y] = 0;
  y = 0;
  for (x = 0; x < strlen(binFileName); x++) {
    if (binFileName[x] == '.')
      break;
    else
      cueFileName[y++] = binFileName[x];
  }
  cueFileName[y] = 0;
  strcat(cueFileName, ".cue");
  cue_file = fopen(cueFileName, "wb");
  fprintf(cue_file, "FILE \"%s\" BINARY\n", binBaseName);
  fprintf(cue_file, "TRACK 01 MODE2/2352\n");
  fprintf(cue_file, "    INDEX 01 00:00:00\n");
  fclose(cue_file);
}
```