user: What would the C source look like for the assembly code provided here:

```asm
<PercentCorrect>:
  endbr64
  mov    %rdi,%rcx
  test   %edx,%edx
  jle    L77
  lea    -0x1(%rdx),%eax
  cmp    $0xe,%eax
  jbe    L154
  mov    %edx,%edi
  movdqa D5(%rip),%xmm6
  xor    %eax,%eax
  pxor   %xmm1,%xmm1
  shr    $0x4,%edi
  pxor   %xmm5,%xmm5
  pxor   %xmm4,%xmm4
  shl    $0x4,%rdi
  nopw   0x0(%rax,%rax,1)
L57:
  movdqu (%rcx,%rax,1),%xmm7
  movdqu (%rsi,%rax,1),%xmm0
  movdqa %xmm5,%xmm3
  add    $0x10,%rax
  pcmpeqb %xmm7,%xmm0
  pand   %xmm6,%xmm0
  pcmpgtb %xmm0,%xmm3
  movdqa %xmm0,%xmm2
  punpcklbw %xmm3,%xmm2
  punpckhbw %xmm3,%xmm0
  movdqa %xmm4,%xmm3
  pcmpgtw %xmm2,%xmm3
  movdqa %xmm2,%xmm7
  punpcklwd %xmm3,%xmm7
  punpckhwd %xmm3,%xmm2
  movdqa %xmm0,%xmm3
  paddd  %xmm7,%xmm1
  paddd  %xmm2,%xmm1
  movdqa %xmm4,%xmm2
  pcmpgtw %xmm0,%xmm2
  punpcklwd %xmm2,%xmm3
  punpckhwd %xmm2,%xmm0
  paddd  %xmm3,%xmm1
  paddd  %xmm0,%xmm1
  cmp    %rax,%rdi
  jne    L57
  movdqa %xmm1,%xmm0
  mov    %edx,%edi
  psrldq $0x8,%xmm0
  and    $0xfffffff0,%edi
  paddd  %xmm0,%xmm1
  movdqa %xmm1,%xmm0
  psrldq $0x4,%xmm0
  paddd  %xmm0,%xmm1
  movd   %xmm1,%eax
  test   $0xf,%dl
  je     L96
L186:
  movslq %edi,%r8
  movzbl (%rcx,%r8,1),%r9d
  cmp    %r9b,(%rsi,%r8,1)
  sete   %r8b
  movzbl %r8b,%r8d
  add    %r8d,%eax
  lea    0x1(%rdi),%r8d
  cmp    %edx,%r8d
  jge    L96
  movslq %r8d,%r8
  movzbl (%rsi,%r8,1),%r10d
  cmp    %r10b,(%rcx,%r8,1)
  sete   %r8b
  movzbl %r8b,%r8d
  add    %r8d,%eax
  lea    0x2(%rdi),%r8d
  cmp    %r8d,%edx
  jle    L96
  movslq %r8d,%r8
  movzbl (%rcx,%r8,1),%r11d
  cmp    %r11b,(%rsi,%r8,1)
  sete   %r8b
  movzbl %r8b,%r8d
  add    %r8d,%eax
  lea    0x3(%rdi),%r8d
  cmp    %r8d,%edx
  jle    L96
  movslq %r8d,%r8
  movzbl (%rcx,%r8,1),%r11d
  cmp    %r11b,(%rsi,%r8,1)
  sete   %r8b
  movzbl %r8b,%r8d
  add    %r8d,%eax
  lea    0x4(%rdi),%r8d
  cmp    %r8d,%edx
  jle    L96
  movslq %r8d,%r8
  movzbl (%rcx,%r8,1),%r10d
  cmp    %r10b,(%rsi,%r8,1)
  sete   %r8b
  movzbl %r8b,%r8d
  add    %r8d,%eax
  lea    0x5(%rdi),%r8d
  cmp    %r8d,%edx
  jle    L96
  movslq %r8d,%r8
  movzbl (%rcx,%r8,1),%r9d
  cmp    %r9b,(%rsi,%r8,1)
  sete   %r8b
  movzbl %r8b,%r8d
  add    %r8d,%eax
  lea    0x6(%rdi),%r8d
  cmp    %r8d,%edx
  jle    L96
  movslq %r8d,%r8
  movzbl (%rcx,%r8,1),%r11d
  cmp    %r11b,(%rsi,%r8,1)
  sete   %r8b
  movzbl %r8b,%r8d
  add    %r8d,%eax
  lea    0x7(%rdi),%r8d
  cmp    %r8d,%edx
  jle    L96
  movslq %r8d,%r8
  movzbl (%rcx,%r8,1),%r10d
  cmp    %r10b,(%rsi,%r8,1)
  sete   %r8b
  movzbl %r8b,%r8d
  add    %r8d,%eax
  lea    0x8(%rdi),%r8d
  cmp    %r8d,%edx
  jle    L96
  movslq %r8d,%r8
  movzbl (%rcx,%r8,1),%r9d
  cmp    %r9b,(%rsi,%r8,1)
  sete   %r8b
  movzbl %r8b,%r8d
  add    %r8d,%eax
  lea    0x9(%rdi),%r8d
  cmp    %r8d,%edx
  jle    L96
  movslq %r8d,%r8
  movzbl (%rcx,%r8,1),%r9d
  cmp    %r9b,(%rsi,%r8,1)
  sete   %r8b
  movzbl %r8b,%r8d
  add    %r8d,%eax
  lea    0xa(%rdi),%r8d
  cmp    %r8d,%edx
  jle    L96
  movslq %r8d,%r8
  movzbl (%rcx,%r8,1),%r10d
  cmp    %r10b,(%rsi,%r8,1)
  sete   %r8b
  movzbl %r8b,%r8d
  add    %r8d,%eax
  lea    0xb(%rdi),%r8d
  cmp    %r8d,%edx
  jle    L96
  movslq %r8d,%r8
  movzbl (%rcx,%r8,1),%r11d
  cmp    %r11b,(%rsi,%r8,1)
  sete   %r8b
  movzbl %r8b,%r8d
  add    %r8d,%eax
  lea    0xc(%rdi),%r8d
  cmp    %r8d,%edx
  jle    L96
  movslq %r8d,%r8
  movzbl (%rcx,%r8,1),%r10d
  cmp    %r10b,(%rsi,%r8,1)
  sete   %r8b
  movzbl %r8b,%r8d
  add    %r8d,%eax
  lea    0xd(%rdi),%r8d
  cmp    %r8d,%edx
  jle    L96
  movslq %r8d,%r8
  movzbl (%rcx,%r8,1),%r11d
  cmp    %r11b,(%rsi,%r8,1)
  sete   %r8b
  add    $0xe,%edi
  movzbl %r8b,%r8d
  add    %r8d,%eax
  cmp    %edi,%edx
  jle    L96
  movslq %edi,%rdi
  movzbl (%rcx,%rdi,1),%ecx
  cmp    %cl,(%rsi,%rdi,1)
  sete   %cl
  movzbl %cl,%ecx
  add    %ecx,%eax
L96:
  pxor   %xmm0,%xmm0
  pxor   %xmm1,%xmm1
  cvtsi2ss %eax,%xmm0
  cvtsi2ss %edx,%xmm1
  divss  %xmm1,%xmm0
  ret
L77:
  pxor   %xmm1,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2ss %edx,%xmm1
  divss  %xmm1,%xmm0
  ret
L154:
  xor    %eax,%eax
  xor    %edi,%edi
  jmp    L186
```

tool_calls: name: disassemble_data
arguments: tag: D5
type: byte[16]

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

assistant: ```c
float PercentCorrect(char *TestAsn, char *KnownAsn, int Length) {
  int Res, Count = 0;
  ;
  for (Res = 0; Res < Length; Res++)
    if (KnownAsn[Res] == TestAsn[Res])
      Count++;
  return (((float)Count / (float)Length));
}
```