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

```asm
<__strverscmp>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x30(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    -0x8(%rbp),%rax
  jne    L138
  mov    $0x0,%eax
  jmp    L89
L138:
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x10(%rbp)
  movzbl (%rax),%eax
  mov    %al,-0x1a(%rbp)
  mov    -0x8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x8(%rbp)
  movzbl (%rax),%eax
  mov    %al,-0x19(%rbp)
  cmpb   $0x30,-0x1a(%rbp)
  sete   %al
  movzbl %al,%edx
  movzbl -0x1a(%rbp),%eax
  sub    $0x30,%eax
  cmp    $0x9,%eax
  setbe  %al
  movzbl %al,%eax
  add    %edx,%eax
  mov    %eax,-0x18(%rbp)
  jmp    L144
L56:
  mov    -0x18(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  lea    D9(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x10(%rbp)
  movzbl (%rax),%eax
  mov    %al,-0x1a(%rbp)
  mov    -0x8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x8(%rbp)
  movzbl (%rax),%eax
  mov    %al,-0x19(%rbp)
  cmpb   $0x30,-0x1a(%rbp)
  sete   %al
  movzbl %al,%edx
  movzbl -0x1a(%rbp),%eax
  sub    $0x30,%eax
  cmp    $0x9,%eax
  setbe  %al
  movzbl %al,%eax
  add    %edx,%eax
  or     %eax,-0x18(%rbp)
L144:
  movzbl -0x1a(%rbp),%eax
  movzbl -0x19(%rbp),%edx
  sub    %edx,%eax
  mov    %eax,-0x14(%rbp)
  cmpl   $0x0,-0x14(%rbp)
  jne    L70
  cmpb   $0x0,-0x1a(%rbp)
  jne    L56
L70:
  mov    -0x18(%rbp),%eax
  lea    0x0(,%rax,4),%ecx
  cmpb   $0x30,-0x19(%rbp)
  sete   %al
  movzbl %al,%edx
  movzbl -0x19(%rbp),%eax
  sub    $0x30,%eax
  cmp    $0x9,%eax
  setbe  %al
  movzbl %al,%eax
  add    %edx,%eax
  or     %ecx,%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  lea    D10(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  mov    %eax,-0x18(%rbp)
  cmpl   $0x2,-0x18(%rbp)
  je     L67
  cmpl   $0x3,-0x18(%rbp)
  je     L140
  jmp    L135
L67:
  mov    -0x14(%rbp),%eax
  jmp    L89
L45:
  mov    -0x8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x8(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  sub    $0x30,%eax
  cmp    $0x9,%eax
  jbe    L140
  mov    $0x1,%eax
  jmp    L89
L140:
  mov    -0x10(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x10(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  sub    $0x30,%eax
  cmp    $0x9,%eax
  jbe    L45
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  sub    $0x30,%eax
  cmp    $0x9,%eax
  jbe    L76
  mov    -0x14(%rbp),%eax
  jmp    L89
L76:
  mov    $0xffffffff,%eax
  jmp    L89
L135:
  mov    -0x18(%rbp),%eax
L89:
  pop    %rbp
  ret
```

tool_calls: name: read_data
arguments: data_tag: D9
data_type: string
name: read_data
arguments: data_tag: D10
data_type: string

tool: 

tool: D10: 

assistant: ```c
int __strverscmp(s1, s2) const char *s1;
const char *s2;
{
  const unsigned char *p1 = (const unsigned char *)s1;
  const unsigned char *p2 = (const unsigned char *)s2;
  unsigned char c1, c2;
  int state;
  int diff;
  static const unsigned int next_state[] = {0x0, 0x4, 0xC, 0x0, 0x0, 0x4, 0x4, 0x4, 0x0, 0x8, 0x8, 0x8, 0x0, 0x8, 0xC, 0xC};
  static const int result_type[] = {2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -1, -1, 2, +1, 3, 3, 2, +1, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, +1, +1, 2, -1, 2, 2, 2, -1, 2, 2, 2};
  if (p1 == p2)
    return 0;
  c1 = *p1++;
  c2 = *p2++;
  state = 0x0 | ((c1 == '0') + (isdigit(c1) != 0));
  while ((diff = c1 - c2) == 0 && c1 != '\0') {
    state = next_state[state];
    c1 = *p1++;
    c2 = *p2++;
    state |= (c1 == '0') + (isdigit(c1) != 0);
  }
  state = result_type[state << 2 | (((c2 == '0') + (isdigit(c2) != 0)))];
  switch (state) {
  case 2:
    return diff;
  case 3:
    while (isdigit(*p1++))
      if (!isdigit(*p2++))
        return 1;
    return isdigit(*p2) ? -1 : diff;
  default:
    return state;
  }
}
```