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

```asm
<int2bin>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %edi,-0x44(%rbp)
  movl   $0x0,-0x30(%rbp)
  movl   $0x0,-0x2c(%rbp)
  mov    -0x44(%rbp),%eax
  cltd
  shr    $0x1c,%edx
  add    %edx,%eax
  and    $0xf,%eax
  sub    %edx,%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x44(%rbp),%eax
  movslq %eax,%rdx
  imul   $0xffffffff88888889,%rdx,%rdx
  shr    $0x20,%rdx
  add    %eax,%edx
  sar    $0x3,%edx
  mov    %eax,%esi
  sar    $0x1f,%esi
  mov    %edx,%ecx
  sub    %esi,%ecx
  mov    %ecx,%edx
  shl    $0x4,%edx
  sub    %ecx,%edx
  sub    %edx,%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x44(%rbp),%edx
  movslq %edx,%rax
  imul   $0x4ec4ec4f,%rax,%rax
  shr    $0x20,%rax
  sar    $0x2,%eax
  mov    %edx,%esi
  sar    $0x1f,%esi
  sub    %esi,%eax
  mov    %eax,%ecx
  mov    %ecx,%eax
  add    %eax,%eax
  add    %ecx,%eax
  shl    $0x2,%eax
  add    %ecx,%eax
  sub    %eax,%edx
  mov    %edx,-0x2c(%rbp)
  mov    $0x6,%edi
  call   <malloc@plt>
  mov    %rax,-0x20(%rbp)
  mov    $0x6,%edi
  call   <malloc@plt>
  mov    %rax,-0x18(%rbp)
  mov    $0x6,%edi
  call   <malloc@plt>
  mov    %rax,-0x10(%rbp)
  mov    -0x28(%rbp),%eax
  mov    %eax,%edi
  call   <dec2bin@plt>
  mov    %rax,-0x20(%rbp)
  mov    -0x24(%rbp),%eax
  mov    %eax,%edi
  call   <dec2bin@plt>
  mov    %rax,-0x18(%rbp)
  mov    -0x2c(%rbp),%eax
  mov    %eax,%edi
  call   <dec2bin@plt>
  mov    %rax,-0x10(%rbp)
  mov    $0x14,%edi
  call   <malloc@plt>
  mov    %rax,-0x8(%rbp)
  movl   $0x0,-0x34(%rbp)
  jmp    L21
L20:
  mov    -0x34(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    -0x34(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x8(%rbp),%rdx
  add    %rcx,%rdx
  movzbl (%rax),%eax
  mov    %al,(%rdx)
  addl   $0x1,-0x34(%rbp)
L21:
  cmpl   $0x3,-0x34(%rbp)
  jle    L20
  movl   $0x0,-0x34(%rbp)
  jmp    L23
L8:
  mov    -0x34(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    -0x34(%rbp),%edx
  movslq %edx,%rdx
  lea    0x4(%rdx),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rcx,%rdx
  movzbl (%rax),%eax
  mov    %al,(%rdx)
  addl   $0x1,-0x34(%rbp)
L23:
  cmpl   $0x3,-0x34(%rbp)
  jle    L8
  movl   $0x0,-0x34(%rbp)
  jmp    L29
L48:
  mov    -0x34(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    -0x34(%rbp),%edx
  movslq %edx,%rdx
  lea    0x8(%rdx),%rcx
  mov    -0x8(%rbp),%rdx
  add    %rcx,%rdx
  movzbl (%rax),%eax
  mov    %al,(%rdx)
  addl   $0x1,-0x34(%rbp)
L29:
  cmpl   $0x3,-0x34(%rbp)
  jle    L48
  mov    -0x8(%rbp),%rax
  leave
  ret
```

assistant: ```c
char *int2bin(int a) {
  int result = 0;
  int a1, a2, a3 = 0;
  a1 = a % 16;
  a2 = a % 15;
  a3 = a % 13;
  char *a1c;
  char *a2c;
  char *a3c;
  a1c = (char *)malloc(sizeof(char) * 6);
  a2c = (char *)malloc(sizeof(char) * 6);
  a3c = (char *)malloc(sizeof(char) * 6);
  a1c = dec2bin(a1);
  a2c = dec2bin(a2);
  a3c = dec2bin(a3);
  char *atc;
  atc = (char *)malloc(sizeof(char) * 20);
  int i;
  for (i = 0; i < 4; i++) {
    atc[i] = a1c[i];
  }
  for (i = 0; i < 4; i++) {
    atc[i + 4] = a2c[i];
  }
  for (i = 0; i < 4; i++) {
    atc[i + 8] = a3c[i];
  }
  return atc;
}
```