user: 请从给定的汇编指令推导出C源代码:

```asm
<mnemonic>:
  endbr64
  sub    $0x8,%rsp
  mov    %rdi,%rax
  sub    $0x30,%esi
  cmp    $0x16,%sil
  ja     L374
  movzbl %sil,%esi
  lea    D100(%rip),%rdi
  movslq (%rdi,%rsi,4),%rsi
  add    %rdi,%rsi
  notrack jmp *%rsi
  movsbl %cl,%ecx
  movsbl %dl,%edx
  lea    D135(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
L130:
  add    $0x8,%rsp
  ret
  movsbl %cl,%ecx
  movsbl %dl,%edx
  lea    D158(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L130
  movsbl %cl,%ecx
  movsbl %dl,%edx
  lea    D192(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L130
  movsbl %cl,%ecx
  movsbl %dl,%edx
  lea    D50(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L130
  movsbl %cl,%ecx
  movsbl %dl,%edx
  lea    D216(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L130
  movsbl %cl,%ecx
  movsbl %dl,%edx
  lea    D117(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L130
  movsbl %cl,%ecx
  movsbl %dl,%edx
  lea    D97(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L130
  movsbl %cl,%ecx
  movsbl %dl,%edx
  lea    D176(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L130
  movsbl %cl,%ecx
  movsbl %dl,%edx
  lea    D19(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L130
  movsbl %cl,%ecx
  movsbl %dl,%edx
  lea    D236(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L130
  movsbl %cl,%ecx
  movsbl %dl,%edx
  lea    D256(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L130
  movsbl %cl,%ecx
  movsbl %dl,%edx
  lea    D145(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L130
  movsbl %cl,%ecx
  movsbl %dl,%edx
  lea    D203(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L130
  movsbl %cl,%ecx
  movsbl %dl,%edx
  lea    D40(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L130
  movsbl %cl,%ecx
  movsbl %dl,%edx
  lea    D109(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L130
  lea    -0x30(%rdx),%esi
  cmp    $0x16,%sil
  ja     L236
  movzbl %sil,%esi
  lea    D265(%rip),%rdi
  movslq (%rdi,%rsi,4),%rsi
  add    %rdi,%rsi
  notrack jmp *%rsi
  sub    $0x30,%ecx
  cmp    $0x16,%cl
  ja     L77
  movzbl %cl,%ecx
  lea    D161(%rip),%rsi
  movslq (%rsi,%rcx,4),%rdx
  add    %rsi,%rdx
  notrack jmp *%rdx
  movl   $0x544c4148,(%rax)
  movb   $0x0,0x4(%rax)
  jmp    L130
  movl   $0x504f4e,(%rax)
  jmp    L130
  lea    D73(%rip),%rsi
  mov    $0x7,%ecx
  mov    %rax,%rdi
  rep movsb %ds:(%rsi),%es:(%rdi)
  jmp    L130
  movl   $0x5a445848,(%rax)
  movb   $0x0,0x4(%rax)
  jmp    L130
  movl   $0x58485a44,(%rax)
  movb   $0x0,0x4(%rax)
  jmp    L130
  movl   $0x444e52,(%rax)
  jmp    L130
  movl   $0x454d4954,(%rax)
  movb   $0x0,0x4(%rax)
  jmp    L130
  movl   $0x544552,(%rax)
  jmp    L130
  movl   $0x41454c43,(%rax)
  movw   $0x52,0x4(%rax)
  jmp    L130
  movl   $0x435453,(%rax)
  jmp    L130
  movl   $0x435352,(%rax)
  jmp    L130
  movl   $0x544c554d,(%rax)
  movb   $0x0,0x4(%rax)
  jmp    L130
  movl   $0x564944,(%rax)
  jmp    L130
  movl   $0x4c525845,(%rax)
  movb   $0x0,0x4(%rax)
  jmp    L130
  movl   $0x4d525845,(%rax)
  movb   $0x0,0x4(%rax)
  jmp    L130
  movl   $0x41525845,(%rax)
  movb   $0x0,0x4(%rax)
  jmp    L130
L77:
  lea    D165(%rip),%rsi
  mov    $0xe,%ecx
  mov    %rax,%rdi
  rep movsb %ds:(%rsi),%es:(%rdi)
  jmp    L130
  movsbl %cl,%ecx
  movsbl %dl,%edx
  lea    D204(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L130
  movsbl %cl,%edx
  lea    D25(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L130
  movsbl %cl,%edx
  lea    D115(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L130
  movsbl %cl,%edx
  lea    D245(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L130
  movsbl %cl,%edx
  lea    D206(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L130
  movsbl %cl,%edx
  lea    D224(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L130
  movsbl %cl,%edx
  lea    D108(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L130
  movsbl %cl,%edx
  lea    D87(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L130
  movsbl %cl,%edx
  lea    D189(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L130
  movsbl %cl,%edx
  lea    D281(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L130
L236:
  movabs $0x4f52524520212121,%rdi
  mov    %rdi,(%rax)
  movl   $0x21212052,0x8(%rax)
  movw   $0x21,0xc(%rax)
  jmp    L130
L374:
  movabs $0x4f52524520212121,%rdi
  mov    %rdi,(%rax)
  movl   $0x21212052,0x8(%rax)
  movw   $0x21,0xc(%rax)
  jmp    L130
```

tool_calls: name: disassemble_data
arguments: label: D135
type: string
name: disassemble_data
arguments: label: D158
type: string
name: disassemble_data
arguments: label: D192
type: string
name: disassemble_data
arguments: label: D50
type: string
name: disassemble_data
arguments: label: D216
type: string
name: disassemble_data
arguments: label: D117
type: string
name: disassemble_data
arguments: label: D97
type: string
name: disassemble_data
arguments: label: D176
type: string
name: disassemble_data
arguments: label: D19
type: string
name: disassemble_data
arguments: label: D236
type: string
name: disassemble_data
arguments: label: D256
type: string
name: disassemble_data
arguments: label: D145
type: string
name: disassemble_data
arguments: label: D203
type: string
name: disassemble_data
arguments: label: D40
type: string
name: disassemble_data
arguments: label: D109
type: string
name: disassemble_data
arguments: label: D73
type: string
name: disassemble_data
arguments: label: D165
type: string
name: disassemble_data
arguments: label: D204
type: string
name: disassemble_data
arguments: label: D25
type: string
name: disassemble_data
arguments: label: D115
type: string
name: disassemble_data
arguments: label: D245
type: string
name: disassemble_data
arguments: label: D206
type: string
name: disassemble_data
arguments: label: D224
type: string
name: disassemble_data
arguments: label: D108
type: string
name: disassemble_data
arguments: label: D87
type: string
name: disassemble_data
arguments: label: D189
type: string
name: disassemble_data
arguments: label: D281
type: string

tool: D135: MOV  %c,%c

tool: D158: MOVI %c,%c

tool: D192: AND  %c,%c

tool: D50: ANDI %c,%c

tool: D216: ADD  %c,%c

tool: D117: ADDI %c,%c

tool: D97: SUB  %c,%c

tool: D176: SUBI %c,%c

tool: D19: CMP  %c,%c

tool: D236: CMPI %c,%c

tool: D256: OR   %c,%c

tool: D145: CALL %c%c

tool: D203: GOTO %c%c

tool: D40: BRC  %c%c

tool: D109: BRZ  %c%c

tool: D73: DISOUT

tool: D165: !!! ERROR !!!

tool: D204: DISP %c,%c

tool: D25: MAS  %c

tool: D115: INV  %c

tool: D245: SHR  %c

tool: D206: SHL  %c

tool: D224: ADC  %c

tool: D108: SUBC %c

tool: D87: DIN  %c

tool: D189: DOT  %c

tool: D281: KIN  %c

assistant: ```c
void mnemonic(char *M, char c1, char c2, char c3) {
  switch (c1) {
  case '0': {
    sprintf(M, "MOV  %c,%c", c2, c3);
    break;
  }
  case '1': {
    sprintf(M, "MOVI %c,%c", c2, c3);
    break;
  }
  case '2': {
    sprintf(M, "AND  %c,%c", c2, c3);
    break;
  }
  case '3': {
    sprintf(M, "ANDI %c,%c", c2, c3);
    break;
  }
  case '4': {
    sprintf(M, "ADD  %c,%c", c2, c3);
    break;
  }
  case '5': {
    sprintf(M, "ADDI %c,%c", c2, c3);
    break;
  }
  case '6': {
    sprintf(M, "SUB  %c,%c", c2, c3);
    break;
  }
  case '7': {
    sprintf(M, "SUBI %c,%c", c2, c3);
    break;
  }
  case '8': {
    sprintf(M, "CMP  %c,%c", c2, c3);
    break;
  }
  case '9': {
    sprintf(M, "CMPI %c,%c", c2, c3);
    break;
  }
  case 'A': {
    sprintf(M, "OR   %c,%c", c2, c3);
    break;
  }
  case 'B': {
    sprintf(M, "CALL %c%c", c2, c3);
    break;
  }
  case 'C': {
    sprintf(M, "GOTO %c%c", c2, c3);
    break;
  }
  case 'D': {
    sprintf(M, "BRC  %c%c", c2, c3);
    break;
  }
  case 'E': {
    sprintf(M, "BRZ  %c%c", c2, c3);
    break;
  }
  case 'F': {
    switch (c2) {
    case '0': {
      switch (c3) {
      case '0': {
        sprintf(M, "HALT");
        break;
      }
      case '1': {
        sprintf(M, "NOP");
        break;
      }
      case '2': {
        sprintf(M, "DISOUT");
        break;
      }
      case '3': {
        sprintf(M, "HXDZ");
        break;
      }
      case '4': {
        sprintf(M, "DZHX");
        break;
      }
      case '5': {
        sprintf(M, "RND");
        break;
      }
      case '6': {
        sprintf(M, "TIME");
        break;
      }
      case '7': {
        sprintf(M, "RET");
        break;
      }
      case '8': {
        sprintf(M, "CLEAR");
        break;
      }
      case '9': {
        sprintf(M, "STC");
        break;
      }
      case 'A': {
        sprintf(M, "RSC");
        break;
      }
      case 'B': {
        sprintf(M, "MULT");
        break;
      }
      case 'C': {
        sprintf(M, "DIV");
        break;
      }
      case 'D': {
        sprintf(M, "EXRL");
        break;
      }
      case 'E': {
        sprintf(M, "EXRM");
        break;
      }
      case 'F': {
        sprintf(M, "EXRA");
        break;
      }
      default: {
        sprintf(M, "!!! ERROR !!!");
      }
      }
      break;
    }
    case '1':
    case '2':
    case '3':
    case '4':
    case '5':
    case '6': {
      sprintf(M, "DISP %c,%c", c2, c3);
      break;
    }
    case '7': {
      sprintf(M, "MAS  %c", c3);
      break;
    }
    case '8': {
      sprintf(M, "INV  %c", c3);
      break;
    }
    case '9': {
      sprintf(M, "SHR  %c", c3);
      break;
    }
    case 'A': {
      sprintf(M, "SHL  %c", c3);
      break;
    }
    case 'B': {
      sprintf(M, "ADC  %c", c3);
      break;
    }
    case 'C': {
      sprintf(M, "SUBC %c", c3);
      break;
    }
    case 'D': {
      sprintf(M, "DIN  %c", c3);
      break;
    }
    case 'E': {
      sprintf(M, "DOT  %c", c3);
      break;
    }
    case 'F': {
      sprintf(M, "KIN  %c", c3);
      break;
    }
    default: {
      sprintf(M, "!!! ERROR !!!");
    }
    }
    break;
  }
  default: {
    sprintf(M, "!!! ERROR !!!");
  }
  }
}
```