user: 这段汇编代码用C语言表示是什么样的?

```asm
<aesEncrypt>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x1e0,%rsp
  mov    %rdi,-0x1c8(%rbp)
  mov    %esi,-0x1cc(%rbp)
  mov    %rdx,-0x1d8(%rbp)
  mov    %ecx,-0x1d0(%rbp)
  mov    %r8,-0x1e0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x1cc(%rbp),%eax
  mov    %eax,-0x1ac(%rbp)
  mov    -0x1e0(%rbp),%rcx
  lea    -0x40(%rbp),%rax
  mov    $0x10,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  lea    -0x40(%rbp),%rcx
  lea    -0x1a0(%rbp),%rax
  mov    $0x80,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <aesSetupEncrypt@plt>
  mov    %eax,-0x1a8(%rbp)
  jmp    L52
L13:
  movl   $0x0,-0x1b0(%rbp)
  jmp    L101
L89:
  cmpl   $0x0,-0x1d0(%rbp)
  je     L86
  mov    -0x1d8(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x1d8(%rbp)
  movzbl (%rax),%edx
  mov    -0x1b0(%rbp),%eax
  mov    %dl,-0x30(%rbp,%rax,1)
  subl   $0x1,-0x1d0(%rbp)
  addl   $0x1,-0x1b0(%rbp)
L101:
  cmpl   $0xf,-0x1b0(%rbp)
  jbe    L89
  jmp    L10
L86:
  nop
L10:
  mov    -0x1b0(%rbp),%eax
  mov    %eax,%edx
  mov    $0x10,%eax
  sub    %edx,%eax
  mov    %al,-0x1b1(%rbp)
  mov    -0x1b0(%rbp),%eax
  mov    %eax,-0x1a4(%rbp)
  jmp    L75
L88:
  movzbl -0x1b1(%rbp),%edx
  mov    -0x1b0(%rbp),%eax
  mov    %dl,-0x30(%rbp,%rax,1)
  addl   $0x1,-0x1b0(%rbp)
L75:
  cmpl   $0xf,-0x1b0(%rbp)
  jbe    L88
  lea    -0x20(%rbp),%rcx
  lea    -0x30(%rbp),%rdx
  mov    -0x1a8(%rbp),%esi
  lea    -0x1a0(%rbp),%rax
  mov    %rax,%rdi
  call   <aesDoEncrypt@plt>
  cmpl   $0xf,-0x1cc(%rbp)
  jg     L97
  mov    $0xffffffff,%eax
  jmp    L98
L97:
  lea    -0x20(%rbp),%rcx
  mov    -0x1c8(%rbp),%rax
  mov    $0x10,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  addq   $0x10,-0x1c8(%rbp)
  subl   $0x10,-0x1cc(%rbp)
  cmpl   $0x10,-0x1a4(%rbp)
  jne    L52
  cmpl   $0x0,-0x1d0(%rbp)
  jne    L52
  lea    -0x30(%rbp),%rax
  mov    $0x10,%edx
  mov    $0x10,%esi
  mov    %rax,%rdi
  call   <memset@plt>
  lea    -0x20(%rbp),%rcx
  lea    -0x30(%rbp),%rdx
  mov    -0x1a8(%rbp),%esi
  lea    -0x1a0(%rbp),%rax
  mov    %rax,%rdi
  call   <aesDoEncrypt@plt>
  cmpl   $0xf,-0x1cc(%rbp)
  jg     L118
  mov    $0xffffffff,%eax
  jmp    L98
L118:
  lea    -0x20(%rbp),%rcx
  mov    -0x1c8(%rbp),%rax
  mov    $0x10,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  addq   $0x10,-0x1c8(%rbp)
  subl   $0x10,-0x1cc(%rbp)
L52:
  cmpl   $0x0,-0x1d0(%rbp)
  jne    L13
  mov    -0x1ac(%rbp),%eax
  sub    -0x1cc(%rbp),%eax
L98:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L60
  call   <__stack_chk_fail@plt>
L60:
  leave
  ret
```

assistant: ```c
int aesEncrypt(unsigned char *output, int outlen, unsigned char *input, int inlen, unsigned char *password) {
  unsigned long rk[((128) / 8 + 28)];
  unsigned char key[((128) / 8)];
  int nrounds;
  int totalout = outlen;
  memcpy(key, password, 16);
  nrounds = aesSetupEncrypt(rk, key, 128);
  while (inlen) {
    unsigned char plaintext[16];
    unsigned char ciphertext[16];
    unsigned int j;
    for (j = 0; j < 16; j++) {
      if (inlen) {
        plaintext[j] = *input++;
        inlen--;
      } else
        break;
    }
    char c = 16 - j;
    unsigned int orig_block_size = j;
    for (; j < 16; j++)
      plaintext[j] = c;
    aesDoEncrypt(rk, nrounds, plaintext, ciphertext);
    if (outlen < 16)
      return -1;
    memcpy(output, ciphertext, 16);
    output += 16;
    outlen -= 16;
    if (orig_block_size == 16 && inlen == 0) {
      memset(plaintext, 16, 16);
      aesDoEncrypt(rk, nrounds, plaintext, ciphertext);
      if (outlen < 16)
        return -1;
      memcpy(output, ciphertext, 16);
      output += 16;
      outlen -= 16;
    }
  }
  return totalout - outlen;
}
```