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

```asm
<ParseProfLine>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  mov    %rcx,%r13
  push   %r12
  mov    %rdx,%r12
  push   %rbp
  mov    %rsi,%rbp
  push   %rbx
  mov    %rdi,%rbx
  sub    $0x98,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x88(%rsp)
  xor    %eax,%eax
  jmp    L95
  cs nopw 0x0(%rax,%rax,1)
L242:
  add    $0x1,%rbx
L95:
  movsbl (%rbx),%edi
  call   <isSpace@plt>
  test   %rax,%rax
  jne    L242
  movsbl (%rbx),%edi
  mov    %rsp,%r15
  mov    %r15,%r14
  call   <isHex@plt>
  test   %rax,%rax
  jne    L201
  jmp    L25
  cs nopw 0x0(%rax,%rax,1)
L103:
  mov    %r14,%rdi
  mov    %rbx,%rsi
  movsb  %ds:(%rsi),%es:(%rdi)
  mov    %rsi,%rbx
  mov    %rdi,%r14
L201:
  movsbl (%rbx),%edi
  call   <isHex@plt>
  test   %rax,%rax
  jne    L103
  movb   $0x0,(%r14)
  movsbl (%rbx),%edi
  call   <isSpace@plt>
  test   %rax,%rax
  jne    L90
L25:
  xor    %eax,%eax
L70:
  mov    0x88(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L97
  add    $0x98,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  cs nopw 0x0(%rax,%rax,1)
L90:
  mov    $0x10,%edx
  xor    %esi,%esi
  mov    %r15,%rdi
  call   <strtol@plt>
  mov    %rax,0x0(%rbp)
  jmp    L182
  nopl   (%rax)
L116:
  add    $0x1,%rbx
L182:
  movsbl (%rbx),%edi
  call   <isSpace@plt>
  test   %rax,%rax
  jne    L116
  movsbl (%rbx),%edi
  mov    %r15,%rbp
  call   <isNum@plt>
  test   %rax,%rax
  jne    L176
  jmp    L25
  nopl   0x0(%rax,%rax,1)
L215:
  mov    %rbp,%rdi
  mov    %rbx,%rsi
  movsb  %ds:(%rsi),%es:(%rdi)
  mov    %rsi,%rbx
  mov    %rdi,%rbp
L176:
  movsbl (%rbx),%edi
  call   <isNum@plt>
  test   %rax,%rax
  jne    L215
  movb   $0x0,0x0(%rbp)
  movsbl (%rbx),%edi
  call   <isSpace@plt>
  test   %rax,%rax
  je     L25
  mov    %r15,%rdi
  call   <atoi@plt>
  mov    %eax,(%r12)
  jmp    L83
  nopl   (%rax)
L113:
  add    $0x1,%rbx
L83:
  movsbl (%rbx),%edi
  call   <isSpace@plt>
  test   %rax,%rax
  jne    L113
  movsbl (%rbx),%edi
  mov    %r15,%rbp
  call   <isFloat@plt>
  test   %rax,%rax
  jne    L111
  jmp    L25
  cs nopw 0x0(%rax,%rax,1)
L247:
  mov    %rbp,%rdi
  mov    %rbx,%rsi
  movsb  %ds:(%rsi),%es:(%rdi)
  mov    %rsi,%rbx
  mov    %rdi,%rbp
L111:
  movsbl (%rbx),%edi
  call   <isFloat@plt>
  test   %rax,%rax
  jne    L247
  movb   $0x0,0x0(%rbp)
  movsbl (%rbx),%edi
  call   <isSpace@plt>
  test   %rax,%rax
  jne    L52
  movzbl (%rbx),%eax
  cmp    $0xd,%al
  ja     L25
  mov    $0xffffffffffffdbfe,%rdx
  bt     %rax,%rdx
  jb     L25
L52:
  mov    %r15,%rdi
  call   <atof@plt>
  movss  %xmm0,0x0(%r13)
  jmp    L54
  nopw   0x0(%rax,%rax,1)
L154:
  add    $0x1,%rbx
L54:
  movsbl (%rbx),%edi
  call   <isSpace@plt>
  test   %rax,%rax
  jne    L154
  movzbl (%rbx),%ecx
  cmp    $0xd,%cl
  ja     L70
  mov    $0xffffffffffffdbfe,%rax
  sar    %cl,%rax
  and    $0x1,%eax
  xor    $0x1,%eax
  movzbl %al,%eax
  jmp    L70
L97:
  call   <__stack_chk_fail@plt>
```

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;
}
```