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

```asm
<intcmp>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  mov    %rdi,%r12
  push   %rbp
  mov    %rsi,%rbp
  push   %rbx
  movsbl (%rdi),%edi
  movzbl (%rsi),%eax
  cmp    $0x2d,%dil
  je     L242
  lea    -0x2b(%rdi),%edx
  mov    $0x1,%r13d
  cmp    $0x2d,%al
  je     L0
  and    $0xfd,%edx
  mov    $0x1,%ebx
  je     L129
L268:
  sub    $0x2b,%eax
  test   $0xfd,%al
  je     L33
L182:
  test   %dil,%dil
  je     L82
  cmpb   $0x0,0x0(%rbp)
  je     L82
  mov    %r12,%r14
  jmp    L44
  nopl   0x0(%rax,%rax,1)
L231:
  movsbl 0x1(%r14),%edi
  add    $0x1,%r14
  test   %dil,%dil
  je     L5
L44:
  call   <isdigit@plt>
  test   %eax,%eax
  jne    L231
L82:
  lea    D2(%rip),%rsi
  mov    $0x2,%edi
  xor    %r13d,%r13d
  call   <enprintf@plt>
L160:
  pop    %rbx
  mov    %r13d,%eax
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  nop
L0:
  and    $0xfd,%edx
  mov    $0xffffffff,%ebx
  je     L129
L33:
  add    $0x1,%rbp
  jmp    L182
  nopl   0x0(%rax,%rax,1)
L242:
  xor    %ebx,%ebx
  cmp    $0x2d,%al
  mov    $0xffffffff,%r13d
  setne  %bl
  lea    -0x1(%rbx,%rbx,1),%ebx
L129:
  movsbl 0x1(%r12),%edi
  add    $0x1,%r12
  jmp    L268
  nopl   0x0(%rax,%rax,1)
L5:
  movsbl 0x0(%rbp),%edi
  test   %dil,%dil
  je     L251
  mov    %rbp,%r14
  jmp    L276
  nopw   0x0(%rax,%rax,1)
L124:
  movsbl 0x1(%r14),%edi
  add    $0x1,%r14
  test   %dil,%dil
  je     L208
L276:
  call   <isdigit@plt>
  test   %eax,%eax
  jne    L124
  jmp    L82
  nopl   0x0(%rax)
L208:
  movzbl (%r12),%eax
  movzbl 0x0(%rbp),%edi
  cmp    $0x30,%al
  jne    L9
  nopl   (%rax)
L221:
  movzbl 0x1(%r12),%eax
  add    $0x1,%r12
  cmp    $0x30,%al
  je     L221
  cmp    $0x30,%dil
  jne    L48
  nopl   0x0(%rax)
L218:
  movzbl 0x1(%rbp),%edi
  add    $0x1,%rbp
L9:
  cmp    $0x30,%dil
  je     L218
L48:
  test   %al,%al
  setne  %al
  movzbl %al,%eax
  imul   %eax,%r13d
  xor    %eax,%eax
  test   %dil,%dil
  setne  %al
  imul   %ebx,%eax
  cmp    %eax,%r13d
  je     L13
  setge  %r13b
  movzbl %r13b,%r13d
  lea    -0x1(%r13,%r13,1),%r13d
  jmp    L160
  nopl   0x0(%rax)
L13:
  mov    %r12,%rdi
  call   <strlen@plt>
  mov    %rbp,%rdi
  mov    %rax,%rbx
  call   <strlen@plt>
  cmp    %rax,%rbx
  je     L175
  mov    %r13d,%edx
  neg    %edx
  cmp    %rax,%rbx
  cmovl  %edx,%r13d
  jmp    L160
L175:
  mov    %rbp,%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  imul   %eax,%r13d
  jmp    L160
L251:
  movzbl (%r12),%eax
  cmp    $0x30,%al
  je     L221
  jmp    L48
```

tool_calls: name: disassemble_data
arguments: data_tag: D2
datatype: string

tool: D2: expected integer operands


assistant: ```c
int intcmp(char *a, char *b) {
  char *s;
  int asign = *a == '-' ? -1 : 1;
  int bsign = *b == '-' ? -1 : 1;
  if (*a == '-' || *a == '+')
    a += 1;
  if (*b == '-' || *b == '+')
    b += 1;
  if (!*a || !*b)
    goto noint;
  for (s = a; *s; s++)
    if (!isdigit(*s))
      goto noint;
  for (s = b; *s; s++)
    if (!isdigit(*s))
      goto noint;
  while (*a == '0')
    a++;
  while (*b == '0')
    b++;
  asign *= !!*a;
  bsign *= !!*b;
  if (asign != bsign)
    return asign < bsign ? -1 : 1;
  else if (strlen(a) != strlen(b))
    return asign * (strlen(a) < strlen(b) ? -1 : 1);
  else
    return asign * strcmp(a, b);
noint:
  enprintf(2, "expected integer operands\n");
  return 0;
}
```