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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  lea    D84(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L58
L46:
  movsbl -0x1(%rbp),%eax
  sub    $0x41,%eax
  cmp    $0x38,%eax
  ja     L49
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D66(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D66(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D34(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L58
  lea    D36(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L58
  lea    D100(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L58
  lea    D98(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L58
  lea    D119(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L58
  lea    D118(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L58
  lea    D80(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L58
  lea    D87(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L58
L49:
  movsbl -0x1(%rbp),%eax
  mov    %eax,%edi
  call   <putchar@plt>
L58:
  mov    $0x0,%eax
  call   <getchar@plt>
  mov    %al,-0x1(%rbp)
  cmpb   $0xa,-0x1(%rbp)
  jne    L46
  lea    D75(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D84
datatype: string
name: disassemble_data
arguments: data_tag: D34
datatype: string
name: disassemble_data
arguments: data_tag: D36
datatype: string
name: disassemble_data
arguments: data_tag: D100
datatype: string
name: disassemble_data
arguments: data_tag: D98
datatype: string
name: disassemble_data
arguments: data_tag: D119
datatype: string
name: disassemble_data
arguments: data_tag: D118
datatype: string
name: disassemble_data
arguments: data_tag: D80
datatype: string
name: disassemble_data
arguments: data_tag: D87
datatype: string
name: disassemble_data
arguments: data_tag: D75
datatype: string

tool: D84: Enter phone number: 

tool: D34: 2

tool: D36: 3

tool: D100: 4

tool: D98: 5

tool: D119: 6

tool: D118: 7

tool: D80: 8

tool: D87: 9

tool: D75: 


assistant: ```c
int main(void) {
  char ch;
  printf("Enter phone number: ");
  while ((ch = getchar()) != '\n') {
    switch (ch) {
    case 'A':
    case 'a':
    case 'B':
    case 'b':
    case 'C':
    case 'c':
      printf("2");
      break;
    case 'D':
    case 'd':
    case 'E':
    case 'e':
    case 'F':
    case 'f':
      printf("3");
      break;
    case 'G':
    case 'g':
    case 'H':
    case 'h':
    case 'I':
    case 'i':
      printf("4");
      break;
    case 'J':
    case 'j':
    case 'K':
    case 'k':
    case 'L':
    case 'l':
      printf("5");
      break;
    case 'M':
    case 'm':
    case 'N':
    case 'n':
    case 'O':
    case 'o':
      printf("6");
      break;
    case 'P':
    case 'p':
    case 'R':
    case 'r':
    case 'S':
    case 's':
      printf("7");
      break;
    case 'T':
    case 't':
    case 'U':
    case 'u':
    case 'V':
    case 'v':
      printf("8");
      break;
    case 'W':
    case 'w':
    case 'X':
    case 'x':
    case 'Y':
    case 'y':
      printf("9");
      break;
    default:
      putchar(ch);
    }
  }
  printf("\n");
  return 0;
}
```