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

```asm
<KeyExpansion>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x90,%rsp
  mov    %rdi,-0x78(%rbp)
  mov    %rsi,-0x80(%rbp)
  mov    %edx,-0x84(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x4,-0x54(%rbp)
  movl   $0x1,-0x50(%rbp)
  movl   $0x2,-0x4c(%rbp)
  movl   $0x4,-0x48(%rbp)
  movl   $0x8,-0x44(%rbp)
  movl   $0x10,-0x40(%rbp)
  movl   $0x20,-0x3c(%rbp)
  movl   $0x40,-0x38(%rbp)
  movl   $0x80,-0x34(%rbp)
  movl   $0x1b,-0x30(%rbp)
  movl   $0x36,-0x2c(%rbp)
  movl   $0x6c,-0x28(%rbp)
  movl   $0xd8,-0x24(%rbp)
  movl   $0xab,-0x20(%rbp)
  movl   $0x4d,-0x1c(%rbp)
  movl   $0x9a,-0x18(%rbp)
  cmpl   $0x100,-0x84(%rbp)
  je     L119
  cmpl   $0x100,-0x84(%rbp)
  jg     L123
  cmpl   $0x80,-0x84(%rbp)
  je     L69
  cmpl   $0xc0,-0x84(%rbp)
  je     L63
  jmp    L123
L69:
  movl   $0xa,-0x64(%rbp)
  movl   $0x4,-0x60(%rbp)
  jmp    L103
L63:
  movl   $0xc,-0x64(%rbp)
  movl   $0x6,-0x60(%rbp)
  jmp    L103
L119:
  movl   $0xe,-0x64(%rbp)
  movl   $0x8,-0x60(%rbp)
  nop
L103:
  movl   $0x0,-0x5c(%rbp)
  jmp    L96
L159:
  mov    -0x5c(%rbp),%eax
  shl    $0x2,%eax
  movslq %eax,%rdx
  mov    -0x78(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x5c(%rbp),%eax
  shl    $0x2,%eax
  cltq
  lea    0x1(%rax),%rcx
  mov    -0x78(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x8,%eax
  or     %eax,%edx
  mov    -0x5c(%rbp),%eax
  shl    $0x2,%eax
  cltq
  lea    0x2(%rax),%rcx
  mov    -0x78(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x10,%eax
  or     %eax,%edx
  mov    -0x5c(%rbp),%eax
  shl    $0x2,%eax
  cltq
  lea    0x3(%rax),%rcx
  mov    -0x78(%rbp),%rax
  add    %rcx,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x18,%eax
  or     %eax,%edx
  mov    -0x5c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x80(%rbp),%rax
  add    %rcx,%rax
  mov    %edx,(%rax)
  addl   $0x1,-0x5c(%rbp)
L96:
  mov    -0x5c(%rbp),%eax
  cmp    -0x60(%rbp),%eax
  jl     L159
  mov    -0x60(%rbp),%eax
  mov    %eax,-0x5c(%rbp)
  jmp    L15
L11:
  mov    -0x5c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x58(%rbp)
  mov    -0x5c(%rbp),%eax
  cltd
  idivl  -0x60(%rbp)
  mov    %edx,%eax
  test   %eax,%eax
  jne    L39
  rorl   $0x8,-0x58(%rbp)
  mov    -0x58(%rbp),%eax
  mov    %eax,%edi
  call   <SubWord@plt>
  mov    %eax,-0x58(%rbp)
  mov    -0x5c(%rbp),%eax
  sub    $0x1,%eax
  cltd
  idivl  -0x60(%rbp)
  cltq
  mov    -0x50(%rbp,%rax,4),%eax
  xor    %eax,-0x58(%rbp)
  jmp    L33
L39:
  cmpl   $0x6,-0x60(%rbp)
  jle    L33
  mov    -0x5c(%rbp),%eax
  cltd
  idivl  -0x60(%rbp)
  mov    %edx,%eax
  cmp    $0x4,%eax
  jne    L33
  mov    -0x58(%rbp),%eax
  mov    %eax,%edi
  call   <SubWord@plt>
  mov    %eax,-0x58(%rbp)
L33:
  mov    -0x5c(%rbp),%eax
  sub    -0x60(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    -0x5c(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x80(%rbp),%rdx
  add    %rcx,%rdx
  xor    -0x58(%rbp),%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0x5c(%rbp)
L15:
  mov    -0x64(%rbp),%eax
  add    $0x1,%eax
  imul   -0x54(%rbp),%eax
  cmp    %eax,-0x5c(%rbp)
  jl     L11
  jmp    L106
L123:
  nop
L106:
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L61
  call   <__stack_chk_fail@plt>
L61:
  leave
  ret
```

assistant: ```c
void KeyExpansion(unsigned char key[], unsigned int w[], int keysize) {
  int Nb = 4, Nr, Nk, idx;
  unsigned int temp, Rcon[] = {0x00000001, 0x00000002, 0x00000004, 0x00000008, 0x00000010, 0x00000020, 0x00000040, 0x00000080, 0x0000001b, 0x00000036, 0x0000006c, 0x000000d8, 0x000000ab, 0x0000004d, 0x0000009a};
  switch (keysize) {
  case 128:
    Nr = 10;
    Nk = 4;
    break;
  case 192:
    Nr = 12;
    Nk = 6;
    break;
  case 256:
    Nr = 14;
    Nk = 8;
    break;
  default:
    return;
  }
  for (idx = 0; idx < Nk; ++idx) {
    w[idx] = ((key[4 * idx])) | ((key[4 * idx + 1]) << 8) | ((key[4 * idx + 2]) << 16) | ((key[4 * idx + 3]) << 24);
  }
  for (idx = Nk; idx < Nb * (Nr + 1); ++idx) {
    temp = w[idx - 1];
    if ((idx % Nk) == 0) {
      temp = (((temp) >> 8) | ((temp) << 24));
      temp = SubWord(temp);
      temp ^= Rcon[(idx - 1) / Nk];
    } else if (Nk > 6 && (idx % Nk) == 4)
      temp = SubWord(temp);
    w[idx] = w[idx - Nk] ^ temp;
  }
}
```