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

```asm
<wpa_supplicant_cipher_txt>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  mov    %rsi,%r12
  mov    %edx,%ebp
  lea    D90(%rip),%rdx
  sub    %edi,%esi
  mov    $0x0,%eax
  call   <snprintf@plt>
  cltq
  add    %rax,%rbx
  test   $0x1,%bpl
  jne    L137
  test   $0x2,%bpl
  jne    L8
  lea    D13(%rip),%rcx
  mov    $0x1,%eax
  test   $0x4,%bpl
  je     L19
L11:
  lea    D183(%rip),%rdx
  mov    %r12d,%esi
  sub    %ebx,%esi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  cltq
  add    %rax,%rbx
  test   $0x8,%bpl
  jne    L10
  test   $0x10,%bpl
  je     L34
  lea    D73(%rip),%rcx
  jmp    L160
L137:
  lea    D13(%rip),%rcx
  lea    D91(%rip),%rdx
  mov    %r12d,%esi
  sub    %ebx,%esi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  cltq
  add    %rax,%rbx
  lea    D73(%rip),%rcx
  test   $0x2,%bpl
  jne    L140
  mov    %ebp,%eax
  and    $0x4,%eax
  jne    L88
L19:
  test   $0x8,%bpl
  je     L155
  test   %eax,%eax
  lea    D13(%rip),%rcx
  lea    D73(%rip),%rax
  cmove  %rax,%rcx
L26:
  lea    D159(%rip),%rdx
  mov    %r12d,%esi
  sub    %ebx,%esi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  cltq
  add    %rax,%rbx
  test   $0x10,%bpl
  je     L34
  lea    D73(%rip),%rcx
  jmp    L160
L8:
  lea    D13(%rip),%rcx
L140:
  lea    D94(%rip),%rdx
  mov    %r12d,%esi
  sub    %ebx,%esi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  cltq
  add    %rax,%rbx
  lea    D73(%rip),%rcx
  test   $0x4,%bpl
  jne    L11
  mov    %ebp,%eax
  and    $0x8,%eax
  jne    L29
L155:
  test   $0x10,%bpl
  je     L34
  test   %eax,%eax
  lea    D13(%rip),%rcx
  lea    D73(%rip),%rax
  cmove  %rax,%rcx
L160:
  lea    D83(%rip),%rdx
  mov    %r12d,%esi
  sub    %ebx,%esi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <snprintf@plt>
  cltq
  add    %rax,%rbx
L34:
  mov    %rbx,%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L88:
  lea    D73(%rip),%rcx
  jmp    L11
L10:
  lea    D73(%rip),%rcx
  jmp    L26
L29:
  lea    D73(%rip),%rcx
  jmp    L26
```

tool_calls: name: unpack_data
arguments: label: D90
type_infered: string
name: unpack_data
arguments: label: D13
type_infered: string
name: unpack_data
arguments: label: D183
type_infered: string
name: unpack_data
arguments: label: D73
type_infered: string
name: unpack_data
arguments: label: D91
type_infered: string
name: unpack_data
arguments: label: D159
type_infered: string
name: unpack_data
arguments: label: D94
type_infered: string
name: unpack_data
arguments: label: D83
type_infered: string

tool: D90: -

tool: 

tool: D183: %sWEP104

tool: D73: +

tool: D91: %sNONE

tool: D159: %sTKIP

tool: D94: %sWEP40

tool: D83: %sCCMP

assistant: ```c
char *wpa_supplicant_cipher_txt(char *pos, char *end, int cipher) {
  int first = 1;
  pos += snprintf(pos, end - pos, "-");
  if (cipher & (1 << (0))) {
    pos += snprintf(pos, end - pos, "%sNONE", first ? "" : "+");
    first = 0;
  }
  if (cipher & (1 << (1))) {
    pos += snprintf(pos, end - pos, "%sWEP40", first ? "" : "+");
    first = 0;
  }
  if (cipher & (1 << (2))) {
    pos += snprintf(pos, end - pos, "%sWEP104", first ? "" : "+");
    first = 0;
  }
  if (cipher & (1 << (3))) {
    pos += snprintf(pos, end - pos, "%sTKIP", first ? "" : "+");
    first = 0;
  }
  if (cipher & (1 << (4))) {
    pos += snprintf(pos, end - pos, "%sCCMP", first ? "" : "+");
    first = 0;
  }
  return pos;
}
```