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

```asm
<is_number>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x28(%rbp)
  movl   $0x0,-0x1c(%rbp)
  movl   $0x0,-0x18(%rbp)
  movl   $0x0,-0x14(%rbp)
  movl   $0x0,-0x10(%rbp)
  movl   $0x0,-0xc(%rbp)
  movl   $0x0,-0x8(%rbp)
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,-0x4(%rbp)
  cmpl   $0x0,-0x4(%rbp)
  jne    L317
  mov    $0x1,%eax
  jmp    L432
L317:
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2b,%al
  je     L26
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L111
L26:
  addl   $0x1,-0x14(%rbp)
  addl   $0x1,-0x1c(%rbp)
  jmp    L111
L204:
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x65,%al
  je     L147
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x45,%al
  jne    L366
L147:
  cmpl   $0x0,-0x10(%rbp)
  je     L87
  cmpl   $0x0,-0x8(%rbp)
  je     L277
L87:
  mov    $0x1,%eax
  jmp    L432
L277:
  addl   $0x1,-0x8(%rbp)
  movl   $0x0,-0x14(%rbp)
  movl   $0x0,-0x10(%rbp)
  jmp    L224
L366:
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  jne    L313
  cmpl   $0x0,-0x10(%rbp)
  jne    L210
  mov    $0x1,%eax
  jmp    L432
L210:
  addl   $0x1,-0x18(%rbp)
  jmp    L268
L313:
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2f,%al
  jle    L223
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x39,%al
  jle    L235
L223:
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2e,%al
  je     L235
  mov    $0x1,%eax
  jmp    L432
L235:
  cmpl   $0x0,-0x18(%rbp)
  je     L273
  mov    $0x1,%eax
  jmp    L432
L273:
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2e,%al
  jne    L424
  cmpl   $0x0,-0xc(%rbp)
  je     L145
  mov    $0x1,%eax
  jmp    L432
L145:
  addl   $0x1,-0xc(%rbp)
  jmp    L268
L424:
  addl   $0x1,-0x10(%rbp)
L268:
  addl   $0x1,-0x1c(%rbp)
L111:
  mov    -0x1c(%rbp),%eax
  cmp    -0x4(%rbp),%eax
  jl     L204
L224:
  cmpl   $0x0,-0x8(%rbp)
  je     L56
  addl   $0x1,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  cmp    -0x4(%rbp),%eax
  jne    L295
  mov    $0x1,%eax
  jmp    L432
L295:
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2b,%al
  je     L199
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L240
L199:
  addl   $0x1,-0x14(%rbp)
  addl   $0x1,-0x1c(%rbp)
  jmp    L240
L158:
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  jne    L63
  cmpl   $0x0,-0x10(%rbp)
  jne    L188
  mov    $0x1,%eax
  jmp    L432
L188:
  addl   $0x1,-0x18(%rbp)
  jmp    L274
L63:
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2f,%al
  jle    L243
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x39,%al
  jle    L346
L243:
  mov    $0x1,%eax
  jmp    L432
L346:
  cmpl   $0x0,-0x18(%rbp)
  je     L360
  mov    $0x1,%eax
  jmp    L432
L360:
  addl   $0x1,-0x10(%rbp)
L274:
  addl   $0x1,-0x1c(%rbp)
L240:
  mov    -0x1c(%rbp),%eax
  cmp    -0x4(%rbp),%eax
  jl     L158
L56:
  cmpl   $0x0,-0x10(%rbp)
  je     L410
  mov    $0x0,%eax
  jmp    L432
L410:
  mov    $0x1,%eax
L432:
  leave
  ret
```

assistant: ```c
int is_number(char *str) {
  int i = 0, len, hasspace = 0, hassign = 0, digit = 0, hasdot = 0, hasexp = 0;
  len = strlen(str);
  if (!len)
    return 1;
  if ((str[0] == '+') || (str[0] == '-')) {
    hassign++;
    i++;
  }
  for (; i < len; i++) {
    if ((str[i] == 'e') || (str[i] == 'E')) {
      if ((!digit) || hasexp) {
        return 1;
      }
      hasexp++;
      hassign = 0;
      digit = 0;
      break;
    }
    if (str[i] == ' ') {
      if (!digit) {
        return 1;
      }
      hasspace++;
    } else {
      if (((str[i] < 48) || (str[i] > 57)) && str[i] != '.') {
        return 1;
      } else {
        if (hasspace) {
          return 1;
        }
        if (str[i] == '.') {
          if (hasdot)
            return 1;
          hasdot++;
        } else {
          digit++;
        }
      }
    }
  }
  if (hasexp) {
    if (++i == len) {
      return 1;
    }
    if ((str[i] == '+') || (str[i] == '-')) {
      hassign++;
      i++;
    }
    for (; i < len; i++) {
      if (str[i] == ' ') {
        if (!digit) {
          return 1;
        }
        hasspace++;
      } else {
        if ((str[i] < 48) || (str[i] > 57)) {
          return 1;
        } else {
          if (hasspace) {
            return 1;
          }
          digit++;
        }
      }
    }
  }
  if (digit)
    return 0;
  else
    return 1;
}
```