user: 这段汇编代码用C语言表示是什么样的?

```asm
<SgLabelCmp>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x38,%rsp
  mov    %edi,-0x24(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %rdx,-0x38(%rbp)
  mov    -0x30(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x38(%rbp),%rax
  mov    %rax,-0x18(%rbp)
  jmp    L253
L368:
  addq   $0x1,-0x18(%rbp)
L253:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L355
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x5f,%al
  je     L368
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L368
  jmp    L355
L230:
  addq   $0x1,-0x20(%rbp)
L355:
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L497
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x5f,%al
  je     L230
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L230
L497:
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L219
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x3d,%al
  jne    L349
L219:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L346
  mov    $0x0,%eax
  jmp    L101
L349:
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L76
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  je     L9
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <toupper@plt>
  cmp    $0x42,%al
  je     L9
  jmp    L454
L76:
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <toupper@plt>
  mov    %eax,%ebx
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <toupper@plt>
  cmp    %al,%bl
  jne    L357
L9:
  addq   $0x1,-0x20(%rbp)
  addq   $0x1,-0x18(%rbp)
  jmp    L253
L346:
  nop
  jmp    L454
L357:
  nop
L454:
  mov    -0x30(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x38(%rbp),%rax
  mov    %rax,-0x18(%rbp)
  jmp    L521
L16:
  addq   $0x1,-0x18(%rbp)
L521:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L301
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x5f,%al
  je     L16
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L16
  jmp    L301
L258:
  addq   $0x1,-0x20(%rbp)
L301:
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L222
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x5f,%al
  je     L258
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L258
L222:
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L481
  mov    -0x18(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  je     L407
  mov    -0x18(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <toupper@plt>
  cmp    $0x42,%al
  jne    L588
L407:
  mov    -0x20(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <toupper@plt>
  mov    %eax,%ebx
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <toupper@plt>
  cmp    %al,%bl
  jne    L362
  addq   $0x1,-0x20(%rbp)
  addq   $0x1,-0x18(%rbp)
  jmp    L263
L481:
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L468
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x3d,%al
  jne    L260
L468:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L493
  mov    $0x0,%eax
  jmp    L101
L260:
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <toupper@plt>
  mov    %eax,%ebx
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <toupper@plt>
  cmp    %al,%bl
  jne    L63
L263:
  addq   $0x1,-0x20(%rbp)
  addq   $0x1,-0x18(%rbp)
  jmp    L521
L588:
  nop
  jmp    L353
L362:
  nop
  jmp    L353
L493:
  nop
  jmp    L353
L63:
  nop
L353:
  cmpl   $0xc2,-0x24(%rbp)
  jle    L151
  mov    -0x30(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x38(%rbp),%rax
  mov    %rax,-0x18(%rbp)
  jmp    L344
L490:
  addq   $0x1,-0x18(%rbp)
L344:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L483
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x5f,%al
  je     L490
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L490
  jmp    L483
L325:
  addq   $0x1,-0x20(%rbp)
L483:
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L448
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x5f,%al
  je     L325
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L325
L448:
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L568
  mov    -0x20(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  cmp    $0x33,%al
  jne    L568
  addq   $0x1,-0x20(%rbp)
L568:
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L557
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x3d,%al
  jne    L295
L557:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L306
  mov    $0x0,%eax
  jmp    L101
L295:
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <toupper@plt>
  mov    %eax,%ebx
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <toupper@plt>
  cmp    %al,%bl
  jne    L525
  addq   $0x1,-0x20(%rbp)
  addq   $0x1,-0x18(%rbp)
  jmp    L344
L306:
  nop
  jmp    L151
L525:
  nop
L151:
  mov    $0xffffffff,%eax
L101:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

assistant: ```c
int SgLabelCmp(const int SgNumber, const char *SgLabel, const char *WtdLbl) {
  const char *sgl, *wl;
  sgl = SgLabel;
  for (wl = WtdLbl;; wl++) {
    while (*(wl) && (*(wl) == '_' || isspace(*(wl))))
      (wl)++;
    while (*(sgl) && (*(sgl) == '_' || isspace(*(sgl))))
      (sgl)++;
    if (*sgl == '\0' || *sgl == '=') {
      if (*wl == '\0')
        return 0;
      break;
    }
    if (*sgl == '-') {
      if (*wl != '-' && toupper(*wl) != 'B')
        break;
    } else if (toupper(*sgl) != toupper(*wl))
      break;
    sgl++;
  }
  sgl = SgLabel;
  for (wl = WtdLbl;; wl++) {
    while (*(wl) && (*(wl) == '_' || isspace(*(wl))))
      (wl)++;
    while (*(sgl) && (*(sgl) == '_' || isspace(*(sgl))))
      (sgl)++;
    if (*sgl == '-') {
      if (wl[1] != '-' && toupper(wl[1]) != 'B')
        break;
      if (toupper(sgl[1]) != toupper(*wl))
        break;
      sgl++;
      wl++;
    } else {
      if (*sgl == '\0' || *sgl == '=') {
        if (*wl == '\0')
          return 0;
        break;
      }
      if (toupper(*sgl) != toupper(*wl))
        break;
    }
    sgl++;
  }
  if (SgNumber >= 195) {
    sgl = SgLabel;
    for (wl = WtdLbl;; wl++) {
      while (*(wl) && (*(wl) == '_' || isspace(*(wl))))
        (wl)++;
      while (*(sgl) && (*(sgl) == '_' || isspace(*(sgl))))
        (sgl)++;
      if (*sgl == '-' && sgl[1] == '3')
        sgl++;
      if (*sgl == '\0' || *sgl == '=') {
        if (*wl == '\0')
          return 0;
        break;
      }
      if (toupper(*sgl) != toupper(*wl))
        break;
      sgl++;
    }
  }
  return -1;
}
```