user: Demonstrate the C code that generates the assembly output below:

```asm
<cceph_errno_str>:
  endbr64
  cmp    $0xfffffc18,%edi
  jge    L17
  lea    D115(%rip),%rax
  cmp    $0xfffffc0a,%edi
  jl     L6
  add    $0x3f5,%edi
  lea    D51(%rip),%rax
  cmp    $0xc,%edi
  ja     L6
  lea    D40(%rip),%rdx
  movslq (%rdx,%rdi,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  xchg   %ax,%ax
L17:
  test   %edi,%edi
  lea    D13(%rip),%rdx
  lea    D115(%rip),%rax
  cmove  %rdx,%rax
  ret
  nopl   (%rax)
  lea    D118(%rip),%rax
L6:
  ret
  lea    D149(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D148(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D124(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D11(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D140(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D141(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D145(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D25(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D65(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D78(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D157(%rip),%rax
  ret
  nopl   0x0(%rax,%rax,1)
  lea    D26(%rip),%rax
  ret
```

tool_calls: name: disassemble_data
arguments: label: D115
data_type: string
name: disassemble_data
arguments: label: D51
data_type: string
name: disassemble_data
arguments: label: D13
data_type: string
name: disassemble_data
arguments: label: D118
data_type: string
name: disassemble_data
arguments: label: D149
data_type: string
name: disassemble_data
arguments: label: D148
data_type: string
name: disassemble_data
arguments: label: D124
data_type: string
name: disassemble_data
arguments: label: D11
data_type: string
name: disassemble_data
arguments: label: D140
data_type: string
name: disassemble_data
arguments: label: D141
data_type: string
name: disassemble_data
arguments: label: D145
data_type: string
name: disassemble_data
arguments: label: D25
data_type: string
name: disassemble_data
arguments: label: D65
data_type: string
name: disassemble_data
arguments: label: D78
data_type: string
name: disassemble_data
arguments: label: D157
data_type: string
name: disassemble_data
arguments: label: D26
data_type: string

tool: D115: UnknowError

tool: D51: UnknownOsOp

tool: D13: OK

tool: D118: ConnectionClosed

tool: D149: ConnectionNotFound

tool: D148: WriteConnectionError

tool: D124: NotEnoughServer

tool: D11: UnknownOp

tool: D140: MapNodeNotExist

tool: D141: MapNodeAlreadyExist

tool: D145: ObjectNotExist

tool: D25: ObjectAlreadyExist

tool: D65: CollectionNotExist

tool: D78: CollectionAlreadyExist

tool: D157: NoEnoughMemory

tool: D26: WrongClientID

assistant: ```c
const char *cceph_errno_str(int err_no) {
  switch (err_no) {
  case 0:
    return "OK";
  case (-1001):
    return "ConnectionNotFound";
  case (-1002):
    return "ConnectionClosed";
  case (-1003):
    return "WriteConnectionError";
  case (-1004):
    return "UnknownOp";
  case (-1005):
    return "NotEnoughServer";
  case (-1006):
    return "WrongClientID";
  case (-1007):
    return "NoEnoughMemory";
  case (-1008):
    return "CollectionAlreadyExist";
  case (-1009):
    return "CollectionNotExist";
  case (-1010):
    return "ObjectAlreadyExist";
  case (-1011):
    return "ObjectNotExist";
  case (-1012):
    return "MapNodeAlreadyExist";
  case (-1013):
    return "MapNodeNotExist";
  case (-1014):
    return "UnknownOsOp";
  }
  return "UnknowError";
}
```