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

```asm
<append_band_ext>:
  endbr64
  push   %r15
  mov    %rdi,%r15
  push   %r14
  mov    %rsi,%r14
  push   %r13
  mov    %rdx,%r13
  push   %r12
  push   %rbp
  call   <findExt@plt>
  mov    %rax,%rbp
  test   %rax,%rax
  je     L94
  lea    D67(%rip),%rsi
  mov    %rax,%rdi
  call   <strcmp_case@plt>
  test   %rax,%rax
  jne    L56
L135:
  mov    %r15,%rdi
  call   <stripExt@plt>
  mov    %rax,%r12
  test   %r13,%r13
  je     L125
L43:
  mov    %r13,%rcx
  mov    %r12,%rdx
  lea    D65(%rip),%rsi
  mov    %r14,%rdi
  xor    %eax,%eax
  call   <sprintf@plt>
L32:
  test   %rbp,%rbp
  je     L3
  mov    %rbp,%rsi
  mov    %r14,%rdi
  call   <strcat@plt>
L3:
  pop    %rbp
  mov    %r12,%rdi
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    10c0 <free@plt>
  nopw   0x0(%rax,%rax,1)
L56:
  lea    D13(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp_case@plt>
  test   %rax,%rax
  je     L135
  lea    D32(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp_case@plt>
  test   %rax,%rax
  je     L135
  lea    D90(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp_case@plt>
  test   %rax,%rax
  je     L135
  lea    D55(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp_case@plt>
  test   %rax,%rax
  je     L135
  lea    D97(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp_case@plt>
  test   %rax,%rax
  je     L135
  lea    D19(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp_case@plt>
  test   %rax,%rax
  je     L135
  lea    D40(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp_case@plt>
  test   %rax,%rax
  je     L135
  lea    D84(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp_case@plt>
  test   %rax,%rax
  je     L135
  lea    D47(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp_case@plt>
  test   %rax,%rax
  je     L135
L94:
  mov    $0xff,%edi
  call   <MALLOC@plt>
  mov    %r15,%rsi
  mov    %rax,%rdi
  mov    %rax,%r12
  call   <strcpy@plt>
  test   %r13,%r13
  jne    L43
L125:
  mov    %r12,%rdx
  lea    D76(%rip),%rsi
  mov    %r14,%rdi
  xor    %eax,%eax
  call   <sprintf@plt>
  jmp    L32
```

tool_calls: name: read_data
arguments: data_label: D67
type_infered: string
name: read_data
arguments: data_label: D65
type_infered: string
name: read_data
arguments: data_label: D13
type_infered: string
name: read_data
arguments: data_label: D32
type_infered: string
name: read_data
arguments: data_label: D90
type_infered: string
name: read_data
arguments: data_label: D55
type_infered: string
name: read_data
arguments: data_label: D97
type_infered: string
name: read_data
arguments: data_label: D19
type_infered: string
name: read_data
arguments: data_label: D40
type_infered: string
name: read_data
arguments: data_label: D84
type_infered: string
name: read_data
arguments: data_label: D47
type_infered: string
name: read_data
arguments: data_label: D76
type_infered: string

tool: D67: .IMG

tool: D65: %s_%s

tool: D13: .TIF

tool: D32: .TIFF

tool: D90: .JPG

tool: D55: .JPEG

tool: D97: .PNG

tool: D19: .PGM

tool: D40: .BIN

tool: D84: .NC

tool: D47: .H5

tool: D76: %s

assistant: ```c
void append_band_ext(char *inFile, char *outFile, char *bandExt) {
  char *ext, *base_name;
  ext = findExt(inFile);
  if (ext && (strcmp_case(ext, ".IMG") == 0 || strcmp_case(ext, ".TIF") == 0 || strcmp_case(ext, ".TIFF") == 0 || strcmp_case(ext, ".JPG") == 0 || strcmp_case(ext, ".JPEG") == 0 || strcmp_case(ext, ".PNG") == 0 || strcmp_case(ext, ".PGM") == 0 || strcmp_case(ext, ".BIN") == 0 || strcmp_case(ext, ".NC") == 0 || strcmp_case(ext, ".H5") == 0))
    base_name = stripExt(inFile);
  else {
    base_name = (char *)MALLOC(sizeof(char) * 255);
    strcpy(base_name, inFile);
  }
  if (bandExt)
    sprintf(outFile, "%s_%s", base_name, bandExt);
  else
    sprintf(outFile, "%s", base_name);
  if (ext)
    strcat(outFile, ext);
  free(base_name);
}
```