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

```asm
<Thrd_motion_vectors>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    %edi,%r12d
  mov    %rsi,%rbp
  mov    %rdx,%r13
  mov    %rcx,%r14
  mov    %r8d,%ebx
  cmp    $0x1,%r9d
  jne    L35
  mov    0x58(%rsp),%eax
  or     0x40(%rsp),%eax
  je     L4
L30:
  movslq %ebx,%rbx
  lea    0x0(%rbp,%rbx,8),%rsi
  push   $0x0
  mov    0x68(%rsp),%eax
  push   %rax
  mov    0x68(%rsp),%r9d
  mov    0x60(%rsp),%r8d
  mov    0x58(%rsp),%ecx
  mov    %r13,%rdx
  mov    %r12d,%edi
  mov    $0x0,%eax
  call   <Thrd_motion_vector@plt>
  mov    0x0(%rbp,%rbx,8),%eax
  mov    %eax,0x10(%rbp,%rbx,8)
  mov    0x4(%rbp,%rbx,8),%eax
  mov    %eax,0x14(%rbp,%rbx,8)
  add    $0x10,%rsp
L6:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L4:
  mov    $0x1,%esi
  mov    $0x0,%eax
  call   <Thrd_Get_Bits@plt>
  movslq %ebx,%rdx
  mov    %eax,(%r14,%rdx,4)
  mov    %eax,0x8(%r14,%rdx,4)
  jmp    L30
L35:
  mov    $0x1,%esi
  mov    $0x0,%eax
  call   <Thrd_Get_Bits@plt>
  movslq %ebx,%rbx
  mov    %eax,(%r14,%rbx,4)
  lea    0x0(,%rbx,8),%r15
  lea    0x0(%rbp,%r15,1),%rsi
  push   $0x0
  mov    0x68(%rsp),%eax
  push   %rax
  mov    0x68(%rsp),%r9d
  mov    0x60(%rsp),%r8d
  mov    0x58(%rsp),%ecx
  mov    %r13,%rdx
  mov    %r12d,%edi
  mov    $0x0,%eax
  call   <Thrd_motion_vector@plt>
  mov    $0x1,%esi
  mov    %r12d,%edi
  mov    $0x0,%eax
  call   <Thrd_Get_Bits@plt>
  mov    %eax,0x8(%r14,%rbx,4)
  lea    0x10(%rbp,%r15,1),%rsi
  push   $0x0
  mov    0x78(%rsp),%eax
  push   %rax
  mov    0x78(%rsp),%r9d
  mov    0x70(%rsp),%r8d
  mov    0x68(%rsp),%ecx
  mov    %r13,%rdx
  mov    %r12d,%edi
  mov    $0x0,%eax
  call   <Thrd_motion_vector@plt>
  add    $0x20,%rsp
  jmp    L6
```

assistant: ```c
void Thrd_motion_vectors(signed int t, signed int (*PMV)[2l][2l], signed int *dmvector, signed int (*motion_vertical_field_select)[2l], signed int s, signed int motion_vector_count, signed int mv_format, signed int h_r_size, signed int v_r_size, signed int dmv, signed int mvscale) {
  if (motion_vector_count == 1) {
    if (mv_format == 0) {
      if (dmv == 0) {
        unsigned int return_value_Thrd_Get_Bits$1;
        return_value_Thrd_Get_Bits$1 = Thrd_Get_Bits(t, 1);
        motion_vertical_field_select[(signed long int)0][(signed long int)s] = (signed int)return_value_Thrd_Get_Bits$1;
        motion_vertical_field_select[(signed long int)1][(signed long int)s] = motion_vertical_field_select[(signed long int)0][(signed long int)s];
      }
    }
    Thrd_motion_vector(t, PMV[(signed long int)0][(signed long int)s], dmvector, h_r_size, v_r_size, dmv, mvscale, 0);
    PMV[(signed long int)1][(signed long int)s][(signed long int)0] = PMV[(signed long int)0][(signed long int)s][(signed long int)0];
    PMV[(signed long int)1][(signed long int)s][(signed long int)1] = PMV[(signed long int)0][(signed long int)s][(signed long int)1];
  } else {
    unsigned int return_value_Thrd_Get_Bits$2;
    return_value_Thrd_Get_Bits$2 = Thrd_Get_Bits(t, 1);
    motion_vertical_field_select[(signed long int)0][(signed long int)s] = (signed int)return_value_Thrd_Get_Bits$2;
    Thrd_motion_vector(t, PMV[(signed long int)0][(signed long int)s], dmvector, h_r_size, v_r_size, dmv, mvscale, 0);
    unsigned int return_value_Thrd_Get_Bits$3;
    return_value_Thrd_Get_Bits$3 = Thrd_Get_Bits(t, 1);
    motion_vertical_field_select[(signed long int)1][(signed long int)s] = (signed int)return_value_Thrd_Get_Bits$3;
    Thrd_motion_vector(t, PMV[(signed long int)1][(signed long int)s], dmvector, h_r_size, v_r_size, dmv, mvscale, 0);
  }
}
```