user: 下面的汇编指令对应的C源代码是什么：

```asm
<bitcmp>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x140,%rsp
  mov    %rdi,-0x138(%rbp)
  mov    %rsi,-0x140(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x138(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,-0x11c(%rbp)
  mov    -0x140(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,-0x118(%rbp)
  mov    -0x11c(%rbp),%eax
  cmp    -0x118(%rbp),%eax
  jge    L50
  mov    -0x118(%rbp),%eax
  sub    -0x11c(%rbp),%eax
  mov    %eax,-0x114(%rbp)
  movl   $0x0,-0x120(%rbp)
  jmp    L55
L164:
  mov    -0x120(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x120(%rbp)
  cltq
  movb   $0x30,-0x110(%rbp,%rax,1)
L55:
  mov    -0x114(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,-0x114(%rbp)
  test   %eax,%eax
  jne    L164
  jmp    L22
L110:
  mov    -0x138(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x138(%rbp)
  mov    -0x120(%rbp),%edx
  lea    0x1(%rdx),%ecx
  mov    %ecx,-0x120(%rbp)
  movzbl (%rax),%ecx
  movslq %edx,%rax
  mov    %cl,-0x110(%rbp,%rax,1)
L22:
  mov    -0x11c(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,-0x11c(%rbp)
  test   %eax,%eax
  jne    L110
  mov    -0x120(%rbp),%eax
  cltq
  movb   $0x0,-0x110(%rbp,%rax,1)
  lea    -0x110(%rbp),%rax
  mov    %rax,-0x138(%rbp)
  jmp    L15
L50:
  mov    -0x118(%rbp),%eax
  cmp    -0x11c(%rbp),%eax
  jge    L15
  mov    -0x11c(%rbp),%eax
  sub    -0x118(%rbp),%eax
  mov    %eax,-0x114(%rbp)
  movl   $0x0,-0x120(%rbp)
  jmp    L65
L184:
  mov    -0x120(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x120(%rbp)
  cltq
  movb   $0x30,-0x110(%rbp,%rax,1)
L65:
  mov    -0x114(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,-0x114(%rbp)
  test   %eax,%eax
  jne    L184
  jmp    L166
L9:
  mov    -0x140(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x140(%rbp)
  mov    -0x120(%rbp),%edx
  lea    0x1(%rdx),%ecx
  mov    %ecx,-0x120(%rbp)
  movzbl (%rax),%ecx
  movslq %edx,%rax
  mov    %cl,-0x110(%rbp,%rax,1)
L166:
  mov    -0x118(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,-0x118(%rbp)
  test   %eax,%eax
  jne    L9
  mov    -0x120(%rbp),%eax
  cltq
  movb   $0x0,-0x110(%rbp,%rax,1)
  lea    -0x110(%rbp),%rax
  mov    %rax,-0x140(%rbp)
  jmp    L15
L38:
  mov    -0x140(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x140(%rbp)
  movzbl (%rax),%eax
  mov    %al,-0x121(%rbp)
  cmpb   $0x30,-0x122(%rbp)
  jne    L33
  cmpb   $0x31,-0x121(%rbp)
  je     L120
L33:
  cmpb   $0x31,-0x122(%rbp)
  jne    L15
  cmpb   $0x30,-0x121(%rbp)
  jne    L15
L120:
  mov    $0x0,%eax
  jmp    L87
L15:
  mov    -0x138(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x138(%rbp)
  movzbl (%rax),%eax
  mov    %al,-0x122(%rbp)
  cmpb   $0x0,-0x122(%rbp)
  jne    L38
  mov    $0x1,%eax
L87:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L112
  call   <__stack_chk_fail@plt>
L112:
  leave
  ret
```

assistant: ```c
char bitcmp(char *bitstrm1, char *bitstrm2) {
  int i, l1, l2, ldiff;
  char stream[256];
  char chr1, chr2;
  l1 = strlen(bitstrm1);
  l2 = strlen(bitstrm2);
  if (l1 < l2) {
    ldiff = l2 - l1;
    i = 0;
    while (ldiff--)
      stream[i++] = '0';
    while (l1--)
      stream[i++] = *(bitstrm1++);
    stream[i] = '\0';
    bitstrm1 = stream;
  } else if (l2 < l1) {
    ldiff = l1 - l2;
    i = 0;
    while (ldiff--)
      stream[i++] = '0';
    while (l2--)
      stream[i++] = *(bitstrm2++);
    stream[i] = '\0';
    bitstrm2 = stream;
  }
  while ((chr1 = *(bitstrm1++))) {
    chr2 = *(bitstrm2++);
    if (((chr1 == '0') && (chr2 == '1')) || ((chr1 == '1') && (chr2 == '0')))
      return (0);
  }
  return (1);
}
```