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

```asm
<dtn_strerror>:
  endbr64
  cmp    $0x8d,%edi
  jg     L11
  cmp    $0x80,%edi
  jle    L8
  sub    $0x82,%edi
  lea    D57(%rip),%rax
  cmp    $0xb,%edi
  ja     L40
  lea    D5(%rip),%rdx
  movslq (%rdx,%rdi,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  nopl   0x0(%rax,%rax,1)
L8:
  lea    D174(%rip),%rax
  cmp    $0xffffffff,%edi
  je     L40
  test   %edi,%edi
  jne    L11
  lea    D92(%rip),%rax
  ret
  nopl   0x0(%rax)
L40:
  ret
  nopl   0x0(%rax)
  lea    D45(%rip),%rax
  ret
  lea    D172(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D76(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D170(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D84(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D38(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D24(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D89(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D85(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D103(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D48(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D95(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
L11:
  push   %rbx
  lea    D136(%rip),%rbx
  mov    %edi,%ecx
  mov    $0x80,%esi
  mov    %rbx,%rdi
  lea    D6(%rip),%rdx
  call   <snprintf@plt>
  mov    %rbx,%rax
  pop    %rbx
  ret
```

tool_calls: name: parse_data
arguments: label: D57
type: string
name: parse_data
arguments: label: D174
type: string
name: parse_data
arguments: label: D92
type: string
name: parse_data
arguments: label: D45
type: string
name: parse_data
arguments: label: D172
type: string
name: parse_data
arguments: label: D76
type: string
name: parse_data
arguments: label: D170
type: string
name: parse_data
arguments: label: D84
type: string
name: parse_data
arguments: label: D38
type: string
name: parse_data
arguments: label: D24
type: string
name: parse_data
arguments: label: D89
type: string
name: parse_data
arguments: label: D85
type: string
name: parse_data
arguments: label: D103
type: string
name: parse_data
arguments: label: D48
type: string
name: parse_data
arguments: label: D95
type: string
name: parse_data
arguments: label: D6
type: string

tool: D57: invalid argument

tool: D174: (invalid error code -1)

tool: D92: success

tool: D45: error in xdr routines

tool: D172: error in ipc communication

tool: D76: error connecting to server

tool: D170: operation timed out

tool: D84: payload too large

tool: D38: not found

tool: D24: internal error

tool: D89: illegal operation called after dtn_poll

tool: D85: registration already in use

tool: D103: ipc version mismatch

tool: D48: no storage space

tool: D95: unknown ipc message type

tool: D6: (unknown error %d)

assistant: ```c
char *dtn_strerror(int err) {
  switch (err) {
  case 0:
    return "success";
  case (128 + 1):
    return "invalid argument";
  case (128 + 2):
    return "error in xdr routines";
  case (128 + 3):
    return "error in ipc communication";
  case (128 + 4):
    return "error connecting to server";
  case (128 + 5):
    return "operation timed out";
  case (128 + 6):
    return "payload too large";
  case (128 + 7):
    return "not found";
  case (128 + 8):
    return "internal error";
  case (128 + 9):
    return "illegal operation called after dtn_poll";
  case (128 + 10):
    return "registration already in use";
  case (128 + 11):
    return "ipc version mismatch";
  case (128 + 12):
    return "unknown ipc message type";
  case (128 + 13):
    return "no storage space";
  case -1:
    return "(invalid error code -1)";
  }
  static char buf[128];
  snprintf(buf, sizeof(buf), "(unknown error %d)", err);
  return buf;
}
```