user: 下面的汇编指令对应的C源代码是什么:

```asm
<edflib_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    L3
  mov    $0x1,%eax
  jmp    L303
L3:
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2b,%al
  je     L61
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L23
L61:
  addl   $0x1,-0x14(%rbp)
  addl   $0x1,-0x1c(%rbp)
  jmp    L23
L262:
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x65,%al
  je     L386
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x45,%al
  jne    L274
L386:
  cmpl   $0x0,-0x10(%rbp)
  je     L372
  cmpl   $0x0,-0x8(%rbp)
  je     L358
L372:
  mov    $0x1,%eax
  jmp    L303
L358:
  addl   $0x1,-0x8(%rbp)
  movl   $0x0,-0x14(%rbp)
  movl   $0x0,-0x10(%rbp)
  jmp    L375
L274:
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  jne    L224
  cmpl   $0x0,-0x10(%rbp)
  jne    L104
  mov    $0x1,%eax
  jmp    L303
L104:
  addl   $0x1,-0x18(%rbp)
  jmp    L111
L224:
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2f,%al
  jle    L285
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x39,%al
  jle    L208
L285:
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2e,%al
  je     L208
  mov    $0x1,%eax
  jmp    L303
L208:
  cmpl   $0x0,-0x18(%rbp)
  je     L338
  mov    $0x1,%eax
  jmp    L303
L338:
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2e,%al
  jne    L39
  cmpl   $0x0,-0xc(%rbp)
  je     L295
  mov    $0x1,%eax
  jmp    L303
L295:
  addl   $0x1,-0xc(%rbp)
  jmp    L111
L39:
  addl   $0x1,-0x10(%rbp)
L111:
  addl   $0x1,-0x1c(%rbp)
L23:
  mov    -0x1c(%rbp),%eax
  cmp    -0x4(%rbp),%eax
  jl     L262
L375:
  cmpl   $0x0,-0x8(%rbp)
  je     L400
  addl   $0x1,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  cmp    -0x4(%rbp),%eax
  jne    L354
  mov    $0x1,%eax
  jmp    L303
L354:
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2b,%al
  je     L109
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L334
L109:
  addl   $0x1,-0x14(%rbp)
  addl   $0x1,-0x1c(%rbp)
  jmp    L334
L52:
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  jne    L409
  cmpl   $0x0,-0x10(%rbp)
  jne    L6
  mov    $0x1,%eax
  jmp    L303
L6:
  addl   $0x1,-0x18(%rbp)
  jmp    L148
L409:
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2f,%al
  jle    L311
  mov    -0x1c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x39,%al
  jle    L29
L311:
  mov    $0x1,%eax
  jmp    L303
L29:
  cmpl   $0x0,-0x18(%rbp)
  je     L28
  mov    $0x1,%eax
  jmp    L303
L28:
  addl   $0x1,-0x10(%rbp)
L148:
  addl   $0x1,-0x1c(%rbp)
L334:
  mov    -0x1c(%rbp),%eax
  cmp    -0x4(%rbp),%eax
  jl     L52
L400:
  cmpl   $0x0,-0x10(%rbp)
  je     L146
  mov    $0x0,%eax
  jmp    L303
L146:
  mov    $0x1,%eax
L303:
  leave
  ret
```

assistant: ```c
int edflib_is_number(char *str) {
  int i = 0, l, hasspace = 0, hassign = 0, digit = 0, hasdot = 0, hasexp = 0;
  l = strlen(str);
  if (!l)
    return (1);
  if ((str[0] == '+') || (str[0] == '-')) {
    hassign++;
    i++;
  }
  for (; i < l; 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 == l) {
      return (1);
    }
    if ((str[i] == '+') || (str[i] == '-')) {
      hassign++;
      i++;
    }
    for (; i < l; 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);
}
```