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

```asm
<motion_vector>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x48,%rsp
  mov    %rdi,-0x38(%rbp)
  mov    %rsi,-0x40(%rbp)
  mov    %edx,-0x44(%rbp)
  mov    %ecx,-0x48(%rbp)
  mov    %r8d,-0x4c(%rbp)
  mov    %r9d,-0x50(%rbp)
  mov    $0x0,%eax
  call   <Get_motion_code@plt>
  mov    %eax,-0x20(%rbp)
  cmpl   $0x0,-0x44(%rbp)
  je     L34
  cmpl   $0x0,-0x20(%rbp)
  je     L13
  mov    -0x44(%rbp),%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <Get_Bits@plt>
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%eax
  mov    %eax,-0x28(%rbp)
  jmp    L3
L34:
  nop
  jmp    L0
L13:
  nop
L0:
  movl   $0x0,-0x28(%rbp)
L3:
  mov    -0x28(%rbp),%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x18(%rbp),%ecx
  mov    -0x20(%rbp),%edx
  mov    -0x44(%rbp),%esi
  mov    -0x38(%rbp),%rax
  mov    0x10(%rbp),%r8d
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <decode_motion_vector@plt>
  cmpl   $0x0,-0x4c(%rbp)
  je     L17
  mov    $0x0,%eax
  call   <Get_dmvector@plt>
  mov    -0x40(%rbp),%rdx
  mov    %eax,(%rdx)
L17:
  mov    $0x0,%eax
  call   <Get_motion_code@plt>
  mov    %eax,-0x20(%rbp)
  cmpl   $0x0,-0x48(%rbp)
  je     L114
  cmpl   $0x0,-0x20(%rbp)
  je     L22
  mov    -0x48(%rbp),%eax
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <Get_Bits@plt>
  mov    %eax,-0x14(%rbp)
  mov    -0x14(%rbp),%eax
  mov    %eax,-0x24(%rbp)
  jmp    L28
L114:
  nop
  jmp    L18
L22:
  nop
L18:
  movl   $0x0,-0x24(%rbp)
L28:
  mov    -0x24(%rbp),%eax
  mov    %eax,-0x18(%rbp)
  cmpl   $0x0,-0x50(%rbp)
  je     L109
  mov    -0x38(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x38(%rbp),%rax
  add    $0x4,%rax
  sar    %edx
  mov    %edx,(%rax)
L109:
  mov    -0x38(%rbp),%rax
  lea    0x4(%rax),%rdi
  mov    -0x18(%rbp),%ecx
  mov    -0x20(%rbp),%edx
  mov    -0x48(%rbp),%eax
  mov    0x10(%rbp),%r8d
  mov    %eax,%esi
  mov    $0x0,%eax
  call   <decode_motion_vector@plt>
  cmpl   $0x0,-0x50(%rbp)
  je     L92
  mov    -0x38(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x38(%rbp),%rax
  add    $0x4,%rax
  add    %edx,%edx
  mov    %edx,(%rax)
L92:
  cmpl   $0x0,-0x4c(%rbp)
  je     L2
  mov    -0x40(%rbp),%rax
  lea    0x4(%rax),%rbx
  mov    $0x0,%eax
  call   <Get_dmvector@plt>
  mov    %eax,(%rbx)
L2:
  nop
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

assistant: ```c
void motion_vector(signed int *PMV, signed int *dmvector, signed int h_r_size, signed int v_r_size, signed int dmv, signed int mvscale, signed int full_pel_vector) {
  signed int motion_code;
  signed int motion_residual;
  motion_code = Get_motion_code();
  unsigned int tmp_if_expr$2;
  unsigned int return_value_Get_Bits$1;
  if (!(h_r_size == 0)) {
    if (motion_code == 0)
      goto __CPROVER_DUMP_L1;
    return_value_Get_Bits$1 = Get_Bits(h_r_size);
    tmp_if_expr$2 = return_value_Get_Bits$1;
  } else {
  __CPROVER_DUMP_L1:;
    tmp_if_expr$2 = (unsigned int)0;
  }
  motion_residual = (signed int)tmp_if_expr$2;
  decode_motion_vector(&PMV[(signed long int)0], h_r_size, motion_code, motion_residual, full_pel_vector);
  if (!(dmv == 0))
    dmvector[(signed long int)0] = Get_dmvector();
  motion_code = Get_motion_code();
  unsigned int tmp_if_expr$4;
  unsigned int return_value_Get_Bits$3;
  if (!(v_r_size == 0)) {
    if (motion_code == 0)
      goto __CPROVER_DUMP_L4;
    return_value_Get_Bits$3 = Get_Bits(v_r_size);
    tmp_if_expr$4 = return_value_Get_Bits$3;
  } else {
  __CPROVER_DUMP_L4:;
    tmp_if_expr$4 = (unsigned int)0;
  }
  motion_residual = (signed int)tmp_if_expr$4;
  if (!(mvscale == 0))
    PMV[(signed long int)1] = PMV[(signed long int)1] >> 1;
  decode_motion_vector(&PMV[(signed long int)1], v_r_size, motion_code, motion_residual, full_pel_vector);
  if (!(mvscale == 0))
    PMV[(signed long int)1] = PMV[(signed long int)1] << 1;
  if (!(dmv == 0))
    dmvector[(signed long int)1] = Get_dmvector();
}
```