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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
L13:
  movb   $0xa,-0x19(%rbp)
  lea    D38(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L49:
  mov    $0x0,%eax
  call   <getchar@plt>
  mov    %al,-0x19(%rbp)
  cmpb   $0xa,-0x19(%rbp)
  je     L49
  cmpb   $0xa,-0x19(%rbp)
  jne    L88
  lea    D66(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
L88:
  cmpb   $0x2b,-0x19(%rbp)
  jne    L76
  lea    D0(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
L76:
  cmpb   $0x2d,-0x19(%rbp)
  jne    L126
  lea    D110(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
L126:
  cmpb   $0x2a,-0x19(%rbp)
  jne    L57
  lea    D21(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
L57:
  cmpb   $0x2f,-0x19(%rbp)
  jne    L160
  lea    D107(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
L160:
  cmpb   $0x2b,-0x19(%rbp)
  je     L108
  cmpb   $0x2d,-0x19(%rbp)
  je     L108
  cmpb   $0x2a,-0x19(%rbp)
  je     L108
  cmpb   $0x2f,-0x19(%rbp)
  jne    L167
L108:
  lea    D52(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x14(%rbp),%rax
  add    $0x4,%rax
  mov    %rax,%rsi
  lea    D154(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  lea    D20(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x14(%rbp),%rax
  add    $0x8,%rax
  mov    %rax,%rsi
  lea    D154(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
L167:
  cmpb   $0x2b,-0x19(%rbp)
  jne    L90
  mov    -0x10(%rbp),%edx
  mov    -0xc(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x18(%rbp)
  mov    -0xc(%rbp),%edx
  mov    -0x10(%rbp),%eax
  mov    -0x18(%rbp),%ecx
  mov    %eax,%esi
  lea    D150(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L112
L90:
  cmpb   $0x2d,-0x19(%rbp)
  jne    L162
  mov    -0x10(%rbp),%eax
  mov    -0xc(%rbp),%edx
  sub    %edx,%eax
  mov    %eax,-0x18(%rbp)
  mov    -0xc(%rbp),%edx
  mov    -0x10(%rbp),%eax
  mov    -0x18(%rbp),%ecx
  mov    %eax,%esi
  lea    D61(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L112
L162:
  cmpb   $0x2a,-0x19(%rbp)
  jne    L132
  mov    -0x10(%rbp),%edx
  mov    -0xc(%rbp),%eax
  imul   %edx,%eax
  mov    %eax,-0x18(%rbp)
  mov    -0xc(%rbp),%edx
  mov    -0x10(%rbp),%eax
  mov    -0x18(%rbp),%ecx
  mov    %eax,%esi
  lea    D94(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L112
L132:
  cmpb   $0x2f,-0x19(%rbp)
  jne    L112
  jmp    L115
L181:
  lea    D6(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    -0x14(%rbp),%rax
  add    $0x8,%rax
  mov    %rax,%rsi
  lea    D154(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
L115:
  mov    -0xc(%rbp),%eax
  test   %eax,%eax
  je     L181
  mov    -0x10(%rbp),%eax
  mov    -0xc(%rbp),%esi
  cltd
  idiv   %esi
  mov    %eax,-0x18(%rbp)
  mov    -0xc(%rbp),%edx
  mov    -0x10(%rbp),%eax
  mov    -0x18(%rbp),%ecx
  mov    %eax,%esi
  lea    D133(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L112:
  cmpb   $0x71,-0x19(%rbp)
  jne    L13
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L53
  call   <__stack_chk_fail@plt>
L53:
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D38
datatype: string
name: parse_data
arguments: data_tag: D66
datatype: string
name: parse_data
arguments: data_tag: D0
datatype: string
name: parse_data
arguments: data_tag: D110
datatype: string
name: parse_data
arguments: data_tag: D21
datatype: string
name: parse_data
arguments: data_tag: D107
datatype: string
name: parse_data
arguments: data_tag: D52
datatype: string
name: parse_data
arguments: data_tag: D154
datatype: string
name: parse_data
arguments: data_tag: D20
datatype: string
name: parse_data
arguments: data_tag: D150
datatype: string
name: parse_data
arguments: data_tag: D61
datatype: string
name: parse_data
arguments: data_tag: D94
datatype: string
name: parse_data
arguments: data_tag: D6
datatype: string
name: parse_data
arguments: data_tag: D133
datatype: string

tool: D38: Add(+), Subtract(-), Multiply(*), Divide(/), or Quit(q):

tool: D66: warning: char c contains a newline

tool: D0: 
you said you would like to add:

tool: D110: 
you said you would like to subtract:

tool: D21: 
you said you would like to multiply:

tool: D107: 
you said you would like to divide:

tool: D52: enter first number:

tool: D154: %9d

tool: D20: enter second number:

tool: D150: %d
+
%d
=
%d



tool: D61: %d
-
%d
=
%d



tool: D94: %d
*
%d
=
%d



tool: D6: Cannot divide by 0. Please enter new number to divide by:

tool: D133: %d
/
%d
=
%d



assistant: ```c
int main(void) {
  int numbers[3];
  char operator;
  int operation;
  do {
    operator= '\n';
    printf("Add(+), Subtract(-), Multiply(*), Divide(/), or Quit(q):");
    do {
      operator= getchar();
    } while (operator== '\n');
    if (operator== '\n')
      printf("warning: char c contains a newline\n");
    if (operator== '+')
      printf("\nyou said you would like to add:\n");
    if (operator== '-')
      printf("\nyou said you would like to subtract:\n");
    if (operator== '*')
      printf("\nyou said you would like to multiply:\n");
    if (operator== '/')
      printf("\nyou said you would like to divide:\n");
    if ((operator== '+') || (operator== '-') || (operator== '*') || (operator== '/')) {
      printf("enter first number:");
      scanf("%9d", &numbers[1]);
      printf("enter second number:");
      scanf("%9d", &numbers[2]);
    }
    if (operator== '+') {
      operation = (numbers[1] + numbers[2]);
      printf("%d\n+\n%d\n=\n%d\n\n", numbers[1], numbers[2], operation);
    } else if (operator== '-') {
      operation = (numbers[1] - numbers[2]);
      printf("%d\n-\n%d\n=\n%d\n\n", numbers[1], numbers[2], operation);
    } else if (operator== '*') {
      operation = (numbers[1] * numbers[2]);
      printf("%d\n*\n%d\n=\n%d\n\n", numbers[1], numbers[2], operation);
    } else if (operator== '/') {
      while (numbers[2] == 0) {
        printf("Cannot divide by 0. Please enter new number to divide by:");
        scanf("%9d", &numbers[2]);
      }
      operation = (numbers[1] / numbers[2]);
      printf("%d\n/\n%d\n=\n%d\n\n", numbers[1], numbers[2], operation);
    }
  } while (operator!= 'q');
  return 0;
}
```