user: 这段汇编代码用C语言表示是什么样的：

```asm
<cec_ops_cdc_hec_set_state>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x8(%rbp)
  mov    %rsi,-0x10(%rbp)
  mov    %rdx,-0x18(%rbp)
  mov    %rcx,-0x20(%rbp)
  mov    %r8,-0x28(%rbp)
  mov    %r9,-0x30(%rbp)
  mov    -0x8(%rbp),%rax
  mov    (%rax),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  shl    $0x8,%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  mov    (%rax),%rax
  add    $0xc,%rax
  mov    (%rax),%eax
  or     %eax,%edx
  mov    -0x10(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x8(%rbp),%rax
  mov    (%rax),%rax
  add    $0x14,%rax
  mov    (%rax),%eax
  shl    $0x8,%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  mov    (%rax),%rax
  add    $0x18,%rax
  mov    (%rax),%eax
  or     %eax,%edx
  mov    -0x18(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x8(%rbp),%rax
  mov    (%rax),%rax
  add    $0x1c,%rax
  mov    (%rax),%eax
  shl    $0x8,%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  mov    (%rax),%rax
  add    $0x20,%rax
  mov    (%rax),%eax
  or     %eax,%edx
  mov    -0x20(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x8(%rbp),%rax
  mov    (%rax),%rax
  mov    0x24(%rax),%edx
  mov    -0x28(%rbp),%rax
  mov    %edx,(%rax)
  mov    D4(%rip),%rax
  mov    (%rax),%edx
  mov    0x18(%rbp),%rax
  mov    %edx,(%rax)
  mov    0x18(%rbp),%rax
  mov    (%rax),%edx
  mov    0x10(%rbp),%rax
  mov    %edx,(%rax)
  mov    0x10(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x30(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x8(%rbp),%rax
  mov    0x8(%rax),%eax
  cmp    $0xb,%eax
  jle    L29
  mov    -0x8(%rbp),%rax
  mov    (%rax),%rax
  add    $0x28,%rax
  mov    (%rax),%eax
  shl    $0x8,%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  mov    (%rax),%rax
  add    $0x2c,%rax
  mov    (%rax),%eax
  or     %eax,%edx
  mov    -0x30(%rbp),%rax
  mov    %edx,(%rax)
L29:
  mov    -0x8(%rbp),%rax
  mov    0x8(%rax),%eax
  cmp    $0xd,%eax
  jle    L12
  mov    -0x8(%rbp),%rax
  mov    (%rax),%rax
  add    $0x30,%rax
  mov    (%rax),%eax
  shl    $0x8,%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  mov    (%rax),%rax
  add    $0x34,%rax
  mov    (%rax),%eax
  or     %eax,%edx
  mov    0x10(%rbp),%rax
  mov    %edx,(%rax)
L12:
  mov    -0x8(%rbp),%rax
  mov    0x8(%rax),%eax
  cmp    $0xf,%eax
  jle    L4
  mov    -0x8(%rbp),%rax
  mov    (%rax),%rax
  add    $0x38,%rax
  mov    (%rax),%eax
  shl    $0x8,%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  mov    (%rax),%rax
  add    $0x3c,%rax
  mov    (%rax),%eax
  or     %eax,%edx
  mov    0x18(%rbp),%rax
  mov    %edx,(%rax)
L4:
  nop
  pop    %rbp
  ret
```

assistant: ```c
void cec_ops_cdc_hec_set_state(const struct cec_msg *msg, __u16 *phys_addr, __u16 *phys_addr1, __u16 *phys_addr2, __u8 *hec_set_state, __u16 *phys_addr3, __u16 *phys_addr4, __u16 *phys_addr5) {
  *phys_addr = (msg->msg[2] << 8) | msg->msg[3];
  *phys_addr1 = (msg->msg[5] << 8) | msg->msg[6];
  *phys_addr2 = (msg->msg[7] << 8) | msg->msg[8];
  *hec_set_state = msg->msg[9];
  *phys_addr3 = *phys_addr4 = *phys_addr5 = CEC_PHYS_ADDR_INVALID;
  if (msg->len >= 12)
    *phys_addr3 = (msg->msg[10] << 8) | msg->msg[11];
  if (msg->len >= 14)
    *phys_addr4 = (msg->msg[12] << 8) | msg->msg[13];
  if (msg->len >= 16)
    *phys_addr5 = (msg->msg[14] << 8) | msg->msg[15];
}
```