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

```asm
<ReadBearing>:
  endbr64
  push   %rbp
  mov    %rdi,%rbp
  sub    $0x40,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x38(%rsp)
  xor    %eax,%eax
  movb   $0x0,0x20(%rsp)
  movq   $0x0,0x10(%rsp)
  call   <strlen@plt>
  test   %eax,%eax
  jle    L650
  mov    %eax,%esi
  xor    %ecx,%ecx
  mov    $0x1,%eax
  jmp    L636
  nopw   0x0(%rax,%rax,1)
L569:
  movslq %ecx,%rdi
  add    $0x1,%ecx
  mov    %dl,0x20(%rsp,%rdi,1)
L121:
  mov    %eax,%edx
  add    $0x1,%rax
  cmp    %edx,%esi
  jle    L233
L546:
  cmp    $0x11,%edx
  jg     L233
L636:
  movzbl -0x1(%rbp,%rax,1),%edx
  cmp    $0x20,%dl
  je     L146
  cmp    $0xa,%dl
  jne    L569
  cmp    $0x20,%dl
  jne    L121
  nopl   (%rax)
L146:
  cmpb   $0x20,0x0(%rbp,%rax,1)
  je     L121
  test   %ecx,%ecx
  jne    L569
  mov    %eax,%edx
  add    $0x1,%rax
  cmp    %edx,%esi
  jg     L546
  nopl   (%rax)
L233:
  lea    0x20(%rsp),%rbp
  movslq %ecx,%rcx
  mov    %rbp,%rdi
  movb   $0x0,0x20(%rsp,%rcx,1)
  call   <strlen@plt>
  mov    %rax,%rcx
  test   %rax,%rax
  je     L567
  lea    -0x1(%rax),%eax
  cmp    $0xe,%eax
  jbe    L43
  movdqa 0x20(%rsp),%xmm1
  pxor   %xmm2,%xmm2
  pcmpeqb D12(%rip),%xmm1
  pand   D80(%rip),%xmm1
  pcmpgtb %xmm1,%xmm2
  movdqa %xmm1,%xmm0
  punpcklbw %xmm2,%xmm0
  punpckhbw %xmm2,%xmm1
  pxor   %xmm2,%xmm2
  movdqa %xmm2,%xmm3
  pcmpgtw %xmm1,%xmm2
  movdqa %xmm0,%xmm4
  pcmpgtw %xmm0,%xmm3
  punpcklwd %xmm3,%xmm4
  punpckhwd %xmm3,%xmm0
  movdqa %xmm1,%xmm3
  paddd  %xmm4,%xmm0
  punpcklwd %xmm2,%xmm3
  punpckhwd %xmm2,%xmm1
  paddd  %xmm3,%xmm0
  paddd  %xmm1,%xmm0
  movdqa %xmm0,%xmm1
  psrldq $0x8,%xmm1
  paddd  %xmm1,%xmm0
  movdqa %xmm0,%xmm1
  psrldq $0x4,%xmm1
  paddd  %xmm1,%xmm0
  movd   %xmm0,%eax
  cmp    $0x10,%ecx
  je     L631
  mov    $0x10,%edx
L194:
  movslq %edx,%rsi
  cmpb   $0x20,0x20(%rsp,%rsi,1)
  je     L767
  add    $0x1,%edx
  cmp    %ecx,%edx
  jge    L631
  movslq %edx,%rsi
  cmpb   $0x20,0x20(%rsp,%rsi,1)
  je     L149
L354:
  add    $0x1,%edx
  cmp    %edx,%ecx
  jle    L631
  movslq %edx,%rsi
  cmpb   $0x20,0x20(%rsp,%rsi,1)
  je     L742
L245:
  add    $0x1,%edx
  cmp    %ecx,%edx
  jge    L631
  movslq %edx,%rsi
  cmpb   $0x20,0x20(%rsp,%rsi,1)
  je     L69
L652:
  add    $0x1,%edx
  cmp    %edx,%ecx
  jle    L631
  movslq %edx,%rsi
  cmpb   $0x20,0x20(%rsp,%rsi,1)
  je     L126
L615:
  add    $0x1,%edx
  cmp    %edx,%ecx
  jle    L631
  movslq %edx,%rsi
  cmpb   $0x20,0x20(%rsp,%rsi,1)
  je     L697
L629:
  add    $0x1,%edx
  cmp    %edx,%ecx
  jle    L631
  movslq %edx,%rsi
  cmpb   $0x20,0x20(%rsp,%rsi,1)
  je     L349
L702:
  add    $0x1,%edx
  cmp    %edx,%ecx
  jle    L631
  movslq %edx,%rsi
  cmpb   $0x20,0x20(%rsp,%rsi,1)
  je     L59
L728:
  add    $0x1,%edx
  cmp    %edx,%ecx
  jle    L631
  movslq %edx,%rsi
  cmpb   $0x20,0x20(%rsp,%rsi,1)
  je     L557
L277:
  add    $0x1,%edx
  cmp    %edx,%ecx
  jle    L631
  movslq %edx,%rsi
  cmpb   $0x20,0x20(%rsp,%rsi,1)
  je     L828
L740:
  add    $0x1,%edx
  cmp    %edx,%ecx
  jle    L631
L733:
  movslq %edx,%rsi
  cmpb   $0x20,0x20(%rsp,%rsi,1)
  je     L351
  add    $0x1,%edx
  cmp    %edx,%ecx
  jle    L631
L719:
  movslq %edx,%rsi
  cmpb   $0x20,0x20(%rsp,%rsi,1)
  je     L709
  add    $0x1,%edx
  cmp    %edx,%ecx
  jle    L631
L703:
  movslq %edx,%rsi
  cmpb   $0x20,0x20(%rsp,%rsi,1)
  je     L179
  add    $0x1,%edx
  cmp    %edx,%ecx
  jle    L631
L324:
  movslq %edx,%rsi
  cmpb   $0x20,0x20(%rsp,%rsi,1)
  je     L391
  add    $0x1,%edx
  cmp    %edx,%ecx
  jle    L631
L678:
  movslq %edx,%rdx
  cmpb   $0x20,0x20(%rsp,%rdx,1)
  jne    L631
  add    $0x1,%eax
  nopw   0x0(%rax,%rax,1)
L631:
  test   %eax,%eax
  je     L567
L564:
  pxor   %xmm0,%xmm0
  cmp    $0x2,%eax
  je     L731
L203:
  mov    0x38(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L79
  add    $0x40,%rsp
  pop    %rbp
  ret
  nop
L149:
  add    $0x1,%edx
  add    $0x1,%eax
  cmp    %ecx,%edx
  jge    L564
  movslq %edx,%rsi
  cmpb   $0x20,0x20(%rsp,%rsi,1)
  jne    L245
L742:
  add    $0x1,%edx
  add    $0x1,%eax
  cmp    %edx,%ecx
  jle    L564
  movslq %edx,%rsi
  cmpb   $0x20,0x20(%rsp,%rsi,1)
  jne    L652
L69:
  add    $0x1,%edx
  add    $0x1,%eax
  cmp    %edx,%ecx
  jle    L564
  movslq %edx,%rsi
  cmpb   $0x20,0x20(%rsp,%rsi,1)
  jne    L615
L126:
  add    $0x1,%edx
  add    $0x1,%eax
  cmp    %edx,%ecx
  jle    L564
  movslq %edx,%rsi
  cmpb   $0x20,0x20(%rsp,%rsi,1)
  jne    L629
L697:
  add    $0x1,%edx
  add    $0x1,%eax
  cmp    %edx,%ecx
  jle    L564
  movslq %edx,%rsi
  cmpb   $0x20,0x20(%rsp,%rsi,1)
  jne    L702
L349:
  add    $0x1,%edx
  add    $0x1,%eax
  cmp    %edx,%ecx
  jle    L564
  movslq %edx,%rsi
  cmpb   $0x20,0x20(%rsp,%rsi,1)
  jne    L728
L59:
  add    $0x1,%edx
  add    $0x1,%eax
  cmp    %edx,%ecx
  jle    L564
  movslq %edx,%rsi
  cmpb   $0x20,0x20(%rsp,%rsi,1)
  jne    L277
L557:
  add    $0x1,%edx
  add    $0x1,%eax
  cmp    %edx,%ecx
  jle    L564
  movslq %edx,%rsi
  cmpb   $0x20,0x20(%rsp,%rsi,1)
  jne    L740
  jmp    L828
  nopl   (%rax)
L731:
  lea    0x8(%rsp),%rdx
  lea    0xc(%rsp),%rcx
  mov    %rbp,%rdi
  xor    %eax,%eax
  lea    0x18(%rsp),%r8
  lea    D73(%rip),%rsi
  call   <sscanf@plt>
  mov    0x8(%rsp),%eax
  mov    0xc(%rsp),%edx
  test   %eax,%eax
  js     L768
  movsd  0x18(%rsp),%xmm1
L720:
  pxor   %xmm2,%xmm2
  pxor   %xmm0,%xmm0
  divsd  D74(%rip),%xmm1
  cvtsi2sd %eax,%xmm2
  cvtsi2sd %edx,%xmm0
  divsd  D1(%rip),%xmm0
  addsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  comisd D3(%rip),%xmm0
  ja     L710
L374:
  movsd  D99(%rip),%xmm1
  comisd %xmm0,%xmm1
  ja     L710
  jmp    L203
  nopl   0x0(%rax,%rax,1)
L567:
  xor    %eax,%eax
  lea    0x10(%rsp),%rdx
  lea    D66(%rip),%rsi
  mov    %rbp,%rdi
  call   <sscanf@plt>
  movsd  0x10(%rsp),%xmm0
  comisd D3(%rip),%xmm0
  jbe    L374
L710:
  pxor   %xmm0,%xmm0
  jmp    L203
  nopw   0x0(%rax,%rax,1)
L767:
  add    $0x1,%edx
  add    $0x1,%eax
  cmp    %edx,%ecx
  jle    L564
  movslq %edx,%rsi
  cmpb   $0x20,0x20(%rsp,%rsi,1)
  jne    L354
  jmp    L149
  nopl   0x0(%rax)
L828:
  add    $0x1,%edx
  add    $0x1,%eax
  cmp    %edx,%ecx
  jg     L733
  jmp    L564
L768:
  movsd  0x18(%rsp),%xmm1
  neg    %edx
  xorpd  D60(%rip),%xmm1
  jmp    L720
L650:
  xor    %ecx,%ecx
  jmp    L233
L43:
  xor    %eax,%eax
  xor    %edx,%edx
  jmp    L194
L351:
  add    $0x1,%edx
  add    $0x1,%eax
  cmp    %edx,%ecx
  jg     L719
  jmp    L564
L709:
  add    $0x1,%edx
  add    $0x1,%eax
  cmp    %edx,%ecx
  jg     L703
  jmp    L564
L179:
  add    $0x1,%edx
  add    $0x1,%eax
  cmp    %ecx,%edx
  jl     L324
  jmp    L564
L391:
  add    $0x1,%edx
  add    $0x1,%eax
  cmp    %ecx,%edx
  jl     L678
  jmp    L564
L79:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: tag: D12
type_infered: byte[16]
name: disassemble_data
arguments: tag: D80
type_infered: byte[16]
name: disassemble_data
arguments: tag: D73
type_infered: string
name: disassemble_data
arguments: tag: D74
type_infered: f32[2]
name: disassemble_data
arguments: tag: D1
type_infered: f32[2]
name: disassemble_data
arguments: tag: D3
type_infered: f64[2]
name: disassemble_data
arguments: tag: D99
type_infered: f32[2]
name: disassemble_data
arguments: tag: D66
type_infered: string
name: disassemble_data
arguments: tag: D60
type_infered: f32[4]

tool: {"D12": [0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20]}

tool: {"D80": [0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01]}

tool: D73: %d %d %lf

tool: {"D74": [0.0,5.37890625]}

tool: {"D1": [0.0,3.21875]}

tool: {"D3": [360.0,-360.0]}

tool: {"D99": [0.0,-3.8515625]}

tool: D66: %lf

tool: {"D60": [0.0,-0.0,0.0,0.0]}

assistant: ```c
double ReadBearing(input)
char *input;
{
  char string[20];
  double bearing = 0.0, seconds;
  int a, b, length, degrees, minutes;
  string[0] = 0;
  length = strlen(input);
  for (a = 0, b = 0; a < length && a < 18; a++) {
    if ((input[a] != 32 && input[a] != '\n') || (input[a] == 32 && input[a + 1] != 32 && b != 0)) {
      string[b] = input[a];
      b++;
    }
  }
  string[b] = 0;
  length = strlen(string);
  for (a = 0, b = 0; a < length; a++)
    if (string[a] == 32)
      b++;
  if (b == 0)
    sscanf(string, "%lf", &bearing);
  if (b == 2) {
    sscanf(string, "%d %d %lf", &degrees, &minutes, &seconds);
    if (degrees < 0.0) {
      minutes = -minutes;
      seconds = -seconds;
    }
    bearing = (double)degrees + ((double)minutes / 60) + (seconds / 3600);
  }
  if (bearing > 360.0 || bearing < -360.0)
    bearing = 0.0;
  return bearing;
}
```