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

```asm
<mapExtendedMPAARating>:
  endbr64
  push   %r12
  mov    %rsi,%r12
  push   %rbp
  push   %rbx
  mov    %edi,%ebx
  mov    $0x28,%edi
  call   <malloc@plt>
  lea    D60(%rip),%rsi
  mov    %rax,%rdi
  mov    %rax,%rbp
  call   <strcpy@plt>
  test   $0x400000,%ebx
  jne    L40
  test   $0x800000,%ebx
  jne    L31
L45:
  test   $0x1000000,%ebx
  jne    L143
L152:
  test   $0x2000000,%ebx
  jne    L14
L23:
  test   $0x4000000,%ebx
  jne    L135
L167:
  test   $0x8000000,%ebx
  jne    L141
L106:
  test   $0x10000000,%ebx
  jne    L137
L54:
  test   $0x20000000,%ebx
  jne    L99
L94:
  test   $0x40000000,%ebx
  jne    L50
L92:
  test   %ebx,%ebx
  js     L179
L57:
  mov    %rbp,(%r12)
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  xchg   %ax,%ax
L40:
  lea    D10(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  test   $0x800000,%ebx
  je     L45
L31:
  lea    D40(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  test   $0x1000000,%ebx
  je     L152
L143:
  lea    D82(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  test   $0x2000000,%ebx
  je     L23
L14:
  lea    D18(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  test   $0x4000000,%ebx
  je     L167
L135:
  lea    D43(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  test   $0x8000000,%ebx
  je     L106
L141:
  lea    D39(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  test   $0x10000000,%ebx
  je     L54
L137:
  lea    D87(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  test   $0x20000000,%ebx
  je     L94
L99:
  lea    D94(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  test   $0x40000000,%ebx
  je     L92
L50:
  lea    D5(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcat@plt>
  test   %ebx,%ebx
  jns    L57
L179:
  mov    %rbp,%rdi
  lea    D15(%rip),%rsi
  call   <strcat@plt>
  mov    %rbp,(%r12)
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
```

tool_calls: name: retrieve_data
arguments: label: D60
datatype: string
name: retrieve_data
arguments: label: D10
datatype: string
name: retrieve_data
arguments: label: D40
datatype: string
name: retrieve_data
arguments: label: D82
datatype: string
name: retrieve_data
arguments: label: D18
datatype: string
name: retrieve_data
arguments: label: D43
datatype: string
name: retrieve_data
arguments: label: D39
datatype: string
name: retrieve_data
arguments: label: D87
datatype: string
name: retrieve_data
arguments: label: D94
datatype: string
name: retrieve_data
arguments: label: D5
datatype: string
name: retrieve_data
arguments: label: D15
datatype: string

tool: 

tool: D10: AC 

tool: D40: BN 

tool: D82: GL 

tool: D18: GV 

tool: D43: AL 

tool: D39: MV 

tool: D87: N 

tool: D94: RP 

tool: D5: SC 

tool: D15: V 

assistant: ```c
void mapExtendedMPAARating(int mpaarating, char **ratingStr) {
  char *szRating = malloc((40));
  strcpy(szRating, "");
  if (mpaarating & 0x00400000) {
    strcat(szRating, "AC ");
  }
  if (mpaarating & 0x00800000) {
    strcat(szRating, "BN ");
  }
  if (mpaarating & 0x01000000) {
    strcat(szRating, "GL ");
  }
  if (mpaarating & 0x02000000) {
    strcat(szRating, "GV ");
  }
  if (mpaarating & 0x04000000) {
    strcat(szRating, "AL ");
  }
  if (mpaarating & 0x08000000) {
    strcat(szRating, "MV ");
  }
  if (mpaarating & 0x10000000) {
    strcat(szRating, "N ");
  }
  if (mpaarating & 0x20000000) {
    strcat(szRating, "RP ");
  }
  if (mpaarating & 0x40000000) {
    strcat(szRating, "SC ");
  }
  if (mpaarating & 0x80000000) {
    strcat(szRating, "V ");
  }
  *ratingStr = szRating;
}
```