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

```asm
<BF_ecb_encrypt>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %rdi,-0x38(%rbp)
  mov    %rsi,-0x40(%rbp)
  mov    %rdx,-0x48(%rbp)
  mov    %ecx,-0x4c(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x38(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x18,%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x38(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x10,%rax
  or     %rax,-0x28(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x38(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x8,%rax
  or     %rax,-0x28(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x38(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  or     %rax,-0x28(%rbp)
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x38(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x18,%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x38(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x10,%rax
  or     %rax,-0x28(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x38(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x8,%rax
  or     %rax,-0x28(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x38(%rbp)
  movzbl (%rax),%eax
  movzbl %al,%eax
  or     %rax,-0x28(%rbp)
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x18(%rbp)
  cmpl   $0x0,-0x4c(%rbp)
  je     L14
  mov    -0x48(%rbp),%rdx
  lea    -0x20(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <BF_encrypt@plt>
  jmp    L15
L14:
  mov    -0x48(%rbp),%rdx
  lea    -0x20(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <BF_decrypt@plt>
L15:
  mov    -0x20(%rbp),%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x28(%rbp),%rax
  shr    $0x18,%rax
  mov    %rax,%rcx
  mov    -0x40(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x40(%rbp)
  mov    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x28(%rbp),%rax
  shr    $0x10,%rax
  mov    %rax,%rcx
  mov    -0x40(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x40(%rbp)
  mov    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x28(%rbp),%rax
  shr    $0x8,%rax
  mov    %rax,%rcx
  mov    -0x40(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x40(%rbp)
  mov    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x40(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x40(%rbp)
  mov    -0x28(%rbp),%rdx
  mov    %dl,(%rax)
  mov    -0x18(%rbp),%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x28(%rbp),%rax
  shr    $0x18,%rax
  mov    %rax,%rcx
  mov    -0x40(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x40(%rbp)
  mov    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x28(%rbp),%rax
  shr    $0x10,%rax
  mov    %rax,%rcx
  mov    -0x40(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x40(%rbp)
  mov    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x28(%rbp),%rax
  shr    $0x8,%rax
  mov    %rax,%rcx
  mov    -0x40(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x40(%rbp)
  mov    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x40(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x40(%rbp)
  mov    -0x28(%rbp),%rdx
  mov    %dl,(%rax)
  movq   $0x0,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  mov    %rax,-0x28(%rbp)
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L28
  call   <__stack_chk_fail@plt>
L28:
  leave
  ret
```

assistant: ```c
void BF_ecb_encrypt(const unsigned char *in, unsigned char *out, const BF_KEY *key, int encrypt) {
  BF_LONG l, d[2];
  (l = ((unsigned long)(*((in)++))) << 24L, l |= ((unsigned long)(*((in)++))) << 16L, l |= ((unsigned long)(*((in)++))) << 8L, l |= ((unsigned long)(*((in)++))));
  d[0] = l;
  (l = ((unsigned long)(*((in)++))) << 24L, l |= ((unsigned long)(*((in)++))) << 16L, l |= ((unsigned long)(*((in)++))) << 8L, l |= ((unsigned long)(*((in)++))));
  d[1] = l;
  if (encrypt)
    BF_encrypt(d, key);
  else
    BF_decrypt(d, key);
  l = d[0];
  (*((out)++) = (unsigned char)(((l) >> 24L) & 0xff), *((out)++) = (unsigned char)(((l) >> 16L) & 0xff), *((out)++) = (unsigned char)(((l) >> 8L) & 0xff), *((out)++) = (unsigned char)(((l)) & 0xff));
  l = d[1];
  (*((out)++) = (unsigned char)(((l) >> 24L) & 0xff), *((out)++) = (unsigned char)(((l) >> 16L) & 0xff), *((out)++) = (unsigned char)(((l) >> 8L) & 0xff), *((out)++) = (unsigned char)(((l)) & 0xff));
  l = d[0] = d[1] = 0;
}
```