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

```asm
<ana_asm>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movb   $0x0,-0x9(%rbp)
  mov    -0x18(%rbp),%rax
  lea    D10(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L11
  movb   $0xa0,-0x9(%rbp)
  jmp    L111
L11:
  mov    -0x18(%rbp),%rax
  lea    D75(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L4
  movb   $0xa1,-0x9(%rbp)
  jmp    L111
L4:
  mov    -0x18(%rbp),%rax
  lea    D62(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L46
  movb   $0xa2,-0x9(%rbp)
  jmp    L111
L46:
  mov    -0x18(%rbp),%rax
  lea    D61(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L80
  movb   $0xa3,-0x9(%rbp)
  jmp    L111
L80:
  mov    -0x18(%rbp),%rax
  lea    D34(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L100
  movb   $0xa4,-0x9(%rbp)
  jmp    L111
L100:
  mov    -0x18(%rbp),%rax
  lea    D24(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L123
  movb   $0xa5,-0x9(%rbp)
  jmp    L111
L123:
  mov    -0x18(%rbp),%rax
  lea    D16(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L59
  movb   $0xa6,-0x9(%rbp)
  jmp    L111
L59:
  mov    -0x18(%rbp),%rax
  lea    D60(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L111
  movb   $0xa7,-0x9(%rbp)
L111:
  mov    -0x20(%rbp),%rdx
  lea    -0x9(%rbp),%rax
  mov    %rdx,%rcx
  mov    $0x1,%edx
  mov    $0x1,%esi
  mov    %rax,%rdi
  call   <fwrite@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L131
  call   <__stack_chk_fail@plt>
L131:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D10
datatype: string
name: disassemble_data
arguments: data_label: D75
datatype: string
name: disassemble_data
arguments: data_label: D62
datatype: string
name: disassemble_data
arguments: data_label: D61
datatype: string
name: disassemble_data
arguments: data_label: D34
datatype: string
name: disassemble_data
arguments: data_label: D24
datatype: string
name: disassemble_data
arguments: data_label: D16
datatype: string
name: disassemble_data
arguments: data_label: D60
datatype: string

tool: D10: b

tool: D75: c

tool: D62: d

tool: D61: e

tool: D34: h

tool: D24: l

tool: D16: m

tool: D60: a

assistant: ```c
void ana_asm(char *reg, FILE *file) {
  unsigned char buffer[] = {0};
  if (strcmp(reg, "b") == 0)
    buffer[0] = 0xa0;
  else if (strcmp(reg, "c") == 0)
    buffer[0] = 0xa1;
  else if (strcmp(reg, "d") == 0)
    buffer[0] = 0xa2;
  else if (strcmp(reg, "e") == 0)
    buffer[0] = 0xa3;
  else if (strcmp(reg, "h") == 0)
    buffer[0] = 0xa4;
  else if (strcmp(reg, "l") == 0)
    buffer[0] = 0xa5;
  else if (strcmp(reg, "m") == 0)
    buffer[0] = 0xa6;
  else if (strcmp(reg, "a") == 0)
    buffer[0] = 0xa7;
  fwrite(buffer, sizeof(buffer), 1, file);
}
```