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

```asm
<decrypt_8bits>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x88(%rbp)
  mov    %rsi,-0x90(%rbp)
  mov    %edx,-0x94(%rbp)
  mov    %rcx,-0xa0(%rbp)
  mov    %r8d,-0x98(%rbp)
  mov    %r9d,-0xa4(%rbp)
  mov    -0x88(%rbp),%rax
  mov    (%rax),%rax
  shr    $0xc,%rax
  mov    %rax,-0x78(%rbp)
  mov    -0x88(%rbp),%rax
  add    $0x28,%rax
  mov    (%rax),%rax
  shr    $0x5,%rax
  mov    %rax,-0x70(%rbp)
  mov    -0x88(%rbp),%rax
  add    $0x28,%rax
  mov    (%rax),%rax
  shr    $0xe,%rax
  mov    %rax,-0x68(%rbp)
  mov    -0x88(%rbp),%rax
  mov    (%rax),%rax
  shr    $0x17,%rax
  mov    %rax,-0x60(%rbp)
  mov    -0x88(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rax
  shr    $0x6,%rax
  mov    %rax,-0x58(%rbp)
  mov    -0x88(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  shr    $0x4,%rax
  mov    %rax,-0x50(%rbp)
  mov    -0x88(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  shr    $0x5,%rax
  mov    %rax,-0x48(%rbp)
  mov    -0x88(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%rax
  shr    $0x3,%rax
  mov    %rax,-0x40(%rbp)
  mov    -0x88(%rbp),%rax
  add    $0x30,%rax
  mov    (%rax),%rcx
  mov    -0x88(%rbp),%rax
  add    $0x28,%rax
  mov    (%rax),%rax
  xor    -0x70(%rbp),%rax
  movzbl %al,%edx
  mov    -0x88(%rbp),%rax
  add    $0x30,%rax
  xor    %rcx,%rdx
  mov    %rdx,(%rax)
  mov    -0x88(%rbp),%rax
  add    $0x28,%rax
  mov    (%rax),%rcx
  mov    -0x88(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%rax
  xor    -0x40(%rbp),%rax
  movzbl %al,%edx
  mov    -0x88(%rbp),%rax
  add    $0x28,%rax
  xor    %rcx,%rdx
  mov    %rdx,(%rax)
  mov    -0x88(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%rcx
  mov    -0x88(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rax
  xor    -0x58(%rbp),%rax
  movzbl %al,%edx
  mov    -0x88(%rbp),%rax
  add    $0x20,%rax
  xor    %rcx,%rdx
  mov    %rdx,(%rax)
  mov    -0x88(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rcx
  mov    -0x88(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  xor    -0x50(%rbp),%rax
  movzbl %al,%edx
  mov    -0x88(%rbp),%rax
  add    $0x18,%rax
  xor    %rcx,%rdx
  mov    %rdx,(%rax)
  mov    -0x88(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rcx
  mov    -0x88(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  xor    -0x48(%rbp),%rax
  movzbl %al,%edx
  mov    -0x88(%rbp),%rax
  add    $0x10,%rax
  xor    %rcx,%rdx
  mov    %rdx,(%rax)
  mov    -0x88(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rcx
  mov    -0x88(%rbp),%rax
  mov    (%rax),%rax
  xor    -0x60(%rbp),%rax
  movzbl %al,%edx
  mov    -0x88(%rbp),%rax
  add    $0x8,%rax
  xor    %rcx,%rdx
  mov    %rdx,(%rax)
  mov    -0x88(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x38(%rbp)
  mov    -0x88(%rbp),%rax
  mov    0x10(%rax),%rax
  mov    %rax,-0x30(%rbp)
  mov    -0x88(%rbp),%rax
  mov    0x28(%rax),%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x88(%rbp),%rax
  mov    0x18(%rax),%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x88(%rbp),%rax
  mov    0x8(%rax),%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x88(%rbp),%rax
  mov    0x20(%rax),%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x88(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rax
  mov    %eax,%edx
  mov    -0x78(%rbp),%rax
  xor    %eax,%edx
  mov    -0x88(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    %eax,%ecx
  mov    -0x88(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%rax
  xor    %eax,%ecx
  mov    -0x70(%rbp),%rax
  and    %eax,%ecx
  mov    -0x88(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    %eax,%esi
  mov    -0x88(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%rax
  and    %esi,%eax
  xor    %ecx,%eax
  xor    %eax,%edx
  mov    -0xa0(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0xa0(%rbp),%rax
  mov    (%rax),%eax
  movzbl %al,%edx
  mov    -0xa0(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x88(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x88(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  mov    %rdx,%rcx
  xor    %rax,%rcx
  mov    -0x60(%rbp),%rax
  xor    -0x58(%rbp),%rax
  and    -0x68(%rbp),%rax
  mov    %rax,%rdx
  mov    -0x60(%rbp),%rax
  and    -0x58(%rbp),%rax
  xor    %rdx,%rax
  xor    %rax,%rcx
  mov    -0x88(%rbp),%rax
  add    $0x28,%rax
  mov    (%rax),%rax
  and    -0x50(%rbp),%rax
  mov    %rax,%rdx
  mov    -0x88(%rbp),%rax
  add    $0x28,%rax
  mov    (%rax),%rax
  not    %rax
  and    -0x48(%rbp),%rax
  xor    %rdx,%rax
  xor    %rax,%rcx
  mov    %rcx,%rdx
  mov    -0x98(%rbp),%eax
  and    -0x40(%rbp),%rax
  xor    %rax,%rdx
  mov    -0xa0(%rbp),%rax
  mov    (%rax),%eax
  and    -0xa4(%rbp),%eax
  mov    %eax,%eax
  xor    %rax,%rdx
  mov    $0xffffffff,%eax
  xor    %rdx,%rax
  mov    %rax,-0x8(%rbp)
  mov    -0xa0(%rbp),%rax
  mov    (%rax),%eax
  xor    -0x94(%rbp),%eax
  mov    %eax,%edx
  mov    -0x90(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x90(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,%eax
  xor    -0x8(%rbp),%rax
  and    $0xff,%eax
  mov    %rax,-0x8(%rbp)
  mov    -0x88(%rbp),%rax
  add    $0x30,%rax
  mov    (%rax),%rdx
  mov    -0x8(%rbp),%rax
  shl    $0x4,%rax
  mov    %rax,%rcx
  mov    -0x88(%rbp),%rax
  add    $0x30,%rax
  xor    %rcx,%rdx
  mov    %rdx,(%rax)
  mov    -0x88(%rbp),%rax
  mov    (%rax),%rax
  shr    $0x8,%rax
  mov    %rax,%rdx
  mov    -0x88(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  shl    $0x35,%rax
  mov    %rax,%rcx
  movabs $0x1fe0000000000000,%rax
  and    %rcx,%rax
  or     %rax,%rdx
  mov    -0x88(%rbp),%rax
  mov    %rdx,(%rax)
  mov    -0x88(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  shr    $0x8,%rax
  mov    %rax,%rcx
  mov    -0x88(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  shl    $0x26,%rax
  mov    %rax,%rdx
  movabs $0x3fc000000000,%rax
  and    %rax,%rdx
  mov    -0x88(%rbp),%rax
  add    $0x8,%rax
  or     %rcx,%rdx
  mov    %rdx,(%rax)
  mov    -0x88(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  shr    $0x8,%rax
  mov    %rax,%rcx
  mov    -0x88(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rax
  shl    $0x27,%rax
  mov    %rax,%rdx
  movabs $0x7f8000000000,%rax
  and    %rax,%rdx
  mov    -0x88(%rbp),%rax
  add    $0x10,%rax
  or     %rcx,%rdx
  mov    %rdx,(%rax)
  mov    -0x88(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rax
  shr    $0x8,%rax
  mov    %rax,%rcx
  mov    -0x88(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%rax
  shl    $0x1f,%rax
  mov    %rax,%rdx
  movabs $0x7f80000000,%rax
  and    %rax,%rdx
  mov    -0x88(%rbp),%rax
  add    $0x18,%rax
  or     %rcx,%rdx
  mov    %rdx,(%rax)
  mov    -0x88(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%rax
  shr    $0x8,%rax
  mov    %rax,%rcx
  mov    -0x88(%rbp),%rax
  add    $0x28,%rax
  mov    (%rax),%rax
  shl    $0x1d,%rax
  mov    %rax,%rdx
  movabs $0x1fe0000000,%rax
  and    %rax,%rdx
  mov    -0x88(%rbp),%rax
  add    $0x20,%rax
  or     %rcx,%rdx
  mov    %rdx,(%rax)
  mov    -0x88(%rbp),%rax
  add    $0x28,%rax
  mov    (%rax),%rax
  shr    $0x8,%rax
  mov    %rax,%rcx
  mov    -0x88(%rbp),%rax
  add    $0x30,%rax
  mov    (%rax),%rax
  shl    $0x33,%rax
  mov    %rax,%rdx
  movabs $0x7f8000000000000,%rax
  and    %rax,%rdx
  mov    -0x88(%rbp),%rax
  add    $0x28,%rax
  or     %rcx,%rdx
  mov    %rdx,(%rax)
  mov    -0x88(%rbp),%rax
  add    $0x30,%rax
  mov    (%rax),%rdx
  mov    -0x88(%rbp),%rax
  add    $0x30,%rax
  shr    $0x8,%rdx
  mov    %rdx,(%rax)
  nop
  leave
  ret
```

assistant: ```c
void decrypt_8bits(unsigned long long *state, unsigned int *plaintextword, unsigned int ciphertextword, unsigned int *ks, unsigned int ca, unsigned int cb) {
  unsigned long long f;
  unsigned long long word_244, word_23, word_160, word_111, word_66, word_196, word_0, word_107, word_230;
  unsigned long long word_12, word_154, word_235, word_61, word_193;
  word_12 = state[0] >> 12;
  word_235 = state[5] >> 5;
  word_244 = state[5] >> 14;
  word_23 = state[0] >> 23;
  word_160 = state[3] >> 6;
  word_111 = state[2] >> 4;
  word_66 = state[1] >> 5;
  word_196 = state[4] >> 3;
  state[6] ^= (state[5] ^ word_235) & 0xff;
  state[5] ^= (state[4] ^ word_196) & 0xff;
  state[4] ^= (state[3] ^ word_160) & 0xff;
  state[3] ^= (state[2] ^ word_111) & 0xff;
  state[2] ^= (state[1] ^ word_66) & 0xff;
  state[1] ^= (state[0] ^ word_23) & 0xff;
  word_0 = state[0];
  word_107 = state[2];
  word_230 = state[5];
  word_154 = state[3];
  word_61 = state[1];
  word_193 = state[4];
  *ks = word_12 ^ state[3] ^ (((word_235) & (state[1])) ^ ((word_235) & (state[4])) ^ ((state[1]) & (state[4])));
  *ks &= 0xff;
  f = state[0] ^ (state[2] ^ 0xffffffff) ^ (((word_244) & (word_23)) ^ ((word_244) & (word_160)) ^ ((word_23) & (word_160))) ^ (((state[5]) & (word_111)) ^ ((~state[5]) & (word_66))) ^ (word_196 & ca) ^ (cb & *ks);
  *plaintextword = ciphertextword ^ *ks;
  f = (f ^ *plaintextword) & 0xff;
  state[6] = state[6] ^ (f << 4);
  state[0] = (state[0] >> 8) | ((state[1] & 0xff) << (29 + 24));
  state[1] = (state[1] >> 8) | ((state[2] & 0xff) << (14 + 24));
  state[2] = (state[2] >> 8) | ((state[3] & 0xff) << (15 + 24));
  state[3] = (state[3] >> 8) | ((state[4] & 0xff) << (7 + 24));
  state[4] = (state[4] >> 8) | ((state[5] & 0xff) << (5 + 24));
  state[5] = (state[5] >> 8) | ((state[6] & 0xff) << (27 + 24));
  state[6] = state[6] >> 8;
  return;
}
```