user: Translate the below assembly code into C programming language:

```asm
<encrypt>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %rdx,-0x28(%rbp)
  mov    %ecx,-0x2c(%rbp)
  mov    %r8d,-0x30(%rbp)
  mov    %r9d,-0x34(%rbp)
  mov    -0x28(%rbp),%rdx
  mov    -0x20(%rbp),%rcx
  mov    -0x2c(%rbp),%eax
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <KeySchedule@plt>
  cmpl   $0x3e900,-0x2c(%rbp)
  je     L5
  cmpl   $0x3e900,-0x2c(%rbp)
  jg     L52
  cmpl   $0x3e8c0,-0x2c(%rbp)
  je     L220
  cmpl   $0x3e8c0,-0x2c(%rbp)
  jg     L52
  cmpl   $0x3e880,-0x2c(%rbp)
  je     L45
  cmpl   $0x3e880,-0x2c(%rbp)
  jg     L52
  cmpl   $0x2ef00,-0x2c(%rbp)
  je     L5
  cmpl   $0x2ef00,-0x2c(%rbp)
  jg     L52
  cmpl   $0x2eec0,-0x2c(%rbp)
  je     L62
  cmpl   $0x2eec0,-0x2c(%rbp)
  jg     L52
  cmpl   $0x2ee80,-0x2c(%rbp)
  je     L170
  cmpl   $0x2ee80,-0x2c(%rbp)
  jg     L52
  cmpl   $0x1f500,-0x2c(%rbp)
  je     L5
  cmpl   $0x1f500,-0x2c(%rbp)
  jg     L52
  cmpl   $0x1f480,-0x2c(%rbp)
  je     L193
  cmpl   $0x1f4c0,-0x2c(%rbp)
  je     L62
  jmp    L52
L193:
  movl   $0x0,-0x34(%rbp)
  movl   $0x4,-0x30(%rbp)
  jmp    L52
L170:
  movl   $0x2,-0x34(%rbp)
  movl   $0x4,-0x30(%rbp)
  jmp    L52
L45:
  movl   $0x4,-0x34(%rbp)
  movl   $0x4,-0x30(%rbp)
  jmp    L52
L62:
  movl   $0x2,-0x34(%rbp)
  movl   $0x6,-0x30(%rbp)
  jmp    L52
L220:
  movl   $0x4,-0x34(%rbp)
  movl   $0x6,-0x30(%rbp)
  jmp    L52
L5:
  movl   $0x4,-0x34(%rbp)
  movl   $0x8,-0x30(%rbp)
  nop
L52:
  mov    -0x2c(%rbp),%edx
  mov    -0x28(%rbp),%rsi
  mov    -0x18(%rbp),%rax
  mov    $0x0,%ecx
  mov    %rax,%rdi
  call   <AddRoundKey@plt>
  movl   $0x1,-0x4(%rbp)
  jmp    L215
L68:
  mov    -0x30(%rbp),%edx
  mov    -0x18(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <ByteSub_ShiftRow@plt>
  mov    -0x4(%rbp),%ecx
  mov    -0x28(%rbp),%rdx
  mov    -0x30(%rbp),%esi
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <MixColumn_AddRoundKey@plt>
  addl   $0x1,-0x4(%rbp)
L215:
  mov    -0x34(%rbp),%eax
  add    $0x9,%eax
  cmp    %eax,-0x4(%rbp)
  jle    L68
  mov    -0x30(%rbp),%edx
  mov    -0x18(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <ByteSub_ShiftRow@plt>
  mov    -0x4(%rbp),%ecx
  mov    -0x2c(%rbp),%edx
  mov    -0x28(%rbp),%rsi
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <AddRoundKey@plt>
  mov    $0x0,%eax
  leave
  ret
```

assistant: ```c
int encrypt(int statemt[32], int key[32], int word[4][120], int type, int nb, int round) {
  int i;
  KeySchedule(type, key, word);
  switch (type) {
  case 128128:
    round = 0;
    nb = 4;
    break;
  case 192128:
    round = 2;
    nb = 4;
    break;
  case 256128:
    round = 4;
    nb = 4;
    break;
  case 128192:
  case 192192:
    round = 2;
    nb = 6;
    break;
  case 256192:
    round = 4;
    nb = 6;
    break;
  case 128256:
  case 192256:
  case 256256:
    round = 4;
    nb = 8;
    break;
  }
  AddRoundKey(statemt, word, type, 0);
  for (i = 1; i <= round + 9; ++i) {
    ByteSub_ShiftRow(statemt, nb);
    MixColumn_AddRoundKey(statemt, nb, word, i);
  }
  ByteSub_ShiftRow(statemt, nb);
  AddRoundKey(statemt, word, type, i);
  return 0;
}
```