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

```asm
<main>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0xa58,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0xa48(%rsp)
  xor    %eax,%eax
  movabs $0x7325203a52505845,%rax
  movabs $0x544c555345526325,%rdx
  mov    %rax,0x1a0(%rsp)
  mov    %rdx,0x1a8(%rsp)
  movl   $0x6425203a,0x1b0(%rsp)
  movw   $0x6325,0x1b4(%rsp)
  movb   $0x0,0x1b6(%rsp)
  mov    %rax,0x1c0(%rsp)
  mov    %rdx,0x1c8(%rsp)
  movabs $0x25726f727265203a,%rax
  mov    %rax,0x1d0(%rsp)
  movw   $0x63,0x1d8(%rsp)
  movabs $0x3828282b342f3631,%rax
  movabs $0x332b34282a29352d,%rdx
  mov    %rax,0x1e0(%rsp)
  mov    %rdx,0x1e8(%rsp)
  movabs $0x2f30312d29312b29,%rax
  mov    %rax,0x1f0(%rsp)
  movl   $0x23392a32,0x1f8(%rsp)
  movb   $0x0,0x1fc(%rsp)
  lea    0x1e0(%rsp),%rdi
  call   <strlen@plt>
  movzbl 0x1e0(%rsp),%ebp
  cmp    $0x23,%bpl
  je     L99
  mov    $0x0,%r13d
  mov    $0x1,%ebx
  mov    $0x1,%r12d
  lea    D4(%rip),%r15
  jmp    L129
L247:
  movslq %r12d,%r12
  movslq %ebx,%rbx
  jmp    L357
  movslq %r13d,%rax
  movzbl 0x660(%rsp,%rax,1),%ecx
  cmp    $0x28,%cl
  je     L43
  lea    -0x1(%r13),%edx
  movslq %edx,%rdx
  lea    0x1(%rbx),%eax
  cltq
  lea    0x26f(%rsp),%rsi
L97:
  mov    %cl,(%rsi,%rax,1)
  mov    %edx,%r13d
  mov    %eax,%ebx
  movzbl 0x660(%rsp,%rdx,1),%ecx
  sub    $0x1,%rdx
  add    $0x1,%rax
  cmp    $0x28,%cl
  jne    L97
L43:
  sub    $0x1,%r13d
  jmp    L362
  movslq %r13d,%rax
  movzbl 0x660(%rsp,%rax,1),%ecx
  cmp    $0x2a,%cl
  je     L309
  cmp    $0x2f,%cl
  jne    L341
L309:
  lea    -0x1(%r13),%edx
  movslq %edx,%rdx
  lea    0x1(%rbx),%eax
  cltq
  lea    0x26f(%rsp),%rsi
L96:
  mov    %cl,(%rsi,%rax,1)
  mov    %edx,%r13d
  mov    %eax,%ebx
  movzbl 0x660(%rsp,%rdx,1),%ecx
  sub    $0x1,%rdx
  add    $0x1,%rax
  cmp    $0x2a,%cl
  je     L96
  cmp    $0x2f,%cl
  je     L96
L341:
  add    $0x1,%r13d
  movslq %r13d,%rax
  mov    %bpl,0x660(%rsp,%rax,1)
  jmp    L362
  test   %r13d,%r13d
  je     L300
  movslq %r13d,%rax
  movslq %ebx,%rdx
  lea    0x270(%rsp,%rdx,1),%rdx
L321:
  mov    %eax,%r13d
  movzbl 0x660(%rsp,%rax,1),%ecx
  cmp    $0x28,%cl
  je     L300
  mov    %cl,(%rdx)
  add    $0x1,%ebx
  sub    $0x1,%rax
  add    $0x1,%rdx
  mov    %eax,%r13d
  test   %eax,%eax
  jne    L321
L300:
  add    $0x1,%r13d
  movslq %r13d,%rax
  mov    %bpl,0x660(%rsp,%rax,1)
L362:
  movslq %r12d,%rax
  movzbl 0x1e0(%rsp,%rax,1),%ebp
  add    $0x1,%r12d
  cmp    $0x23,%bpl
  je     L220
L129:
  lea    -0x20(%rbp),%eax
  cmp    $0xf,%al
  ja     L247
  movzbl %al,%eax
  movslq (%r15,%rax,4),%rax
  add    %r15,%rax
  notrack jmp *%rax
  add    $0x1,%r13d
  movslq %r13d,%rax
  movb   $0x28,0x660(%rsp,%rax,1)
  jmp    L362
L90:
  mov    %bpl,0x270(%rsp,%rbx,1)
  movzbl 0x1e0(%rsp,%r12,1),%ebp
  add    $0x1,%r12
  add    $0x1,%rbx
L357:
  mov    %r12d,0x4(%rsp)
  movsbl %bpl,%edi
  call   <isdigit@plt>
  cmp    $0x2e,%bpl
  je     L90
  test   %rax,%rax
  jne    L90
  mov    0x4(%rsp),%r12d
  sub    $0x1,%r12d
  movslq %ebx,%rax
  movb   $0x20,0x270(%rsp,%rax,1)
  lea    0x1(%rbx),%ebx
  jmp    L362
L220:
  test   %r13d,%r13d
  je     L138
  movslq %r13d,%rax
  lea    0x660(%rsp,%rax,1),%rdx
  movslq %ebx,%rcx
  lea    0x270(%rsp,%rcx,1),%rax
  lea    0x271(%rsp,%rcx,1),%rsi
  lea    -0x1(%r13),%ecx
  add    %rcx,%rsi
L377:
  movzbl (%rdx),%ecx
  mov    %cl,(%rax)
  sub    $0x1,%rdx
  add    $0x1,%rax
  cmp    %rsi,%rax
  jne    L377
  lea    (%rbx,%r13,1),%ebx
L138:
  movslq %ebx,%rbx
  movb   $0x20,0x270(%rsp,%rbx,1)
  movzbl 0x271(%rsp),%ebx
  cmp    $0x20,%bl
  je     L167
  mov    $0x0,%r13d
  mov    $0x2,%r12d
  lea    0x270(%rsp),%rax
  mov    %rax,0x8(%rsp)
  jmp    L265
L99:
  mov    $0x1,%ebx
  jmp    L138
L5:
  lea    -0x1(%r13),%eax
  movslq %eax,%rdx
  movslq %r13d,%r13
  mov    0x10(%rsp,%r13,4),%ecx
  add    %ecx,0x10(%rsp,%rdx,4)
  mov    %eax,%r13d
  mov    $0x0,%eax
L270:
  movslq %r12d,%rdx
  movzbl 0x270(%rsp,%rdx,1),%ebx
  add    $0x1,%r12d
  cmp    $0x20,%bl
  je     L317
  test   %eax,%eax
  jne    L317
L265:
  cmp    $0x2b,%bl
  je     L5
  cmp    $0x2d,%bl
  je     L2
  cmp    $0x2a,%bl
  je     L223
  cmp    $0x2f,%bl
  jne    L318
  movslq %r13d,%rax
  mov    0x10(%rsp,%rax,4),%ecx
  mov    $0x1,%eax
  test   %ecx,%ecx
  je     L52
  lea    -0x1(%r13),%esi
  movslq %esi,%rsi
  mov    0x10(%rsp,%rsi,4),%eax
  cltd
  idiv   %ecx
  mov    %eax,0x10(%rsp,%rsi,4)
  mov    $0x0,%eax
L52:
  sub    $0x1,%r13d
  jmp    L270
L2:
  lea    -0x1(%r13),%edx
  movslq %edx,%rcx
  movslq %r13d,%r13
  mov    0x10(%rsp,%rcx,4),%eax
  sub    0x10(%rsp,%r13,4),%eax
  mov    %eax,0x10(%rsp,%rcx,4)
  mov    %edx,%r13d
  mov    $0x0,%eax
  jmp    L270
L223:
  lea    -0x1(%r13),%edx
  movslq %edx,%rcx
  movslq %r13d,%r13
  mov    0x10(%rsp,%rcx,4),%eax
  imul   0x10(%rsp,%r13,4),%eax
  mov    %eax,0x10(%rsp,%rcx,4)
  mov    %edx,%r13d
  mov    $0x0,%eax
  jmp    L270
L287:
  mov    %bl,0x200(%rsp,%rbp,1)
  movzbl (%r14,%rbp,1),%ebx
  add    $0x1,%rbp
L92:
  lea    (%r12,%rbp,1),%r15d
  mov    %ebp,0x4(%rsp)
  movsbl %bl,%edi
  call   <isdigit@plt>
  cmp    $0x2e,%bl
  je     L287
  test   %rax,%rax
  jne    L287
  movslq 0x4(%rsp),%rax
  movb   $0x0,0x200(%rsp,%rax,1)
  add    $0x1,%r13d
  lea    0x200(%rsp),%rdi
  call   <atoi@plt>
  mov    %eax,%edx
  movslq %r13d,%rax
  mov    %edx,0x10(%rsp,%rax,4)
  mov    %r15d,%r12d
  mov    $0x0,%eax
  jmp    L270
L318:
  mov    $0x0,%ebp
  movslq %r12d,%r14
  add    0x8(%rsp),%r14
  jmp    L92
L317:
  test   %eax,%eax
  je     L119
  lea    0x1e0(%rsp),%rsi
  lea    0x1c0(%rsp),%rdi
  mov    $0xa,%ecx
  mov    $0xa,%edx
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L10
L167:
  mov    $0x0,%r13d
L119:
  movslq %r13d,%r13
  mov    0x10(%rsp,%r13,4),%ecx
  lea    0x1e0(%rsp),%rsi
  lea    0x1a0(%rsp),%rdi
  mov    $0xa,%r8d
  mov    $0xa,%edx
  mov    $0x0,%eax
  call   <printf@plt>
L10:
  mov    0xa48(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L155
  mov    $0x0,%eax
  add    $0xa58,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L155:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
int main() {
  char TIPS_T[] = "EXPR: %s%cRESULT: %d%c";
  char TIPS_F[] = "EXPR: %s%cRESULT: error%c";
  char expr[] = "16/4+((8-5)*(4+3)+1)-10/2*9#";
  char post[1000];
  char ss[1000];
  char ch;
  int sum;
  int i;
  int t;
  int z;
  int error = 0;
  int top = 0;
  sum = strlen(expr);
  t = 1;
  i = 0;
  ch = expr[i];
  i += 1;
  while (ch != '#') {
    if (ch == '+' || ch == '-') {
      while (top != 0 && ss[top] != '(') {
        post[t] = ss[top];
        top -= 1;
        t += 1;
      }
      top += 1;
      ss[top] = ch;
    } else if (ch == '*' || ch == '/') {
      while (ss[top] == '*' || ss[top] == '/') {
        post[t] = ss[top];
        top -= 1;
        t += 1;
      }
      top += 1;
      ss[top] = ch;
    } else if (ch == '(') {
      top += 1;
      ss[top] = ch;
    } else if (ch == ')') {
      while (ss[top] != '(') {
        post[t] = ss[top];
        top -= 1;
        t += 1;
      }
      top -= 1;
    } else if (ch == ' ') {
      z = 1;
    } else {
      while (isdigit(ch) || ch == '.') {
        post[t] = ch;
        t += 1;
        ch = expr[i];
        i += 1;
      }
      i -= 1;
      post[t] = ' ';
      t += 1;
    }
    ch = expr[i];
    i += 1;
  }
  while (top != 0) {
    post[t] = ss[top];
    t += 1;
    top -= 1;
  }
  post[t] = ' ';
  int newstack[100];
  char newstr[100];
  t = 1;
  top = 0;
  ch = post[t];
  t = t + 1;
  char temp;
  while (ch != ' ' && error == 0) {
    if (ch == '+') {
      newstack[top - 1] = newstack[top - 1] + newstack[top];
      top -= 1;
    } else if (ch == '-') {
      newstack[top - 1] = newstack[top - 1] - newstack[top];
      top -= 1;
    } else if (ch == '*') {
      newstack[top - 1] = newstack[top - 1] * newstack[top];
      top -= 1;
    } else if (ch == '/') {
      if (newstack[top] != 0)
        newstack[top - 1] = newstack[top - 1] / newstack[top];
      else
        error = 1;
      top -= 1;
    } else {
      i = 0;
      while (isdigit(ch) || ch == '.') {
        newstr[i] = ch;
        i += 1;
        ch = post[t];
        t += 1;
      }
      temp = 0;
      newstr[i] = temp;
      top += 1;
      newstack[top] = atoi(newstr);
    }
    ch = post[t];
    t += 1;
  }
  if (error == 0)
    printf(TIPS_T, expr, 10, newstack[top], 10);
  else
    printf(TIPS_F, expr, 10, 10);
  return 0;
}
```