user: 这段汇编代码用C语言表示是什么样的?

```asm
<tstepcount>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x18(%rbp)
  movsd  %xmm0,-0x20(%rbp)
  mov    %rsi,-0x28(%rbp)
  movsd  %xmm1,-0x30(%rbp)
  movq   $0x0,-0x8(%rbp)
  movsd  -0x30(%rbp),%xmm0
  ucomisd -0x30(%rbp),%xmm0
  jp     L107
  movsd  -0x20(%rbp),%xmm0
  ucomisd -0x20(%rbp),%xmm0
  jnp    L92
L107:
  movsd  -0x30(%rbp),%xmm0
  ucomisd -0x30(%rbp),%xmm0
  jnp    L158
  movsd  -0x20(%rbp),%xmm0
  ucomisd -0x20(%rbp),%xmm0
  jnp    L158
  mov    $0x1,%eax
  jmp    L134
L158:
  mov    $0x0,%eax
L134:
  and    $0x1,%eax
  jmp    L60
L92:
  movsd  -0x20(%rbp),%xmm0
  comisd -0x30(%rbp),%xmm0
  seta   %al
  xor    $0x1,%eax
  test   %al,%al
  je     L195
  movsd  -0x30(%rbp),%xmm0
  comisd -0x20(%rbp),%xmm0
  seta   %al
  xor    $0x1,%eax
  test   %al,%al
  je     L195
  mov    $0x1,%eax
  jmp    L42
L195:
  mov    $0x0,%eax
L42:
  and    $0x1,%eax
L60:
  test   %al,%al
  je     L206
  movsd  -0x20(%rbp),%xmm0
  jmp    L91
L206:
  movq   $0x0,-0x10(%rbp)
  jmp    L224
L122:
  addq   $0x1,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x10(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  ucomisd %xmm1,%xmm0
  jp     L182
  ucomisd %xmm1,%xmm0
  jne    L182
  movsd  -0x30(%rbp),%xmm0
  ucomisd -0x30(%rbp),%xmm0
  jnp    L93
L182:
  mov    -0x10(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x10(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  ucomisd %xmm1,%xmm0
  jp     L137
  ucomisd %xmm1,%xmm0
  je     L167
L137:
  movsd  -0x30(%rbp),%xmm0
  ucomisd -0x30(%rbp),%xmm0
  jnp    L167
  mov    $0x1,%eax
  jmp    L46
L167:
  mov    $0x0,%eax
L46:
  and    $0x1,%eax
  jmp    L141
L93:
  mov    -0x10(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  movsd  -0x30(%rbp),%xmm0
  comisd %xmm1,%xmm0
  seta   %al
  xor    $0x1,%eax
  test   %al,%al
  je     L266
  mov    -0x10(%rbp),%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  comisd -0x30(%rbp),%xmm0
  seta   %al
  xor    $0x1,%eax
  test   %al,%al
  je     L266
  mov    $0x1,%eax
  jmp    L101
L266:
  mov    $0x0,%eax
L101:
  and    $0x1,%eax
L141:
  test   %al,%al
  jne    L148
  addq   $0x1,-0x10(%rbp)
L224:
  mov    -0x10(%rbp),%rax
  cmp    -0x18(%rbp),%rax
  jl     L122
  jmp    L71
L148:
  nop
L71:
  mov    -0x10(%rbp),%rax
  cmp    -0x18(%rbp),%rax
  jne    L261
  movsd  -0x20(%rbp),%xmm0
  jmp    L91
L261:
  pxor   %xmm0,%xmm0
  cvtsi2sdq -0x8(%rbp),%xmm0
L91:
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  pop    %rbp
  ret
```

assistant: ```c
double tstepcount(long nts, double missval1, double *array1, double refval) {
  long j;
  long n = 0;
  if ((((refval) != (refval)) || ((missval1) != (missval1)) ? (((refval) != (refval)) && ((missval1) != (missval1)) ? 1 : 0) : !(refval < missval1 || missval1 < refval)))
    return (missval1);
  for (j = 0; j < nts; j++) {
    n++;
    if ((((array1[j]) != (array1[j])) || ((refval) != (refval)) ? (((array1[j]) != (array1[j])) && ((refval) != (refval)) ? 1 : 0) : !(array1[j] < refval || refval < array1[j])))
      break;
  }
  if (j == nts)
    return (missval1);
  else
    return ((double)n);
}
```