user: 请将以下的汇编代码转换成C语言代码:

```asm
<ares_strerror>:
  endbr64
  push   %rbx
  lea    D121(%rip),%rcx
  movslq %edi,%rbx
  xor    %edi,%edi
  movq   %rcx,%xmm0
  lea    D36(%rip),%rsi
  lea    D101(%rip),%rdx
  lea    D3(%rip),%rcx
  sub    $0x90,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x88(%rsp)
  lea    D69(%rip),%rax
  cmp    $0xf,%ebx
  setbe  %dil
  movq   %rax,%xmm1
  lea    D111(%rip),%rax
  punpcklqdq %xmm1,%xmm0
  movq   %rax,%xmm2
  lea    D148(%rip),%rax
  movaps %xmm0,(%rsp)
  movq   %rsi,%xmm0
  movq   %rax,%xmm3
  lea    D132(%rip),%rax
  punpcklqdq %xmm2,%xmm0
  movq   %rax,%xmm4
  lea    D7(%rip),%rsi
  movaps %xmm0,0x10(%rsp)
  movq   %rdx,%xmm0
  lea    D41(%rip),%rax
  lea    D68(%rip),%rdx
  punpcklqdq %xmm3,%xmm0
  movq   %rax,%xmm5
  lea    D59(%rip),%rax
  movaps %xmm0,0x20(%rsp)
  movq   %rcx,%xmm0
  movq   %rax,%xmm6
  lea    D126(%rip),%rcx
  punpcklqdq %xmm4,%xmm0
  lea    D73(%rip),%rax
  movaps %xmm0,0x30(%rsp)
  movq   %rsi,%xmm0
  movq   %rax,%xmm7
  lea    D40(%rip),%rsi
  punpcklqdq %xmm5,%xmm0
  lea    D130(%rip),%rax
  movaps %xmm0,0x40(%rsp)
  movq   %rdx,%xmm0
  movq   %rax,%xmm1
  punpcklqdq %xmm6,%xmm0
  movaps %xmm0,0x50(%rsp)
  movq   %rcx,%xmm0
  punpcklqdq %xmm7,%xmm0
  movaps %xmm0,0x60(%rsp)
  movq   %rsi,%xmm0
  punpcklqdq %xmm1,%xmm0
  movaps %xmm0,0x70(%rsp)
  call   <assert@plt>
  mov    (%rsp,%rbx,8),%rax
  mov    0x88(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L7
  add    $0x90,%rsp
  pop    %rbx
  ret
L7:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: label: D121
datatype: string
name: disassemble_data
arguments: label: D36
datatype: string
name: disassemble_data
arguments: label: D101
datatype: string
name: disassemble_data
arguments: label: D3
datatype: string
name: disassemble_data
arguments: label: D69
datatype: string
name: disassemble_data
arguments: label: D111
datatype: string
name: disassemble_data
arguments: label: D148
datatype: string
name: disassemble_data
arguments: label: D132
datatype: string
name: disassemble_data
arguments: label: D7
datatype: string
name: disassemble_data
arguments: label: D41
datatype: string
name: disassemble_data
arguments: label: D68
datatype: string
name: disassemble_data
arguments: label: D59
datatype: string
name: disassemble_data
arguments: label: D126
datatype: string
name: disassemble_data
arguments: label: D73
datatype: string
name: disassemble_data
arguments: label: D40
datatype: string
name: disassemble_data
arguments: label: D130
datatype: string

tool: D121: Successful completion

tool: D36: DNS server claims query was misformatted

tool: D101: Domain name not found

tool: D3: DNS server refused query

tool: D69: DNS server returned answer with no data

tool: D111: DNS server returned general failure

tool: D148: DNS server does not implement requested operation

tool: D132: Misformatted DNS query

tool: D7: Misformatted domain name

tool: D41: Unsupported address family

tool: D68: Misformatted DNS reply

tool: D59: Could not contact DNS servers

tool: D126: Timeout while contacting DNS servers

tool: D73: End of file

tool: D40: Error reading file

tool: D130: Out of memory

assistant: ```c
const char *ares_strerror(int code, char **memptr) {
  const char *errtext[] = {"Successful completion", "DNS server returned answer with no data", "DNS server claims query was misformatted", "DNS server returned general failure", "Domain name not found", "DNS server does not implement requested operation", "DNS server refused query", "Misformatted DNS query", "Misformatted domain name", "Unsupported address family", "Misformatted DNS reply", "Could not contact DNS servers", "Timeout while contacting DNS servers", "End of file", "Error reading file", "Out of memory"};
  assert(code >= 0 && code < (sizeof(errtext) / sizeof(*errtext)));
  return errtext[code];
}
```