user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<ParseProfLine>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xc0,%rsp
  mov    %rdi,-0xa8(%rbp)
  mov    %rsi,-0xb0(%rbp)
  mov    %rdx,-0xb8(%rbp)
  mov    %rcx,-0xc0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  jmp    L224
L36:
  addq   $0x1,-0xa8(%rbp)
L224:
  mov    -0xa8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isSpace@plt>
  test   %rax,%rax
  jne    L36
  mov    -0xa8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isHex@plt>
  test   %rax,%rax
  jne    L327
  mov    $0x0,%eax
  jmp    L38
L327:
  lea    -0x90(%rbp),%rax
  mov    %rax,-0x98(%rbp)
  jmp    L197
L123:
  mov    -0xa8(%rbp),%rdx
  lea    0x1(%rdx),%rax
  mov    %rax,-0xa8(%rbp)
  mov    -0x98(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,-0x98(%rbp)
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
L197:
  mov    -0xa8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isHex@plt>
  test   %rax,%rax
  jne    L123
  mov    -0x98(%rbp),%rax
  movb   $0x0,(%rax)
  mov    -0xa8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isSpace@plt>
  test   %rax,%rax
  jne    L78
  mov    $0x0,%eax
  jmp    L38
L78:
  lea    -0x90(%rbp),%rax
  mov    $0x10,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <strtol@plt>
  mov    -0xb0(%rbp),%rdx
  mov    %rax,(%rdx)
  jmp    L333
L229:
  addq   $0x1,-0xa8(%rbp)
L333:
  mov    -0xa8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isSpace@plt>
  test   %rax,%rax
  jne    L229
  mov    -0xa8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isNum@plt>
  test   %rax,%rax
  jne    L304
  mov    $0x0,%eax
  jmp    L38
L304:
  lea    -0x90(%rbp),%rax
  mov    %rax,-0x98(%rbp)
  jmp    L267
L158:
  mov    -0xa8(%rbp),%rdx
  lea    0x1(%rdx),%rax
  mov    %rax,-0xa8(%rbp)
  mov    -0x98(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,-0x98(%rbp)
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
L267:
  mov    -0xa8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isNum@plt>
  test   %rax,%rax
  jne    L158
  mov    -0x98(%rbp),%rax
  movb   $0x0,(%rax)
  mov    -0xa8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isSpace@plt>
  test   %rax,%rax
  jne    L24
  mov    $0x0,%eax
  jmp    L38
L24:
  lea    -0x90(%rbp),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    -0xb8(%rbp),%rdx
  mov    %eax,(%rdx)
  jmp    L262
L71:
  addq   $0x1,-0xa8(%rbp)
L262:
  mov    -0xa8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isSpace@plt>
  test   %rax,%rax
  jne    L71
  mov    -0xa8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isFloat@plt>
  test   %rax,%rax
  jne    L3
  mov    $0x0,%eax
  jmp    L38
L3:
  lea    -0x90(%rbp),%rax
  mov    %rax,-0x98(%rbp)
  jmp    L172
L6:
  mov    -0xa8(%rbp),%rdx
  lea    0x1(%rdx),%rax
  mov    %rax,-0xa8(%rbp)
  mov    -0x98(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,-0x98(%rbp)
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
L172:
  mov    -0xa8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isFloat@plt>
  test   %rax,%rax
  jne    L6
  mov    -0x98(%rbp),%rax
  movb   $0x0,(%rax)
  mov    -0xa8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isSpace@plt>
  test   %rax,%rax
  jne    L294
  mov    -0xa8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xd,%al
  je     L294
  mov    -0xa8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  je     L294
  mov    -0xa8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L294
  mov    $0x0,%eax
  jmp    L38
L294:
  lea    -0x90(%rbp),%rax
  mov    %rax,%rdi
  call   <atof@plt>
  movd   %xmm0,%eax
  mov    -0xc0(%rbp),%rdx
  mov    %eax,(%rdx)
  jmp    L42
L105:
  addq   $0x1,-0xa8(%rbp)
L42:
  mov    -0xa8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isSpace@plt>
  test   %rax,%rax
  jne    L105
  mov    -0xa8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xd,%al
  je     L278
  mov    -0xa8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  je     L278
  mov    -0xa8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L278
  mov    $0x0,%eax
  jmp    L38
L278:
  mov    $0x1,%eax
L38:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L168
  call   <__stack_chk_fail@plt>
L168:
  leave
  ret
```

assistant: ```c
int ParseProfLine(const char *pchIn, long *plAddress, int *piSamples, float *pfPercentage) {
  char chVal[128], *pchOut;
  while (isSpace(*pchIn))
    pchIn++;
  if (!isHex(*pchIn))
    return 0;
  pchOut = chVal;
  while (isHex(*pchIn))
    *pchOut++ = *pchIn++;
  *pchOut = 0;
  if (!isSpace(*pchIn))
    return 0;
  *plAddress = strtol(chVal, NULL, 16);
  while (isSpace(*pchIn))
    pchIn++;
  if (!isNum(*pchIn))
    return 0;
  pchOut = chVal;
  while (isNum(*pchIn))
    *pchOut++ = *pchIn++;
  *pchOut = 0;
  if (!isSpace(*pchIn))
    return 0;
  *piSamples = atoi(chVal);
  while (isSpace(*pchIn))
    pchIn++;
  if (!isFloat(*pchIn))
    return 0;
  pchOut = chVal;
  while (isFloat(*pchIn))
    *pchOut++ = *pchIn++;
  *pchOut = 0;
  if (!isSpace(*pchIn) && *pchIn != '\r' && *pchIn != '\n' && *pchIn != 0)
    return 0;
  *pfPercentage = atof(chVal);
  while (isSpace(*pchIn))
    pchIn++;
  if (*pchIn != '\r' && *pchIn != '\n' && *pchIn != 0)
    return 0;
  return 1;
}
```