user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<heir10>:
  endbr64
  push   %r14
  xor    %eax,%eax
  push   %r13
  lea    D47(%rip),%r13
  push   %r12
  push   %rbp
  mov    %rdi,%rbp
  mov    %r13,%rdi
  push   %rbx
  call   <match@plt>
  test   %eax,%eax
  je     L514
  xor    %eax,%eax
  mov    %rbp,%rdi
  call   <heir10>
  test   %eax,%eax
  je     L194
  mov    0x4(%rbp),%edi
  test   %edi,%edi
  jne    L9
L454:
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <rvalue@plt>
  xor    %eax,%eax
  call   <inc@plt>
  movslq 0x0(%rbp),%rax
  cmpb   $0x3,0x9(%rax)
  jne    L422
  cmpb   $0x2,0xa(%rax)
  je     L54
L422:
  mov    %rbp,%rdi
  xor    %eax,%eax
  xor    %r12d,%r12d
  call   <store@plt>
L380:
  pop    %rbx
  mov    %r12d,%eax
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  nopl   0x0(%rax,%rax,1)
L514:
  lea    D93(%rip),%r14
  xor    %eax,%eax
  mov    %r14,%rdi
  call   <match@plt>
  mov    %eax,%r12d
  test   %eax,%eax
  je     L420
  xor    %eax,%eax
  mov    %rbp,%rdi
  call   <heir10>
  test   %eax,%eax
  jne    L268
L194:
  xor    %eax,%eax
  xor    %r12d,%r12d
  call   <needlval@plt>
L424:
  pop    %rbx
  mov    %r12d,%eax
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L420:
  xor    %eax,%eax
  lea    D24(%rip),%rdi
  call   <match@plt>
  test   %eax,%eax
  jne    L264
  lea    D46(%rip),%rdi
  xor    %eax,%eax
  call   <match@plt>
  mov    %eax,%r12d
  test   %eax,%eax
  jne    L192
  xor    %eax,%eax
  lea    D40(%rip),%rdi
  call   <match@plt>
  test   %eax,%eax
  jne    L134
  lea    D52(%rip),%rdi
  xor    %eax,%eax
  call   <match@plt>
  mov    %eax,%r12d
  test   %eax,%eax
  jne    L548
  lea    D97(%rip),%rdi
  xor    %eax,%eax
  call   <match@plt>
  mov    %rbp,%rdi
  test   %eax,%eax
  mov    $0x0,%eax
  je     L472
  call   <heir10>
  test   %eax,%eax
  je     L471
  mov    0x4(%rbp),%ecx
  test   %ecx,%ecx
  jne    L424
  xor    %eax,%eax
  call   <immed@plt>
  lea    D49(%rip),%rdi
  xor    %eax,%eax
  call   <ot@plt>
  movslq 0x0(%rbp),%rbx
  xor    %eax,%eax
  mov    %rbx,%rdi
  call   <outasm@plt>
  lea    D87(%rip),%rdi
  xor    %eax,%eax
  call   <outasm@plt>
  xor    %eax,%eax
  call   <nl@plt>
  movsbl 0xa(%rbx),%eax
  mov    %eax,0x4(%rbp)
  jmp    L424
  nopl   0x0(%rax,%rax,1)
L268:
  mov    0x4(%rbp),%esi
  test   %esi,%esi
  jne    L418
L477:
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <rvalue@plt>
  xor    %eax,%eax
  call   <dec@plt>
  movslq 0x0(%rbp),%rax
  cmpb   $0x3,0x9(%rax)
  jne    L422
  cmpb   $0x2,0xa(%rax)
  jne    L422
  xor    %eax,%eax
  call   <dec@plt>
  xor    %eax,%eax
  call   <dec@plt>
  xor    %eax,%eax
  call   <dec@plt>
  jmp    L422
  xchg   %ax,%ax
L54:
  xor    %eax,%eax
  xor    %r12d,%r12d
  call   <inc@plt>
  xor    %eax,%eax
  call   <inc@plt>
  xor    %eax,%eax
  call   <inc@plt>
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <store@plt>
  jmp    L380
  nopw   0x0(%rax,%rax,1)
L264:
  xor    %eax,%eax
  mov    %rbp,%rdi
  call   <heir10>
  test   %eax,%eax
  jne    L101
L365:
  xor    %eax,%eax
  call   <neg@plt>
  jmp    L424
  xchg   %ax,%ax
L9:
  xor    %eax,%eax
  call   <zpush@plt>
  jmp    L454
  nopl   0x0(%rax)
L192:
  xor    %eax,%eax
  mov    %rbp,%rdi
  call   <heir10>
  test   %eax,%eax
  jne    L119
L566:
  movslq 0x0(%rbp),%rax
  movl   $0x2,0x4(%rbp)
  test   %eax,%eax
  je     L291
  movsbl 0xa(%rax),%eax
  mov    %eax,0x4(%rbp)
L291:
  movl   $0x0,0x0(%rbp)
  mov    $0x1,%r12d
  jmp    L424
  cs nopw 0x0(%rax,%rax,1)
L418:
  xor    %eax,%eax
  call   <zpush@plt>
  jmp    L477
  nopl   0x0(%rax)
L548:
  xor    %eax,%eax
  mov    %rbp,%rdi
  call   <heir10>
  test   %eax,%eax
  jne    L98
L495:
  xor    %eax,%eax
  xor    %r12d,%r12d
  call   <bnot@plt>
  jmp    L424
  nopl   0x0(%rax)
L119:
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <rvalue@plt>
  jmp    L566
  nopl   0x0(%rax)
L134:
  xor    %eax,%eax
  mov    %rbp,%rdi
  call   <heir10>
  test   %eax,%eax
  jne    L417
L100:
  xor    %eax,%eax
  call   <lnot@plt>
  jmp    L424
  cs nopw 0x0(%rax,%rax,1)
L101:
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <rvalue@plt>
  jmp    L365
  nop
L472:
  call   <heir11@plt>
  mov    %r13,%rdi
  mov    %eax,%ebx
  xor    %eax,%eax
  call   <match@plt>
  test   %eax,%eax
  je     L311
  test   %ebx,%ebx
  je     L194
  mov    0x4(%rbp),%edx
  test   %edx,%edx
  jne    L526
L180:
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <rvalue@plt>
  xor    %eax,%eax
  call   <inc@plt>
  mov    0x0(%rbp),%eax
  test   %eax,%eax
  je     L199
  movslq %eax,%r13
  cmpb   $0x3,0x9(%r13)
  jne    L234
  cmpb   $0x2,0xa(%r13)
  jne    L234
  xor    %eax,%eax
  call   <inc@plt>
  xor    %eax,%eax
  call   <inc@plt>
  xor    %eax,%eax
  call   <inc@plt>
L234:
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <store@plt>
  xor    %eax,%eax
  call   <dec@plt>
  cmpb   $0x3,0x9(%r13)
  jne    L424
  cmpb   $0x2,0xa(%r13)
  jne    L424
  xor    %eax,%eax
  xor    %r12d,%r12d
  call   <dec@plt>
  xor    %eax,%eax
  call   <dec@plt>
  xor    %eax,%eax
  call   <dec@plt>
  jmp    L424
  nopw   0x0(%rax,%rax,1)
L417:
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <rvalue@plt>
  jmp    L100
L98:
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <rvalue@plt>
  jmp    L495
L311:
  xor    %eax,%eax
  mov    %r14,%rdi
  call   <match@plt>
  test   %eax,%eax
  je     L450
  test   %ebx,%ebx
  je     L194
  mov    0x4(%rbp),%eax
  test   %eax,%eax
  jne    L142
L505:
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <rvalue@plt>
  xor    %eax,%eax
  call   <dec@plt>
  mov    0x0(%rbp),%eax
  test   %eax,%eax
  je     L127
  movslq %eax,%rbx
  cmpb   $0x3,0x9(%rbx)
  jne    L6
  cmpb   $0x2,0xa(%rbx)
  jne    L6
  xor    %eax,%eax
  call   <dec@plt>
  xor    %eax,%eax
  call   <dec@plt>
  xor    %eax,%eax
  call   <dec@plt>
L6:
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <store@plt>
  xor    %eax,%eax
  call   <inc@plt>
  cmpb   $0x3,0x9(%rbx)
  jne    L424
  cmpb   $0x2,0xa(%rbx)
  jne    L424
  xor    %eax,%eax
  xor    %r12d,%r12d
  call   <inc@plt>
  xor    %eax,%eax
  call   <inc@plt>
  xor    %eax,%eax
  call   <inc@plt>
  jmp    L424
L199:
  mov    %rbp,%rdi
  xor    %eax,%eax
  xor    %r12d,%r12d
  call   <store@plt>
  xor    %eax,%eax
  call   <dec@plt>
  jmp    L424
L471:
  lea    D85(%rip),%rdi
  call   <error@plt>
  jmp    L424
L526:
  xor    %eax,%eax
  call   <zpush@plt>
  jmp    L180
L450:
  mov    %ebx,%r12d
  jmp    L424
L127:
  mov    %rbp,%rdi
  xor    %eax,%eax
  xor    %r12d,%r12d
  call   <store@plt>
  xor    %eax,%eax
  call   <inc@plt>
  jmp    L424
L142:
  xor    %eax,%eax
  call   <zpush@plt>
  jmp    L505
```

tool_calls: name: disassemble_data
arguments: tag: D47
data_type: string
name: disassemble_data
arguments: tag: D93
data_type: string
name: disassemble_data
arguments: tag: D24
data_type: string
name: disassemble_data
arguments: tag: D46
data_type: string
name: disassemble_data
arguments: tag: D40
data_type: string
name: disassemble_data
arguments: tag: D52
data_type: string
name: disassemble_data
arguments: tag: D97
data_type: string
name: disassemble_data
arguments: tag: D49
data_type: string
name: disassemble_data
arguments: tag: D87
data_type: string
name: disassemble_data
arguments: tag: D85
data_type: string

tool: D47: ++

tool: D93: --

tool: D24: -

tool: D46: *

tool: D40: !

tool: D52: ~

tool: D97: &

tool: D49: $

tool: D87: , %eax

tool: D85: illegal address

assistant: ```c
heir10(lval) int lval[];
{
  int k;
  char *ptr;
  if (match("++")) {
    if ((k = heir10(lval)) == 0) {
      needlval();
      return 0;
    }
    if (lval[1])
      zpush();
    rvalue(lval);
    inc();
    ptr = lval[0];
    if ((ptr[9] == 3) & (ptr[10] == 2)) {
      inc();
      inc();
      inc();
    }
    store(lval);
    return 0;
  } else if (match("--")) {
    if ((k = heir10(lval)) == 0) {
      needlval();
      return 0;
    }
    if (lval[1])
      zpush();
    rvalue(lval);
    dec();
    ptr = lval[0];
    if ((ptr[9] == 3) & (ptr[10] == 2)) {
      dec();
      dec();
      dec();
    }
    store(lval);
    return 0;
  } else if (match("-")) {
    k = heir10(lval);
    if (k)
      rvalue(lval);
    neg();
    return 0;
  } else if (match("*")) {
    k = heir10(lval);
    if (k)
      rvalue(lval);
    lval[1] = 2;
    if (ptr = lval[0])
      lval[1] = ptr[10];
    lval[0] = 0;
    return 1;
  } else if (match("!")) {
    k = heir10(lval);
    if (k)
      rvalue(lval);
    lnot();
    return 0;
  } else if (match("~")) {
    k = heir10(lval);
    if (k)
      rvalue(lval);
    bnot();
    return 0;
  } else if (match("&")) {
    k = heir10(lval);
    if (k == 0) {
      error("illegal address");
      return 0;
    } else if (lval[1])
      return 0;
    else {
      immed();
      ot("$");
      outasm(ptr = lval[0]);
      outasm(", %eax");
      nl();
      lval[1] = ptr[10];
      return 0;
    }
  } else {
    k = heir11(lval);
    if (match("++")) {
      if (k == 0) {
        needlval();
        return 0;
      }
      if (lval[1])
        zpush();
      rvalue(lval);
      inc();
      ptr = lval[0];
      if (ptr)
        if ((ptr[9] == 3) & (ptr[10] == 2)) {
          inc();
          inc();
          inc();
        }
      store(lval);
      dec();
      if (ptr)
        if ((ptr[9] == 3) & (ptr[10] == 2)) {
          dec();
          dec();
          dec();
        }
      return 0;
    } else if (match("--")) {
      if (k == 0) {
        needlval();
        return 0;
      }
      if (lval[1])
        zpush();
      rvalue(lval);
      dec();
      ptr = lval[0];
      if (ptr)
        if ((ptr[9] == 3) & (ptr[10] == 2)) {
          dec();
          dec();
          dec();
        }
      store(lval);
      inc();
      if (ptr)
        if ((ptr[9] == 3) & (ptr[10] == 2)) {
          inc();
          inc();
          inc();
        }
      return 0;
    } else
      return k;
  }
}
```