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

```asm
<base64enc>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x8(%rbp)
  mov    %esi,-0xc(%rbp)
  mov    %rdx,-0x18(%rbp)
  mov    %ecx,-0x10(%rbp)
  jmp    L22
L213:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  shr    $0x2,%al
  movzbl %al,%eax
  and    $0x3f,%eax
  mov    %eax,%ecx
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  movslq %ecx,%rdx
  lea    D8(%rip),%rcx
  movzbl (%rdx,%rcx,1),%edx
  mov    %dl,(%rax)
  subl   $0x1,-0x10(%rbp)
  cmpl   $0x0,-0x10(%rbp)
  je     L6
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x4,%eax
  mov    %eax,%edx
  subl   $0x1,-0xc(%rbp)
  cmpl   $0x0,-0xc(%rbp)
  je     L182
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  shr    $0x4,%al
  movzbl %al,%eax
  jmp    L48
L182:
  mov    $0x0,%eax
L48:
  add    %edx,%eax
  and    $0x3f,%eax
  mov    %eax,%ecx
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  movslq %ecx,%rdx
  lea    D8(%rip),%rcx
  movzbl (%rdx,%rcx,1),%edx
  mov    %dl,(%rax)
  subl   $0x1,-0x10(%rbp)
  cmpl   $0x0,-0x10(%rbp)
  je     L206
  cmpl   $0x0,-0xc(%rbp)
  je     L42
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  lea    0x0(,%rax,4),%edx
  subl   $0x1,-0xc(%rbp)
  cmpl   $0x0,-0xc(%rbp)
  je     L113
  mov    -0x8(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  shr    $0x6,%al
  movzbl %al,%eax
  jmp    L9
L113:
  mov    $0x0,%eax
L9:
  add    %edx,%eax
  and    $0x3f,%eax
  cltq
  lea    D8(%rip),%rdx
  movzbl (%rax,%rdx,1),%edx
  jmp    L131
L42:
  mov    $0x3d,%edx
L131:
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,-0x18(%rbp)
  mov    %dl,(%rax)
  subl   $0x1,-0x10(%rbp)
  cmpl   $0x0,-0x10(%rbp)
  je     L183
  cmpl   $0x0,-0xc(%rbp)
  je     L127
  mov    -0x8(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  and    $0x3f,%eax
  cltq
  lea    D8(%rip),%rdx
  movzbl (%rax,%rdx,1),%edx
  jmp    L116
L127:
  mov    $0x3d,%edx
L116:
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,-0x18(%rbp)
  mov    %dl,(%rax)
  subl   $0x1,-0x10(%rbp)
  cmpl   $0x0,-0x10(%rbp)
  je     L118
  cmpl   $0x0,-0xc(%rbp)
  je     L135
  subl   $0x1,-0xc(%rbp)
L135:
  cmpl   $0x0,-0xc(%rbp)
  je     L22
  addq   $0x3,-0x8(%rbp)
L22:
  cmpl   $0x0,-0xc(%rbp)
  je     L121
  cmpl   $0x0,-0x10(%rbp)
  jne    L213
  jmp    L121
L6:
  nop
  jmp    L121
L206:
  nop
  jmp    L121
L183:
  nop
  jmp    L121
L118:
  nop
L121:
  cmpl   $0x0,-0x10(%rbp)
  je     L83
  mov    -0x18(%rbp),%rax
  movb   $0x0,(%rax)
L83:
  mov    $0x1,%eax
  pop    %rbp
  ret
```

assistant: ```c
int base64enc(const unsigned char *input, int length, char *output, int maxsize) {
  static const char b64str[64] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  while (length && maxsize) {
    *output++ = b64str[(input[0] >> 2) & 0x3f];
    if (!--maxsize)
      break;
    *output++ = b64str[((input[0] << 4) + (--length ? input[1] >> 4 : 0)) & 0x3f];
    if (!--maxsize)
      break;
    *output++ = (length ? b64str[((input[1] << 2) + (--length ? input[2] >> 6 : 0)) & 0x3f] : '=');
    if (!--maxsize)
      break;
    *output++ = length ? b64str[input[2] & 0x3f] : '=';
    if (!--maxsize)
      break;
    if (length)
      length--;
    if (length)
      input += 3;
  }
  if (maxsize)
    *output = '\0';
  return 1;
}
```