user: Demonstrate the C code that generates the assembly output below:

```asm
<motion_vectors>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x38,%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)
  cmpl   $0x1,-0x30(%rbp)
  jne    L12
  cmpl   $0x0,-0x34(%rbp)
  jne    L11
  cmpl   $0x0,0x20(%rbp)
  jne    L11
  mov    $0x1,%edi
  mov    $0x0,%eax
  call   <Get_Bits@plt>
  mov    -0x28(%rbp),%rdx
  mov    -0x2c(%rbp),%ecx
  movslq %ecx,%rcx
  mov    %eax,(%rdx,%rcx,4)
  mov    -0x28(%rbp),%rax
  lea    0x8(%rax),%rcx
  mov    -0x28(%rbp),%rax
  mov    -0x2c(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,4),%edx
  mov    -0x2c(%rbp),%eax
  cltq
  mov    %edx,(%rcx,%rax,4)
L11:
  mov    -0x2c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  lea    (%rdx,%rax,1),%rdi
  mov    0x28(%rbp),%esi
  mov    0x20(%rbp),%ecx
  mov    0x18(%rbp),%edx
  mov    -0x20(%rbp),%rax
  sub    $0x8,%rsp
  push   $0x0
  mov    %esi,%r9d
  mov    %ecx,%r8d
  mov    %edx,%ecx
  mov    0x10(%rbp),%edx
  mov    %rax,%rsi
  mov    $0x0,%eax
  call   <motion_vector@plt>
  add    $0x10,%rsp
  mov    -0x18(%rbp),%rax
  lea    0x10(%rax),%rcx
  mov    -0x18(%rbp),%rax
  mov    -0x2c(%rbp),%edx
  movslq %edx,%rdx
  mov    (%rax,%rdx,8),%edx
  mov    -0x2c(%rbp),%eax
  cltq
  mov    %edx,(%rcx,%rax,8)
  mov    -0x18(%rbp),%rax
  lea    0x10(%rax),%rcx
  mov    -0x18(%rbp),%rax
  mov    -0x2c(%rbp),%edx
  movslq %edx,%rdx
  mov    0x4(%rax,%rdx,8),%edx
  mov    -0x2c(%rbp),%eax
  cltq
  mov    %edx,0x4(%rcx,%rax,8)
  jmp    L8
L12:
  mov    $0x1,%edi
  mov    $0x0,%eax
  call   <Get_Bits@plt>
  mov    -0x28(%rbp),%rdx
  mov    -0x2c(%rbp),%ecx
  movslq %ecx,%rcx
  mov    %eax,(%rdx,%rcx,4)
  mov    -0x2c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  lea    (%rdx,%rax,1),%rdi
  mov    0x28(%rbp),%esi
  mov    0x20(%rbp),%ecx
  mov    0x18(%rbp),%edx
  mov    -0x20(%rbp),%rax
  sub    $0x8,%rsp
  push   $0x0
  mov    %esi,%r9d
  mov    %ecx,%r8d
  mov    %edx,%ecx
  mov    0x10(%rbp),%edx
  mov    %rax,%rsi
  mov    $0x0,%eax
  call   <motion_vector@plt>
  add    $0x10,%rsp
  mov    -0x28(%rbp),%rax
  lea    0x8(%rax),%rbx
  mov    $0x1,%edi
  mov    $0x0,%eax
  call   <Get_Bits@plt>
  mov    -0x2c(%rbp),%edx
  movslq %edx,%rdx
  mov    %eax,(%rbx,%rdx,4)
  mov    -0x18(%rbp),%rax
  lea    0x10(%rax),%rdx
  mov    -0x2c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    (%rdx,%rax,1),%rdi
  mov    0x28(%rbp),%esi
  mov    0x20(%rbp),%ecx
  mov    0x18(%rbp),%edx
  mov    -0x20(%rbp),%rax
  sub    $0x8,%rsp
  push   $0x0
  mov    %esi,%r9d
  mov    %ecx,%r8d
  mov    %edx,%ecx
  mov    0x10(%rbp),%edx
  mov    %rax,%rsi
  mov    $0x0,%eax
  call   <motion_vector@plt>
  add    $0x10,%rsp
L8:
  nop
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

assistant: ```c
void motion_vectors(PMV, dmvector, motion_vertical_field_select, s, motion_vector_count, mv_format, h_r_size, v_r_size, dmv, mvscale) int PMV[2][2][2];
int dmvector[2];
int motion_vertical_field_select[2][2];
int s, motion_vector_count, mv_format, h_r_size, v_r_size, dmv, mvscale;
{
  if (motion_vector_count == 1) {
    if (mv_format == 0 && !dmv) {
      motion_vertical_field_select[1][s] = motion_vertical_field_select[0][s] = Get_Bits(1);
    }
    motion_vector(PMV[0][s], dmvector, h_r_size, v_r_size, dmv, mvscale, 0);
    PMV[1][s][0] = PMV[0][s][0];
    PMV[1][s][1] = PMV[0][s][1];
  } else {
    motion_vertical_field_select[0][s] = Get_Bits(1);
    motion_vector(PMV[0][s], dmvector, h_r_size, v_r_size, dmv, mvscale, 0);
    motion_vertical_field_select[1][s] = Get_Bits(1);
    motion_vector(PMV[1][s], dmvector, h_r_size, v_r_size, dmv, mvscale, 0);
  }
}
```