user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<_mulint>:
  endbr64
  xor    %eax,%eax
  test   $0x1,%dil
  mov    %esi,%edx
  mov    %edi,%ecx
  cmovne %esi,%eax
  shl    $0x8,%esi
  add    %eax,%esi
  test   $0x1,%ch
  cmovne %esi,%eax
  mov    %edx,%esi
  shl    $0x10,%esi
  add    %eax,%esi
  test   $0x10000,%edi
  cmovne %esi,%eax
  mov    %edx,%esi
  shl    $0x18,%esi
  add    %eax,%esi
  test   $0x1000000,%edi
  cmovne %esi,%eax
  test   $0x2,%dil
  lea    (%rax,%rdx,2),%esi
  cmovne %esi,%eax
  mov    %edx,%esi
  shl    $0x9,%esi
  add    %eax,%esi
  test   $0x2,%ch
  cmovne %esi,%eax
  mov    %edx,%esi
  shl    $0x11,%esi
  add    %eax,%esi
  test   $0x20000,%edi
  cmovne %esi,%eax
  mov    %edx,%esi
  shl    $0x19,%esi
  add    %eax,%esi
  test   $0x2000000,%edi
  cmovne %esi,%eax
  test   $0x4,%dil
  lea    (%rax,%rdx,4),%esi
  cmovne %esi,%eax
  mov    %edx,%esi
  shl    $0xa,%esi
  add    %eax,%esi
  test   $0x4,%ch
  cmovne %esi,%eax
  mov    %edx,%esi
  shl    $0x12,%esi
  add    %eax,%esi
  test   $0x40000,%edi
  cmovne %esi,%eax
  mov    %edx,%esi
  shl    $0x1a,%esi
  add    %eax,%esi
  test   $0x4000000,%edi
  cmovne %esi,%eax
  test   $0x8,%dil
  lea    (%rax,%rdx,8),%esi
  cmovne %esi,%eax
  mov    %edx,%esi
  shl    $0xb,%esi
  add    %eax,%esi
  test   $0x8,%ch
  cmovne %esi,%eax
  mov    %edx,%esi
  shl    $0x13,%esi
  add    %eax,%esi
  test   $0x80000,%edi
  cmovne %esi,%eax
  mov    %edx,%esi
  shl    $0x1b,%esi
  add    %eax,%esi
  test   $0x8000000,%edi
  cmovne %esi,%eax
  mov    %edx,%esi
  shl    $0x4,%esi
  add    %eax,%esi
  test   $0x10,%dil
  cmovne %esi,%eax
  mov    %edx,%esi
  shl    $0xc,%esi
  add    %eax,%esi
  test   $0x10,%ch
  cmovne %esi,%eax
  mov    %edx,%esi
  shl    $0x14,%esi
  add    %eax,%esi
  test   $0x100000,%edi
  cmovne %esi,%eax
  mov    %edx,%esi
  shl    $0x1c,%esi
  add    %eax,%esi
  test   $0x10000000,%edi
  cmovne %esi,%eax
  mov    %edx,%esi
  shl    $0x5,%esi
  add    %eax,%esi
  test   $0x20,%dil
  cmovne %esi,%eax
  mov    %edx,%esi
  shl    $0xd,%esi
  add    %eax,%esi
  test   $0x20,%ch
  cmovne %esi,%eax
  mov    %edx,%esi
  shl    $0x15,%esi
  add    %eax,%esi
  test   $0x200000,%edi
  cmovne %esi,%eax
  mov    %edx,%esi
  shl    $0x1d,%esi
  add    %eax,%esi
  test   $0x20000000,%edi
  cmovne %esi,%eax
  mov    %edx,%esi
  shl    $0x6,%esi
  add    %eax,%esi
  test   $0x40,%dil
  cmovne %esi,%eax
  mov    %edx,%esi
  shl    $0xe,%esi
  add    %eax,%esi
  test   $0x40,%ch
  cmovne %esi,%eax
  mov    %edx,%esi
  shl    $0x16,%esi
  add    %eax,%esi
  test   $0x400000,%edi
  cmovne %esi,%eax
  mov    %edx,%esi
  shl    $0x1e,%esi
  add    %eax,%esi
  test   $0x40000000,%edi
  cmovne %esi,%eax
  mov    %edx,%esi
  shl    $0x7,%esi
  add    %eax,%esi
  test   $0x80,%dil
  cmovne %esi,%eax
  mov    %edx,%esi
  shl    $0xf,%esi
  add    %eax,%esi
  test   $0x80,%ch
  cmovne %esi,%eax
  mov    %edx,%esi
  shl    $0x17,%esi
  add    %eax,%esi
  test   $0x800000,%edi
  cmovne %esi,%eax
  shl    $0x1f,%edx
  add    %eax,%edx
  test   %edi,%edi
  cmovs  %edx,%eax
  ret
```

assistant: ```c
int _mulint(int a, int b) {
  int result = 0;
  unsigned char i;
  for (i = 0; i < 8u; i++) {
    if (a & 0x0001u)
      result += b;
    if (sizeof(a) > 1 && (a & 0x00000100ul))
      result += (b << 8u);
    if (sizeof(a) > 2 && (a & 0x00010000ul))
      result += (b << 16u);
    if (sizeof(a) > 3 && (a & 0x01000000ul))
      result += (b << 24u);
    a = ((unsigned int)a) >> 1u;
    b <<= 1u;
  }
  return result;
}
```