user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D30(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D139(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D112(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x10(%rbp),%rax
  mov    %rax,%rsi
  lea    D117(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  mov    -0x10(%rbp),%eax
  cmp    $0x4,%eax
  je     L42
  cmp    $0x4,%eax
  jg     L105
  cmp    $0x3,%eax
  je     L14
  cmp    $0x3,%eax
  jg     L105
  cmp    $0x1,%eax
  je     L95
  cmp    $0x2,%eax
  je     L2
  jmp    L105
L95:
  lea    D90(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x14(%rbp),%rdx
  lea    -0x18(%rbp),%rax
  mov    %rax,%rsi
  lea    D11(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  mov    -0x18(%rbp),%edx
  mov    -0x14(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0xc(%rbp)
  mov    -0xc(%rbp),%eax
  mov    %eax,%esi
  lea    D118(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L37
L2:
  lea    D90(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x14(%rbp),%rdx
  lea    -0x18(%rbp),%rax
  mov    %rax,%rsi
  lea    D11(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  mov    -0x18(%rbp),%eax
  mov    -0x14(%rbp),%edx
  sub    %edx,%eax
  mov    %eax,-0xc(%rbp)
  mov    -0xc(%rbp),%eax
  mov    %eax,%esi
  lea    D57(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L37
L14:
  lea    D90(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x14(%rbp),%rdx
  lea    -0x18(%rbp),%rax
  mov    %rax,%rsi
  lea    D11(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  mov    -0x18(%rbp),%eax
  mov    -0x14(%rbp),%ecx
  cltd
  idiv   %ecx
  mov    %eax,-0xc(%rbp)
  mov    -0xc(%rbp),%eax
  mov    %eax,%esi
  lea    D114(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L37
L42:
  lea    D90(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x14(%rbp),%rdx
  lea    -0x18(%rbp),%rax
  mov    %rax,%rsi
  lea    D11(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  mov    -0x18(%rbp),%edx
  mov    -0x14(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0xc(%rbp)
  mov    -0xc(%rbp),%eax
  mov    %eax,%esi
  lea    D116(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L37
L105:
  lea    D35(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
L37:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L83
  call   <__stack_chk_fail@plt>
L83:
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_label: D30
datatype: string
name: parse_data
arguments: data_label: D139
datatype: string
name: parse_data
arguments: data_label: D112
datatype: string
name: parse_data
arguments: data_label: D117
datatype: string
name: parse_data
arguments: data_label: D90
datatype: string
name: parse_data
arguments: data_label: D11
datatype: string
name: parse_data
arguments: data_label: D118
datatype: string
name: parse_data
arguments: data_label: D57
datatype: string
name: parse_data
arguments: data_label: D114
datatype: string
name: parse_data
arguments: data_label: D116
datatype: string
name: parse_data
arguments: data_label: D35
datatype: string

tool: D30: 

 MENU 


tool: D139:  1.ADDITION
 2.SUBTRACTION
 3.DIVISION
 4.MULTIPLICATION

tool: D112: 

 ENTER YOUR CHOICE 


tool: D117: %d

tool: D90: 

 ENTER TWO NUMBERS 


tool: D11: %d %d

tool: D118: 

 Sum = %d

tool: D57: 

 Difference = %d

tool: D114: 

 Quotient = %d

tool: D116: 

 Value after Multiplication = %d

tool: D35: 

 ---- WRONG CHOICE ---- 


assistant: ```c
void main() {
  int i, j, k, ch;
  printf("\n\n MENU \n\n");
  printf(" 1.ADDITION\n 2.SUBTRACTION\n 3.DIVISION\n 4.MULTIPLICATION\n");
  printf("\n\n ENTER YOUR CHOICE \n\n");
  scanf("%d", &ch);
  switch (ch) {
  case 1:
    printf("\n\n ENTER TWO NUMBERS \n\n");
    scanf("%d %d", &i, &j);
    k = i + j;
    printf("\n\n Sum = %d", k);
    break;
  case 2:
    printf("\n\n ENTER TWO NUMBERS \n\n");
    scanf("%d %d", &i, &j);
    k = i - j;
    printf("\n\n Difference = %d", k);
    break;
  case 3:
    printf("\n\n ENTER TWO NUMBERS \n\n");
    scanf("%d %d", &i, &j);
    k = i / j;
    printf("\n\n Quotient = %d", k);
    break;
  case 4:
    printf("\n\n ENTER TWO NUMBERS \n\n");
    scanf("%d %d", &i, &j);
    k = i * j;
    printf("\n\n Value after Multiplication = %d", k);
    break;
  default:
    printf("\n\n ---- WRONG CHOICE ---- \n\n");
  }
}
```