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

```asm
<memcmp>:
  endbr64
  mov    %rsi,%rcx
  cmp    $0x7,%rdx
  jbe    L107
  nopl   0x0(%rax)
L236:
  mov    (%rcx),%rax
  cmp    %rax,(%rdi)
  je     L155
  movzbl (%rdi),%eax
  movzbl (%rcx),%esi
  cmp    %sil,%al
  jne    L134
  movzbl 0x1(%rdi),%eax
  movzbl 0x1(%rcx),%esi
  cmp    %sil,%al
  jne    L134
  movzbl 0x2(%rdi),%eax
  movzbl 0x2(%rcx),%esi
  cmp    %sil,%al
  jne    L134
  movzbl 0x3(%rdi),%eax
  movzbl 0x3(%rcx),%esi
  cmp    %sil,%al
  jne    L134
  movzbl 0x4(%rdi),%eax
  movzbl 0x4(%rcx),%esi
  cmp    %sil,%al
  jne    L134
  movzbl 0x5(%rdi),%eax
  movzbl 0x5(%rcx),%esi
  cmp    %sil,%al
  jne    L134
  movzbl 0x6(%rdi),%eax
  movzbl 0x6(%rcx),%esi
  cmp    %sil,%al
  jne    L134
  movzbl 0x7(%rdi),%eax
  movzbl 0x7(%rcx),%esi
  cmp    %sil,%al
  jne    L134
L155:
  sub    $0x8,%rdx
  add    $0x8,%rdi
  add    $0x8,%rcx
  cmp    $0x7,%rdx
  ja     L236
L107:
  test   %rdx,%rdx
  je     L202
  movzbl (%rdi),%r8d
  movzbl (%rcx),%esi
  cmp    %r8b,%sil
  jne    L72
  cmp    $0x1,%rdx
  je     L202
  movzbl 0x1(%rdi),%r8d
  movzbl 0x1(%rcx),%esi
  cmp    %r8b,%sil
  jne    L72
  cmp    $0x2,%rdx
  je     L202
  movzbl 0x2(%rdi),%r8d
  movzbl 0x2(%rcx),%esi
  cmp    %r8b,%sil
  jne    L72
  cmp    $0x3,%rdx
  je     L202
  movzbl 0x3(%rdi),%r8d
  movzbl 0x3(%rcx),%esi
  cmp    %sil,%r8b
  jne    L72
  cmp    $0x4,%rdx
  je     L202
  movzbl 0x4(%rdi),%r8d
  movzbl 0x4(%rcx),%esi
  cmp    %sil,%r8b
  jne    L72
  cmp    $0x5,%rdx
  je     L202
  movzbl 0x5(%rdi),%r8d
  movzbl 0x5(%rcx),%esi
  cmp    %sil,%r8b
  jne    L72
  cmp    $0x6,%rdx
  je     L202
  movzbl 0x6(%rdi),%r8d
  movzbl 0x6(%rcx),%esi
  xor    %eax,%eax
  cmp    %sil,%r8b
  jne    L72
  ret
L72:
  movzbl %r8b,%eax
L134:
  sub    %esi,%eax
  ret
L202:
  xor    %eax,%eax
  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);
}
```