user: 请从给定的汇编指令推导出C源代码：

```asm
<quantization_and_coding>:
  endbr64
  push   %rbx
  mov    %rdi,%rbx
  mov    (%rdi),%esi
  mov    $0x5000,%edi
  call   <saturated_mul16@plt>
  mov    %eax,%edi
  mov    $0x0,%esi
  call   <saturated_add16@plt>
  mov    %eax,%edi
  mov    $0x100,%esi
  call   <saturated_add16@plt>
  sar    $0x9,%eax
  mov    $0xffffffe0,%edx
  cmp    %edx,%eax
  cmovge %eax,%edx
  add    $0x20,%edx
  cmp    $0x20,%eax
  mov    $0x3f,%eax
  cmovge %eax,%edx
  mov    %edx,(%rbx)
  mov    0x4(%rbx),%esi
  mov    $0x5000,%edi
  call   <saturated_mul16@plt>
  mov    %eax,%edi
  mov    $0x0,%esi
  call   <saturated_add16@plt>
  mov    %eax,%edi
  mov    $0x100,%esi
  call   <saturated_add16@plt>
  sar    $0x9,%eax
  mov    $0xffffffe0,%edx
  cmp    %edx,%eax
  cmovge %eax,%edx
  add    $0x20,%edx
  cmp    $0x20,%eax
  mov    $0x3f,%eax
  cmovge %eax,%edx
  mov    %edx,0x4(%rbx)
  mov    0x8(%rbx),%esi
  mov    $0x5000,%edi
  call   <saturated_mul16@plt>
  mov    %eax,%edi
  mov    $0x800,%esi
  call   <saturated_add16@plt>
  mov    %eax,%edi
  mov    $0x100,%esi
  call   <saturated_add16@plt>
  sar    $0x9,%eax
  mov    $0xfffffff0,%edx
  cmp    %edx,%eax
  cmovge %eax,%edx
  add    $0x10,%edx
  cmp    $0x10,%eax
  mov    $0x1f,%eax
  cmovge %eax,%edx
  mov    %edx,0x8(%rbx)
  mov    0xc(%rbx),%esi
  mov    $0x5000,%edi
  call   <saturated_mul16@plt>
  mov    %eax,%edi
  mov    $0xfffff600,%esi
  call   <saturated_add16@plt>
  mov    %eax,%edi
  mov    $0x100,%esi
  call   <saturated_add16@plt>
  sar    $0x9,%eax
  mov    $0xfffffff0,%edx
  cmp    %edx,%eax
  cmovge %eax,%edx
  add    $0x10,%edx
  cmp    $0x10,%eax
  mov    $0x1f,%eax
  cmovge %eax,%edx
  mov    %edx,0xc(%rbx)
  mov    0x10(%rbx),%esi
  mov    $0x368c,%edi
  call   <saturated_mul16@plt>
  mov    %eax,%edi
  mov    $0x5e,%esi
  call   <saturated_add16@plt>
  mov    %eax,%edi
  mov    $0x100,%esi
  call   <saturated_add16@plt>
  sar    $0x9,%eax
  mov    $0xfffffff8,%edx
  cmp    %edx,%eax
  cmovge %eax,%edx
  add    $0x8,%edx
  cmp    $0x8,%eax
  mov    $0xf,%eax
  cmovge %eax,%edx
  mov    %edx,0x10(%rbx)
  mov    0x14(%rbx),%esi
  mov    $0x3c00,%edi
  call   <saturated_mul16@plt>
  mov    %eax,%edi
  mov    $0xfffff900,%esi
  call   <saturated_add16@plt>
  mov    %eax,%edi
  mov    $0x100,%esi
  call   <saturated_add16@plt>
  sar    $0x9,%eax
  mov    $0xfffffff8,%edx
  cmp    %edx,%eax
  cmovge %eax,%edx
  add    $0x8,%edx
  cmp    $0x8,%eax
  mov    $0xf,%eax
  cmovge %eax,%edx
  mov    %edx,0x14(%rbx)
  mov    0x18(%rbx),%esi
  mov    $0x2156,%edi
  call   <saturated_mul16@plt>
  mov    %eax,%edi
  mov    $0xfffffeab,%esi
  call   <saturated_add16@plt>
  mov    %eax,%edi
  mov    $0x100,%esi
  call   <saturated_add16@plt>
  sar    $0x9,%eax
  mov    $0xfffffffc,%edx
  cmp    %edx,%eax
  cmovge %eax,%edx
  add    $0x4,%edx
  cmp    $0x4,%eax
  mov    $0x7,%eax
  cmovge %eax,%edx
  mov    %edx,0x18(%rbx)
  mov    0x1c(%rbx),%esi
  mov    $0x234c,%edi
  call   <saturated_mul16@plt>
  mov    %eax,%edi
  mov    $0xfffffb88,%esi
  call   <saturated_add16@plt>
  mov    %eax,%edi
  mov    $0x100,%esi
  call   <saturated_add16@plt>
  sar    $0x9,%eax
  mov    $0xfffffffc,%edx
  cmp    %edx,%eax
  cmovge %eax,%edx
  add    $0x4,%edx
  cmp    $0x4,%eax
  mov    $0x7,%eax
  cmovge %eax,%edx
  mov    %edx,0x1c(%rbx)
  pop    %rbx
  ret
```

assistant: ```c
void quantization_and_coding(int16_t LAR[8]) {
  int16_t temp;
  temp = saturated_mul16(20480, *LAR);
  temp = saturated_add16(temp, 0);
  temp = saturated_add16(temp, 256);
  temp >>= 9;
  *LAR = (int16_t)((temp > 31) ? 31 - -32 : ((temp < -32) ? 0 : temp - -32));
  LAR++;
  ;
  temp = saturated_mul16(20480, *LAR);
  temp = saturated_add16(temp, 0);
  temp = saturated_add16(temp, 256);
  temp >>= 9;
  *LAR = (int16_t)((temp > 31) ? 31 - -32 : ((temp < -32) ? 0 : temp - -32));
  LAR++;
  ;
  temp = saturated_mul16(20480, *LAR);
  temp = saturated_add16(temp, 2048);
  temp = saturated_add16(temp, 256);
  temp >>= 9;
  *LAR = (int16_t)((temp > 15) ? 15 - -16 : ((temp < -16) ? 0 : temp - -16));
  LAR++;
  ;
  temp = saturated_mul16(20480, *LAR);
  temp = saturated_add16(temp, -2560);
  temp = saturated_add16(temp, 256);
  temp >>= 9;
  *LAR = (int16_t)((temp > 15) ? 15 - -16 : ((temp < -16) ? 0 : temp - -16));
  LAR++;
  ;
  temp = saturated_mul16(13964, *LAR);
  temp = saturated_add16(temp, 94);
  temp = saturated_add16(temp, 256);
  temp >>= 9;
  *LAR = (int16_t)((temp > 7) ? 7 - -8 : ((temp < -8) ? 0 : temp - -8));
  LAR++;
  ;
  temp = saturated_mul16(15360, *LAR);
  temp = saturated_add16(temp, -1792);
  temp = saturated_add16(temp, 256);
  temp >>= 9;
  *LAR = (int16_t)((temp > 7) ? 7 - -8 : ((temp < -8) ? 0 : temp - -8));
  LAR++;
  ;
  temp = saturated_mul16(8534, *LAR);
  temp = saturated_add16(temp, -341);
  temp = saturated_add16(temp, 256);
  temp >>= 9;
  *LAR = (int16_t)((temp > 3) ? 3 - -4 : ((temp < -4) ? 0 : temp - -4));
  LAR++;
  ;
  temp = saturated_mul16(9036, *LAR);
  temp = saturated_add16(temp, -1144);
  temp = saturated_add16(temp, 256);
  temp >>= 9;
  *LAR = (int16_t)((temp > 3) ? 3 - -4 : ((temp < -4) ? 0 : temp - -4));
  LAR++;
  ;
}
```