user: 提供的汇编代码用C语言表示会是什么样子:

```asm
<iec958_build_dtsframe>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %rdi,-0x38(%rbp)
  mov    %rsi,-0x40(%rbp)
  mov    %rdx,-0x48(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x48(%rbp),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L106
L132:
  lea    -0x24(%rbp),%rdx
  lea    -0x20(%rbp),%rcx
  mov    -0x38(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <dts_decode_header@plt>
  mov    %eax,-0x1c(%rbp)
  cmpl   $0x0,-0x1c(%rbp)
  jns    L112
  mov    $0x0,%eax
  jmp    L77
L112:
  mov    -0x1c(%rbp),%eax
  shl    $0x3,%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x24(%rbp),%eax
  shl    $0x5,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x48(%rbp),%rax
  lea    0x4(%rax),%rdx
  mov    %rdx,-0x48(%rbp)
  movl   $0x72,(%rax)
  mov    -0x48(%rbp),%rax
  lea    0x4(%rax),%rdx
  mov    %rdx,-0x48(%rbp)
  movl   $0xf8,(%rax)
  mov    -0x48(%rbp),%rax
  lea    0x4(%rax),%rdx
  mov    %rdx,-0x48(%rbp)
  movl   $0x1f,(%rax)
  mov    -0x48(%rbp),%rax
  lea    0x4(%rax),%rdx
  mov    %rdx,-0x48(%rbp)
  movl   $0x4e,(%rax)
  cmpl   $0x800,-0x14(%rbp)
  je     L19
  cmpl   $0x800,-0x14(%rbp)
  jg     L40
  cmpl   $0x200,-0x14(%rbp)
  je     L2
  cmpl   $0x400,-0x14(%rbp)
  je     L51
  jmp    L40
L2:
  mov    -0x48(%rbp),%rax
  lea    0x4(%rax),%rdx
  mov    %rdx,-0x48(%rbp)
  movl   $0xb,(%rax)
  jmp    L49
L51:
  mov    -0x48(%rbp),%rax
  lea    0x4(%rax),%rdx
  mov    %rdx,-0x48(%rbp)
  movl   $0xc,(%rax)
  jmp    L49
L19:
  mov    -0x48(%rbp),%rax
  lea    0x4(%rax),%rdx
  mov    %rdx,-0x48(%rbp)
  movl   $0xd,(%rax)
  jmp    L49
L40:
  mov    $0x0,%eax
  jmp    L77
L49:
  mov    -0x48(%rbp),%rax
  lea    0x4(%rax),%rdx
  mov    %rdx,-0x48(%rbp)
  movl   $0x0,(%rax)
  mov    -0x48(%rbp),%rax
  lea    0x4(%rax),%rdx
  mov    %rdx,-0x48(%rbp)
  mov    -0x18(%rbp),%edx
  mov    %edx,(%rax)
  mov    -0x48(%rbp),%rax
  lea    0x4(%rax),%rdx
  mov    %rdx,-0x48(%rbp)
  mov    -0x18(%rbp),%edx
  sar    $0x8,%edx
  mov    %edx,(%rax)
  mov    -0x1c(%rbp),%edx
  mov    -0x48(%rbp),%rcx
  mov    -0x38(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <swab@plt>
  mov    -0x1c(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L62
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    -0x1c(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x48(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
L62:
  mov    -0x14(%rbp),%eax
  shl    $0x2,%eax
  sub    -0x1c(%rbp),%eax
  mov    -0x1c(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x48(%rbp),%rdx
  add    %rdx,%rcx
  mov    %eax,%edx
  mov    $0x0,%esi
  mov    %rcx,%rdi
  call   <memset@plt>
  mov    -0x14(%rbp),%eax
  shl    $0x2,%eax
  cltq
  shl    $0x2,%rax
  sub    $0x20,%rax
  add    %rax,-0x48(%rbp)
  mov    -0x1c(%rbp),%eax
  cltq
  sub    %rax,-0x40(%rbp)
  mov    -0x1c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rax,-0x38(%rbp)
L106:
  cmpq   $0x0,-0x40(%rbp)
  jne    L132
  mov    -0x48(%rbp),%rax
  sub    -0x10(%rbp),%rax
  sar    $0x2,%rax
  lea    0x3(%rax),%rdx
  test   %rax,%rax
  cmovs  %rdx,%rax
  sar    $0x2,%rax
L77:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L12
  call   <__stack_chk_fail@plt>
L12:
  leave
  ret
```

assistant: ```c
int iec958_build_dtsframe(const uint8_t *src, size_t srclen, uint8_t *dst) {
  int nblks, fsize, rate, burst_len, nr_samples;
  uint8_t *dst0 = dst;
  while (srclen > 0) {
    if ((fsize = dts_decode_header(src, &rate, &nblks)) < 0)
      return 0;
    burst_len = fsize * 8;
    nr_samples = nblks * 32;
    *dst++ = 0x72;
    *dst++ = 0xf8;
    *dst++ = 0x1f;
    *dst++ = 0x4e;
    switch (nr_samples) {
    case 512:
      *dst++ = 11;
      break;
    case 1024:
      *dst++ = 12;
      break;
    case 2048:
      *dst++ = 13;
      break;
    default:
      return 0;
    }
    *dst++ = 0;
    *dst++ = burst_len;
    *dst++ = burst_len >> 8;
    swab(src, dst, fsize);
    if (fsize & 1)
      dst[fsize] = src[fsize];
    memset(dst + fsize, 0, nr_samples * 4 - fsize);
    dst += nr_samples * 4 - 8;
    srclen -= fsize;
    src += fsize;
  }
  return (dst - dst0) / 4;
}
```