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

```asm
<aes_expandEncKey>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  mov    %rdi,-0x10(%rbp)
  mov    %rsi,-0x18(%rbp)
  mov    %rdx,-0x20(%rbp)
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%edx
  mov    -0x10(%rbp),%rax
  add    $0x1d,%rax
  movzbl (%rax),%eax
  movzbl %al,%ecx
  mov    -0x20(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%ecx
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  xor    %ecx,%eax
  xor    %eax,%edx
  mov    -0x10(%rbp),%rax
  mov    %dl,(%rax)
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%ecx
  mov    -0x10(%rbp),%rax
  add    $0x1e,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x10(%rbp),%rax
  add    $0x1,%rax
  xor    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x10(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%ecx
  mov    -0x10(%rbp),%rax
  add    $0x1f,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x10(%rbp),%rax
  add    $0x2,%rax
  xor    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x10(%rbp),%rax
  add    $0x3,%rax
  movzbl (%rax),%ecx
  mov    -0x10(%rbp),%rax
  add    $0x1c,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x10(%rbp),%rax
  add    $0x3,%rax
  xor    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  add    %eax,%eax
  mov    %eax,%ecx
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  shr    $0x7,%al
  mov    %eax,%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  lea    0x0(,%rax,8),%edx
  add    %edx,%eax
  xor    %ecx,%eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%rax
  mov    %dl,(%rax)
  mov    $0x4,%ebx
  jmp    L30
L31:
  movzbl %bl,%edx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%ecx
  movzbl %bl,%eax
  lea    -0x4(%rax),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  movzbl %bl,%esi
  mov    -0x10(%rbp),%rax
  add    %rsi,%rax
  xor    %ecx,%edx
  mov    %dl,(%rax)
  movzbl %bl,%eax
  lea    0x1(%rax),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%ecx
  movzbl %bl,%eax
  lea    -0x3(%rax),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  movzbl %bl,%eax
  lea    0x1(%rax),%rsi
  mov    -0x10(%rbp),%rax
  add    %rsi,%rax
  xor    %ecx,%edx
  mov    %dl,(%rax)
  movzbl %bl,%eax
  lea    0x2(%rax),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%ecx
  movzbl %bl,%eax
  lea    -0x2(%rax),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  movzbl %bl,%eax
  lea    0x2(%rax),%rsi
  mov    -0x10(%rbp),%rax
  add    %rsi,%rax
  xor    %ecx,%edx
  mov    %dl,(%rax)
  movzbl %bl,%eax
  lea    0x3(%rax),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%ecx
  movzbl %bl,%eax
  lea    -0x1(%rax),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  movzbl %bl,%eax
  lea    0x3(%rax),%rsi
  mov    -0x10(%rbp),%rax
  add    %rsi,%rax
  xor    %ecx,%edx
  mov    %dl,(%rax)
  add    $0x4,%ebx
L30:
  cmp    $0xf,%bl
  jbe    L31
  mov    -0x10(%rbp),%rax
  add    $0x10,%rax
  movzbl (%rax),%ecx
  mov    -0x10(%rbp),%rax
  add    $0xc,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x10(%rbp),%rax
  add    $0x10,%rax
  xor    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x10(%rbp),%rax
  add    $0x11,%rax
  movzbl (%rax),%ecx
  mov    -0x10(%rbp),%rax
  add    $0xd,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x10(%rbp),%rax
  add    $0x11,%rax
  xor    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x10(%rbp),%rax
  add    $0x12,%rax
  movzbl (%rax),%ecx
  mov    -0x10(%rbp),%rax
  add    $0xe,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x10(%rbp),%rax
  add    $0x12,%rax
  xor    %ecx,%edx
  mov    %dl,(%rax)
  mov    -0x10(%rbp),%rax
  add    $0x13,%rax
  movzbl (%rax),%ecx
  mov    -0x10(%rbp),%rax
  add    $0xf,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  mov    -0x10(%rbp),%rax
  add    $0x13,%rax
  xor    %ecx,%edx
  mov    %dl,(%rax)
  mov    $0x14,%ebx
  jmp    L24
L21:
  movzbl %bl,%edx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%ecx
  movzbl %bl,%eax
  lea    -0x4(%rax),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  movzbl %bl,%esi
  mov    -0x10(%rbp),%rax
  add    %rsi,%rax
  xor    %ecx,%edx
  mov    %dl,(%rax)
  movzbl %bl,%eax
  lea    0x1(%rax),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%ecx
  movzbl %bl,%eax
  lea    -0x3(%rax),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  movzbl %bl,%eax
  lea    0x1(%rax),%rsi
  mov    -0x10(%rbp),%rax
  add    %rsi,%rax
  xor    %ecx,%edx
  mov    %dl,(%rax)
  movzbl %bl,%eax
  lea    0x2(%rax),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%ecx
  movzbl %bl,%eax
  lea    -0x2(%rax),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  movzbl %bl,%eax
  lea    0x2(%rax),%rsi
  mov    -0x10(%rbp),%rax
  add    %rsi,%rax
  xor    %ecx,%edx
  mov    %dl,(%rax)
  movzbl %bl,%eax
  lea    0x3(%rax),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%ecx
  movzbl %bl,%eax
  lea    -0x1(%rax),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  movzbl %bl,%eax
  lea    0x3(%rax),%rsi
  mov    -0x10(%rbp),%rax
  add    %rsi,%rax
  xor    %ecx,%edx
  mov    %dl,(%rax)
  add    $0x4,%ebx
L24:
  cmp    $0x1f,%bl
  jbe    L21
  nop
  nop
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

assistant: ```c
void aes_expandEncKey(unsigned char *k, unsigned char *rc, const unsigned char *sb) {
  register unsigned char i;
  k[0] ^= sb[k[29]] ^ (*rc);
  k[1] ^= sb[k[30]];
  k[2] ^= sb[k[31]];
  k[3] ^= sb[k[28]];
  *rc = (((*rc) << 1) ^ ((((*rc) >> 7) & 1) * 0x1b));
  for (i = 4; i < 16; i += 4) {
    k[i] ^= k[i - 4];
    k[i + 1] ^= k[i - 3];
    k[i + 2] ^= k[i - 2];
    k[i + 3] ^= k[i - 1];
  }
  k[16] ^= sb[k[12]];
  k[17] ^= sb[k[13]];
  k[18] ^= sb[k[14]];
  k[19] ^= sb[k[15]];
  for (i = 20; i < 32; i += 4) {
    k[i] ^= k[i - 4];
    k[i + 1] ^= k[i - 3];
    k[i + 2] ^= k[i - 2];
    k[i + 3] ^= k[i - 1];
  }
}
```