user: Translate the below assembly code into C programming language:

```asm
<tisvariable>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2b,%al
  je     L244
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  je     L244
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  sub    $0x30,%eax
  cmp    $0x9,%eax
  jbe    L244
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2e,%al
  je     L244
  mov    $0x1,%eax
  jmp    L160
L244:
  addq   $0x1,-0x8(%rbp)
  jmp    L222
L221:
  addq   $0x1,-0x8(%rbp)
L222:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L184
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  sub    $0x30,%eax
  cmp    $0x9,%eax
  jbe    L221
L184:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L152
  mov    $0x0,%eax
  jmp    L160
L152:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2e,%al
  je     L197
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x65,%al
  je     L197
  mov    $0x1,%eax
  jmp    L160
L197:
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  sub    $0x30,%eax
  cmp    $0x9,%eax
  jbe    L164
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L61
  mov    $0x0,%eax
  jmp    L160
L61:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2e,%al
  je     L228
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x65,%al
  je     L228
  mov    $0x1,%eax
  jmp    L160
L228:
  addq   $0x1,-0x8(%rbp)
L164:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L52
  mov    $0x0,%eax
  jmp    L160
L52:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2b,%al
  je     L111
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  je     L111
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  sub    $0x30,%eax
  cmp    $0x9,%eax
  jbe    L111
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2e,%al
  je     L111
  mov    $0x1,%eax
  jmp    L160
L111:
  addq   $0x1,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L15
  mov    $0x0,%eax
  jmp    L160
L248:
  addq   $0x1,-0x8(%rbp)
L15:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L36
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  sub    $0x30,%eax
  cmp    $0x9,%eax
  jbe    L248
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x2e,%al
  je     L248
L36:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L91
  mov    $0x0,%eax
  jmp    L160
L91:
  mov    $0x1,%eax
L160:
  pop    %rbp
  ret
```

assistant: ```c
int tisvariable(p)
char *p;
{
  if ((*p != '+') && (*p != '-') && !(isdigit((int)*p)) && (*p != '.'))
    return 1;
  p++;
  while ((*p != '\0') && (isdigit((int)*p)))
    p++;
  if (*p == '\0')
    return 0;
  if ((*p != '.') && (*p != 'e'))
    return 1;
  p++;
  if (!(isdigit((int)*p))) {
    if (*p == '\0')
      return 0;
    if ((*p != '.') && (*p != 'e'))
      return 1;
    p++;
  }
  if (*p == '\0')
    return 0;
  if ((*p != '+') && (*p != '-') && !(isdigit((int)*p)) && (*p != '.'))
    return 1;
  p++;
  if (*p == '\0')
    return 0;
  while ((*p != '\0') && ((isdigit((int)*p)) || (*p == '.')))
    p++;
  if (*p == '\0')
    return 0;
  return 1;
}
```