user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<set_mux_control>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %edi,-0x4(%rbp)
  cmpl   $0x6,-0x4(%rbp)
  ja     L60
  mov    -0x4(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  lea    D12(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D12(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    $0x481ac13c,%eax
  mov    (%rax),%eax
  mov    $0x481ac13c,%edx
  and    $0xff7fffff,%eax
  mov    %eax,(%rdx)
  mov    $0x481ac13c,%eax
  mov    (%rax),%eax
  mov    $0x481ac13c,%edx
  and    $0xfeffffff,%eax
  mov    %eax,(%rdx)
  mov    $0x481ac13c,%eax
  mov    (%rax),%eax
  mov    $0x481ac13c,%edx
  and    $0xffbfffff,%eax
  mov    %eax,(%rdx)
  jmp    L1
  mov    $0x481ac13c,%eax
  mov    (%rax),%eax
  mov    $0x481ac13c,%edx
  and    $0xff7fffff,%eax
  mov    %eax,(%rdx)
  mov    $0x481ac13c,%eax
  mov    (%rax),%eax
  mov    $0x481ac13c,%edx
  and    $0xfeffffff,%eax
  mov    %eax,(%rdx)
  mov    $0x481ac13c,%eax
  mov    (%rax),%eax
  mov    $0x481ac13c,%edx
  or     $0x400000,%eax
  mov    %eax,(%rdx)
  jmp    L1
  mov    $0x481ac13c,%eax
  mov    (%rax),%eax
  mov    $0x481ac13c,%edx
  and    $0xff7fffff,%eax
  mov    %eax,(%rdx)
  mov    $0x481ac13c,%eax
  mov    (%rax),%eax
  mov    $0x481ac13c,%edx
  or     $0x1000000,%eax
  mov    %eax,(%rdx)
  mov    $0x481ac13c,%eax
  mov    (%rax),%eax
  mov    $0x481ac13c,%edx
  and    $0xffbfffff,%eax
  mov    %eax,(%rdx)
  jmp    L1
  mov    $0x481ac13c,%eax
  mov    (%rax),%eax
  mov    $0x481ac13c,%edx
  and    $0xff7fffff,%eax
  mov    %eax,(%rdx)
  mov    $0x481ac13c,%eax
  mov    (%rax),%eax
  mov    $0x481ac13c,%edx
  or     $0x1000000,%eax
  mov    %eax,(%rdx)
  mov    $0x481ac13c,%eax
  mov    (%rax),%eax
  mov    $0x481ac13c,%edx
  or     $0x400000,%eax
  mov    %eax,(%rdx)
  jmp    L1
  mov    $0x481ac13c,%eax
  mov    (%rax),%eax
  mov    $0x481ac13c,%edx
  or     $0x800000,%eax
  mov    %eax,(%rdx)
  mov    $0x481ac13c,%eax
  mov    (%rax),%eax
  mov    $0x481ac13c,%edx
  and    $0xfeffffff,%eax
  mov    %eax,(%rdx)
  mov    $0x481ac13c,%eax
  mov    (%rax),%eax
  mov    $0x481ac13c,%edx
  and    $0xffbfffff,%eax
  mov    %eax,(%rdx)
  jmp    L1
  mov    $0x481ac13c,%eax
  mov    (%rax),%eax
  mov    $0x481ac13c,%edx
  or     $0x800000,%eax
  mov    %eax,(%rdx)
  mov    $0x481ac13c,%eax
  mov    (%rax),%eax
  mov    $0x481ac13c,%edx
  and    $0xfeffffff,%eax
  mov    %eax,(%rdx)
  mov    $0x481ac13c,%eax
  mov    (%rax),%eax
  mov    $0x481ac13c,%edx
  or     $0x400000,%eax
  mov    %eax,(%rdx)
  jmp    L1
  mov    $0x481ac13c,%eax
  mov    (%rax),%eax
  mov    $0x481ac13c,%edx
  or     $0x800000,%eax
  mov    %eax,(%rdx)
  mov    $0x481ac13c,%eax
  mov    (%rax),%eax
  mov    $0x481ac13c,%edx
  or     $0x1000000,%eax
  mov    %eax,(%rdx)
  mov    $0x481ac13c,%eax
  mov    (%rax),%eax
  mov    $0x481ac13c,%edx
  and    $0xffbfffff,%eax
  mov    %eax,(%rdx)
  jmp    L1
L60:
  mov    $0x481ac13c,%eax
  mov    (%rax),%eax
  mov    $0x481ac13c,%edx
  or     $0x800000,%eax
  mov    %eax,(%rdx)
  mov    $0x481ac13c,%eax
  mov    (%rax),%eax
  mov    $0x481ac13c,%edx
  or     $0x1000000,%eax
  mov    %eax,(%rdx)
  mov    $0x481ac13c,%eax
  mov    (%rax),%eax
  mov    $0x481ac13c,%edx
  or     $0x400000,%eax
  mov    %eax,(%rdx)
  nop
L1:
  nop
  pop    %rbp
  ret
```

assistant: ```c
void set_mux_control(unsigned int ctl) {
  switch (ctl) {
  case 0:
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) &= ~(1 << 23);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) &= ~(1 << 24);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) &= ~(1 << 22);
    break;
  case 1:
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) &= ~(1 << 23);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) &= ~(1 << 24);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) |= (1 << 22);
    break;
  case 2:
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) &= ~(1 << 23);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) |= (1 << 24);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) &= ~(1 << 22);
    break;
  case 3:
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) &= ~(1 << 23);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) |= (1 << 24);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) |= (1 << 22);
    break;
  case 4:
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) |= (1 << 23);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) &= ~(1 << 24);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) &= ~(1 << 22);
    break;
  case 5:
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) |= (1 << 23);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) &= ~(1 << 24);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) |= (1 << 22);
    break;
  case 6:
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) |= (1 << 23);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) |= (1 << 24);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) &= ~(1 << 22);
    break;
  default:
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) |= (1 << 23);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) |= (1 << 24);
    (*((volatile unsigned int *)(0x481ac000 + 0x13c))) |= (1 << 22);
    break;
  }
}
```