user: 提供的汇编代码用C语言表示会是什么样子：

```asm
<ParseCompareDoubles>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %rdi,-0x48(%rbp)
  mov    %rsi,-0x50(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  cmpq   $0x0,-0x48(%rbp)
  jne    L7
  cmpq   $0x0,-0x50(%rbp)
  jne    L7
  mov    $0x0,%eax
  jmp    L91
L7:
  cmpq   $0x0,-0x48(%rbp)
  jne    L13
  mov    $0xffffffff,%eax
  jmp    L91
L13:
  cmpq   $0x0,-0x50(%rbp)
  jne    L100
  mov    $0x1,%eax
  jmp    L91
L100:
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movl   $0x1,-0x40(%rbp)
  movl   $0x1,-0x3c(%rbp)
  movq   $0x0,-0x38(%rbp)
  movq   $0x0,-0x30(%rbp)
  mov    -0x48(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x30(%rbp)
  jmp    L60
L236:
  subq   $0x1,-0x30(%rbp)
L60:
  mov    -0x30(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isblank@plt>
  test   %rax,%rax
  jne    L236
  addq   $0x1,-0x30(%rbp)
  lea    -0x38(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strtod@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x38(%rbp),%rax
  cmp    %rax,-0x30(%rbp)
  je     L81
  movl   $0x0,-0x40(%rbp)
L81:
  mov    -0x50(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cltq
  lea    -0x1(%rax),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x30(%rbp)
  jmp    L0
L52:
  subq   $0x1,-0x30(%rbp)
L0:
  mov    -0x30(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isblank@plt>
  test   %rax,%rax
  jne    L52
  addq   $0x1,-0x30(%rbp)
  lea    -0x38(%rbp),%rdx
  mov    -0x10(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strtod@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x38(%rbp),%rax
  cmp    %rax,-0x30(%rbp)
  je     L154
  movl   $0x0,-0x3c(%rbp)
L154:
  cmpl   $0x0,-0x40(%rbp)
  jne    L40
  cmpl   $0x0,-0x3c(%rbp)
  jne    L40
  mov    $0x0,%eax
  jmp    L91
L40:
  cmpl   $0x0,-0x40(%rbp)
  jne    L36
  mov    $0xffffffff,%eax
  jmp    L91
L36:
  cmpl   $0x0,-0x3c(%rbp)
  jne    L149
  mov    $0x1,%eax
  jmp    L91
L149:
  movsd  -0x28(%rbp),%xmm0
  comisd -0x20(%rbp),%xmm0
  jbe    L207
  mov    $0x1,%eax
  jmp    L91
L207:
  movsd  -0x20(%rbp),%xmm0
  comisd -0x28(%rbp),%xmm0
  jbe    L85
  mov    $0xffffffff,%eax
  jmp    L91
L85:
  mov    $0x0,%eax
L91:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L14
  call   <__stack_chk_fail@plt>
L14:
  leave
  ret
```

assistant: ```c
int ParseCompareDoubles(const char **ptrs1, const char **ptrs2) {
  if (!ptrs1 && !ptrs2)
    return 0;
  if (!ptrs1)
    return -1;
  if (!ptrs2)
    return 1;
  double n1 = 0.0;
  double n2 = 0.0;
  int isN1Valid = 1;
  int isN2Valid = 1;
  char *parseEnd = NULL;
  const char *end = 0;
  const char *s1 = *ptrs1;
  end = &s1[strlen(s1) - 1];
  while (isblank(*end))
    --end;
  ++end;
  n1 = strtod(s1, &parseEnd);
  if (end != parseEnd) {
    isN1Valid = 0;
  }
  const char *s2 = *ptrs2;
  end = &s2[strlen(s2) - 1];
  while (isblank(*end))
    --end;
  ++end;
  n2 = strtod(s2, &parseEnd);
  if (end != parseEnd) {
    isN2Valid = 0;
  }
  if (!isN1Valid && !isN2Valid)
    return 0;
  if (!isN1Valid)
    return -1;
  if (!isN2Valid)
    return 1;
  if (n1 > n2)
    return 1;
  else if (n2 > n1)
    return -1;
  return 0;
}
```