user: 提供的汇编代码用C语言表示会是什么样子:

```asm
<icmpare>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r13
  push   %r12
  push   %rbx
  sub    $0x28,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %rdx,-0x38(%rbp)
  mov    -0x38(%rbp),%rax
  movw   $0x0,(%rax)
  mov    -0x28(%rbp),%rbx
  mov    -0x30(%rbp),%r12
  jmp    L171
L357:
  movzbl (%r12),%eax
  cmp    $0x24,%al
  jne    L21
  add    $0x1,%r12
  movzbl (%r12),%eax
  movsbl %al,%eax
  cmp    $0x73,%eax
  je     L61
  cmp    $0x73,%eax
  jg     L142
  cmp    $0x64,%eax
  je     L345
  cmp    $0x64,%eax
  jg     L142
  cmp    $0x43,%eax
  je     L274
  cmp    $0x63,%eax
  jne    L142
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdx
  mov    $0x0,%esi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <chk_cond@plt>
  mov    %eax,%r13d
  test   %r13d,%r13d
  jne    L163
  movzbl (%rbx),%eax
  test   %al,%al
  je     L391
  movzbl (%rbx),%eax
  movsbl %al,%eax
  jmp    L73
L391:
  mov    $0xffffffff,%eax
  jmp    L73
L163:
  movslq %r13d,%rax
  sub    $0x1,%rax
  add    %rax,%rbx
  jmp    L142
L274:
  mov    -0x38(%rbp),%rax
  mov    %rax,%rdx
  mov    $0x1,%esi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <chk_cond@plt>
  mov    %eax,%r13d
  test   %r13d,%r13d
  jne    L41
  movzbl (%rbx),%eax
  test   %al,%al
  je     L387
  movzbl (%rbx),%eax
  movsbl %al,%eax
  jmp    L73
L387:
  mov    $0xffffffff,%eax
  jmp    L73
L41:
  movslq %r13d,%rax
  sub    $0x1,%rax
  add    %rax,%rbx
  jmp    L142
L345:
  movzbl (%rbx),%eax
  cmp    $0x72,%al
  jne    L270
  mov    -0x38(%rbp),%rax
  movzwl (%rax),%edx
  mov    -0x38(%rbp),%rax
  mov    %dx,(%rax)
  jmp    L142
L270:
  movzbl (%rbx),%eax
  cmp    $0x6c,%al
  jne    L162
  mov    -0x38(%rbp),%rax
  movzwl (%rax),%eax
  or     $0x8,%eax
  mov    %eax,%edx
  mov    -0x38(%rbp),%rax
  mov    %dx,(%rax)
  jmp    L142
L162:
  movzbl (%rbx),%eax
  test   %al,%al
  je     L264
  movzbl (%rbx),%eax
  movsbl %al,%eax
  jmp    L73
L264:
  mov    $0xffffffff,%eax
  jmp    L73
L61:
  movzbl (%rbx),%eax
  test   %al,%al
  je     L335
  movzbl (%rbx),%eax
  cmp    $0x2e,%al
  je     L271
  movzbl (%rbx),%eax
  movsbl %al,%eax
  jmp    L73
L271:
  add    $0x1,%rbx
  movzbl (%rbx),%eax
  movsbl %al,%eax
  cmp    $0x77,%eax
  je     L157
  cmp    $0x77,%eax
  jg     L193
  cmp    $0x62,%eax
  je     L164
  cmp    $0x6c,%eax
  je     L183
  jmp    L193
L164:
  mov    -0x38(%rbp),%rax
  movzwl (%rax),%eax
  or     $0x1,%eax
  mov    %eax,%edx
  mov    -0x38(%rbp),%rax
  mov    %dx,(%rax)
  jmp    L349
L157:
  mov    -0x38(%rbp),%rax
  movzwl (%rax),%eax
  or     $0x2,%eax
  mov    %eax,%edx
  mov    -0x38(%rbp),%rax
  mov    %dx,(%rax)
  jmp    L349
L183:
  mov    -0x38(%rbp),%rax
  movzwl (%rax),%eax
  or     $0x4,%eax
  mov    %eax,%edx
  mov    -0x38(%rbp),%rax
  mov    %dx,(%rax)
  jmp    L349
L193:
  mov    $0x2e,%eax
  jmp    L73
L349:
  jmp    L335
L21:
  movzbl (%r12),%edx
  movzbl (%rbx),%eax
  cmp    %al,%dl
  je     L142
  movzbl (%rbx),%eax
  movsbl %al,%eax
  movzbl (%r12),%edx
  movsbl %dl,%edx
  sub    %edx,%eax
  jmp    L73
L335:
  nop
L142:
  movzbl (%rbx),%eax
  test   %al,%al
  je     L134
  add    $0x1,%rbx
L134:
  add    $0x1,%r12
L171:
  movzbl (%r12),%eax
  test   %al,%al
  jne    L357
  movzbl (%rbx),%eax
  movsbl %al,%eax
L73:
  add    $0x28,%rsp
  pop    %rbx
  pop    %r12
  pop    %r13
  pop    %rbp
  ret
```

assistant: ```c
int icmpare(token, mnemon, misc)
char *token;
char *mnemon;
short *misc;
{
  register int i;
  register char *tp, *mp;
  *misc = 0;
  for (tp = token, mp = mnemon; *mp; mp++) {
    if (*mp == '$') {
      switch (*++mp) {
      case 'c':
        i = chk_cond(tp, 0, misc);
        if (i == 0)
          return *tp ? *tp : -1;
        tp += i - 1;
        break;
      case 'C':
        i = chk_cond(tp, 1, misc);
        if (i == 0)
          return *tp ? *tp : -1;
        tp += i - 1;
        break;
      case 'd':
        if (*tp == 'r')
          *misc |= 0x00;
        else if (*tp == 'l')
          *misc |= 0x08;
        else
          return *tp ? *tp : -1;
        break;
      case 's':
        if (*tp) {
          if (*tp != '.')
            return *tp;
          switch (*++tp) {
          case 'b':
            *misc |= 0x01;
            break;
          case 'w':
            *misc |= 0x02;
            break;
          case 'l':
            *misc |= 0x04;
            break;
          default:
            return '.';
          }
        }
        break;
      }
    } else if (*mp != *tp) {
      return *tp - *mp;
    }
    if (*tp)
      tp++;
  }
  return *tp;
}
```