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

```asm
<memcmp>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %rdx,-0x38(%rbp)
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x30(%rbp),%rax
  mov    %rax,-0x18(%rbp)
  jmp    L144
L161:
  mov    -0x20(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  cmp    %rax,%rdx
  je     L200
  mov    -0x20(%rbp),%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%edx
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  je     L13
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  jmp    L185
L13:
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  je     L32
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    -0x8(%rbp),%rdx
  add    $0x1,%rdx
  movzbl (%rdx),%edx
  movzbl %dl,%edx
  sub    %edx,%eax
  jmp    L185
L32:
  mov    -0x10(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  je     L76
  mov    -0x10(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    -0x8(%rbp),%rdx
  add    $0x2,%rdx
  movzbl (%rdx),%edx
  movzbl %dl,%edx
  sub    %edx,%eax
  jmp    L185
L76:
  mov    -0x10(%rbp),%rax
  add    $0x3,%rax
  movzbl (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0x3,%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  je     L19
  mov    -0x10(%rbp),%rax
  add    $0x3,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    -0x8(%rbp),%rdx
  add    $0x3,%rdx
  movzbl (%rdx),%edx
  movzbl %dl,%edx
  sub    %edx,%eax
  jmp    L185
L19:
  mov    -0x10(%rbp),%rax
  add    $0x4,%rax
  movzbl (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  je     L152
  mov    -0x10(%rbp),%rax
  add    $0x4,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    -0x8(%rbp),%rdx
  add    $0x4,%rdx
  movzbl (%rdx),%edx
  movzbl %dl,%edx
  sub    %edx,%eax
  jmp    L185
L152:
  mov    -0x10(%rbp),%rax
  add    $0x5,%rax
  movzbl (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0x5,%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  je     L65
  mov    -0x10(%rbp),%rax
  add    $0x5,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    -0x8(%rbp),%rdx
  add    $0x5,%rdx
  movzbl (%rdx),%edx
  movzbl %dl,%edx
  sub    %edx,%eax
  jmp    L185
L65:
  mov    -0x10(%rbp),%rax
  add    $0x6,%rax
  movzbl (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0x6,%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  je     L11
  mov    -0x10(%rbp),%rax
  add    $0x6,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    -0x8(%rbp),%rdx
  add    $0x6,%rdx
  movzbl (%rdx),%edx
  movzbl %dl,%edx
  sub    %edx,%eax
  jmp    L185
L11:
  mov    -0x10(%rbp),%rax
  add    $0x7,%rax
  movzbl (%rax),%edx
  mov    -0x8(%rbp),%rax
  add    $0x7,%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  je     L194
  mov    -0x10(%rbp),%rax
  add    $0x7,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    -0x8(%rbp),%rdx
  add    $0x7,%rdx
  movzbl (%rdx),%edx
  movzbl %dl,%edx
  sub    %edx,%eax
  jmp    L185
L194:
  nop
L200:
  addq   $0x8,-0x20(%rbp)
  addq   $0x8,-0x18(%rbp)
  subq   $0x8,-0x38(%rbp)
L144:
  cmpq   $0x7,-0x38(%rbp)
  ja     L161
  mov    -0x20(%rbp),%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x18(%rbp),%rax
  mov    %rax,-0x8(%rbp)
  jmp    L150
L133:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%edx
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    %al,%dl
  je     L140
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  jmp    L185
L140:
  addq   $0x1,-0x10(%rbp)
  addq   $0x1,-0x8(%rbp)
L150:
  mov    -0x38(%rbp),%rax
  lea    -0x1(%rax),%rdx
  mov    %rdx,-0x38(%rbp)
  test   %rax,%rax
  jne    L133
  mov    $0x0,%eax
L185:
  pop    %rbp
  ret
```

assistant: ```c
int memcmp(const void *m1, const void *m2, size_t n) {
  const unsigned long *im1 = (const unsigned long *)m1;
  const unsigned long *im2 = (const unsigned long *)m2;
  const unsigned char *cm1;
  const unsigned char *cm2;
  for (; n >= sizeof(unsigned long); n -= sizeof(unsigned long)) {
    if (*im1 != *im2) {
      cm1 = (const unsigned char *)im1;
      cm2 = (const unsigned char *)im2;
      switch (sizeof(unsigned long)) {
      case 1:
        do {
          if (cm1[0] != cm2[0])
            return (cm1[0] - cm2[0]);
        } while (0);
      case 2:
        do {
          if (cm1[0] != cm2[0])
            return (cm1[0] - cm2[0]);
          if (cm1[1] != cm2[1])
            return (cm1[1] - cm2[1]);
        } while (0);
        break;
      case 4:
        do {
          if (cm1[0] != cm2[0])
            return (cm1[0] - cm2[0]);
          if (cm1[1] != cm2[1])
            return (cm1[1] - cm2[1]);
          if (cm1[2] != cm2[2])
            return (cm1[2] - cm2[2]);
          if (cm1[3] != cm2[3])
            return (cm1[3] - cm2[3]);
        } while (0);
        break;
      case 8:
        do {
          if (cm1[0] != cm2[0])
            return (cm1[0] - cm2[0]);
          if (cm1[1] != cm2[1])
            return (cm1[1] - cm2[1]);
          if (cm1[2] != cm2[2])
            return (cm1[2] - cm2[2]);
          if (cm1[3] != cm2[3])
            return (cm1[3] - cm2[3]);
          if (cm1[4] != cm2[4])
            return (cm1[4] - cm2[4]);
          if (cm1[5] != cm2[5])
            return (cm1[5] - cm2[5]);
          if (cm1[6] != cm2[6])
            return (cm1[6] - cm2[6]);
          if (cm1[7] != cm2[7])
            return (cm1[7] - cm2[7]);
        } while (0);
        break;
      default:
        do {
          unsigned long i;
          for (i = 0; i < sizeof(unsigned long); ++i) {
            if (cm1[i] != cm2[i])
              return (cm1[i] - cm2[i]);
          }
        } while (0);
        break;
      }
    }
    im1++;
    im2++;
  }
  cm1 = (const unsigned char *)im1;
  cm2 = (const unsigned char *)im2;
  for (; n--; cm1++, cm2++) {
    if (*cm1 != *cm2)
      return (*cm1 - *cm2);
  }
  return (0);
}
```