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

```asm
<shuff>:
  endbr64
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  xor    %edi,%edi
  lea    0xd0(%rbx),%rbp
  sub    $0xe8,%rsp
  movdqa D110(%rip),%xmm0
  mov    %fs:0x28,%rax
  mov    %rax,0xd8(%rsp)
  xor    %eax,%eax
  movaps %xmm0,(%rsp)
  movdqa D19(%rip),%xmm0
  movaps %xmm0,0x10(%rsp)
  movdqa D68(%rip),%xmm0
  movaps %xmm0,0x20(%rsp)
  movdqa D90(%rip),%xmm0
  movaps %xmm0,0x30(%rsp)
  movdqa D83(%rip),%xmm0
  movaps %xmm0,0x40(%rsp)
  movdqa D80(%rip),%xmm0
  movaps %xmm0,0x50(%rsp)
  movdqa D119(%rip),%xmm0
  movaps %xmm0,0x60(%rsp)
  movdqa D44(%rip),%xmm0
  movaps %xmm0,0x70(%rsp)
  movdqa D16(%rip),%xmm0
  movaps %xmm0,0x80(%rsp)
  movdqa D125(%rip),%xmm0
  movaps %xmm0,0x90(%rsp)
  movdqa D104(%rip),%xmm0
  movaps %xmm0,0xa0(%rsp)
  movdqa D64(%rip),%xmm0
  movaps %xmm0,0xb0(%rsp)
  movdqa D127(%rip),%xmm0
  movaps %xmm0,0xc0(%rsp)
  call   <time@plt>
  mov    %eax,%edi
  call   <srand@plt>
  nop
L1:
  xor    %eax,%eax
  call   <rand@plt>
  movslq %eax,%rdx
  mov    %eax,%ecx
  imul   $0x4ec4ec4f,%rdx,%rdx
  sar    $0x1f,%ecx
  sar    $0x24,%rdx
  sub    %ecx,%edx
  imul   $0x34,%edx,%ecx
  sub    %ecx,%eax
  movslq %eax,%rdx
  mov    (%rsp,%rdx,4),%eax
  test   %eax,%eax
  je     L1
  mov    %eax,(%rbx)
  add    $0x4,%rbx
  movl   $0x0,(%rsp,%rdx,4)
  cmp    %rbp,%rbx
  jne    L1
  mov    0xd8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L7
  add    $0xe8,%rsp
  pop    %rbx
  pop    %rbp
  ret
L7:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: label: D110
datatype: byte[16]
name: unpack_data
arguments: label: D19
datatype: byte[16]
name: unpack_data
arguments: label: D68
datatype: byte[16]
name: unpack_data
arguments: label: D90
datatype: byte[16]
name: unpack_data
arguments: label: D83
datatype: byte[16]
name: unpack_data
arguments: label: D80
datatype: byte[16]
name: unpack_data
arguments: label: D119
datatype: byte[16]
name: unpack_data
arguments: label: D44
datatype: byte[16]
name: unpack_data
arguments: label: D16
datatype: byte[16]
name: unpack_data
arguments: label: D125
datatype: byte[16]
name: unpack_data
arguments: label: D104
datatype: byte[16]
name: unpack_data
arguments: label: D64
datatype: byte[16]
name: unpack_data
arguments: label: D127
datatype: byte[16]

tool: {"D110": [0x2d,0x01,0x00,0x00,0x2e,0x01,0x00,0x00,0x2f,0x01,0x00,0x00,0x30,0x01,0x00,0x00]}

tool: {"D19": [0x31,0x01,0x00,0x00,0x32,0x01,0x00,0x00,0x33,0x01,0x00,0x00,0x34,0x01,0x00,0x00]}

tool: {"D68": [0x35,0x01,0x00,0x00,0x36,0x01,0x00,0x00,0x37,0x01,0x00,0x00,0x38,0x01,0x00,0x00]}

tool: {"D90": [0x39,0x01,0x00,0x00,0x91,0x01,0x00,0x00,0x92,0x01,0x00,0x00,0x93,0x01,0x00,0x00]}

tool: {"D83": [0x94,0x01,0x00,0x00,0x95,0x01,0x00,0x00,0x96,0x01,0x00,0x00,0x97,0x01,0x00,0x00]}

tool: {"D80": [0x98,0x01,0x00,0x00,0x99,0x01,0x00,0x00,0x9a,0x01,0x00,0x00,0x9b,0x01,0x00,0x00]}

tool: {"D119": [0x9c,0x01,0x00,0x00,0x9d,0x01,0x00,0x00,0xf5,0x01,0x00,0x00,0xf6,0x01,0x00,0x00]}

tool: {"D44": [0xf7,0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0xf9,0x01,0x00,0x00,0xfa,0x01,0x00,0x00]}

tool: {"D16": [0xfb,0x01,0x00,0x00,0xfc,0x01,0x00,0x00,0xfd,0x01,0x00,0x00,0xfe,0x01,0x00,0x00]}

tool: {"D125": [0xff,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x01,0x02,0x00,0x00,0x59,0x02,0x00,0x00]}

tool: {"D104": [0x5a,0x02,0x00,0x00,0x5b,0x02,0x00,0x00,0x5c,0x02,0x00,0x00,0x5d,0x02,0x00,0x00]}

tool: {"D64": [0x5e,0x02,0x00,0x00,0x5f,0x02,0x00,0x00,0x60,0x02,0x00,0x00,0x61,0x02,0x00,0x00]}

tool: {"D127": [0x62,0x02,0x00,0x00,0x63,0x02,0x00,0x00,0x64,0x02,0x00,0x00,0x65,0x02,0x00,0x00]}

assistant: ```c
void shuff(int cards[]) {
  int t;
  int i;
  int desk[52] = {0};
  for (i = 0; i < 52; i++)
    desk[i] = (i / 13 + 3) * 100 + i % 13 + 1;
  srand((unsigned)time(NULL));
  for (i = 0; i < 52; i++) {
    do {
      t = rand() % 52;
    } while (desk[t] == 0);
    cards[i] = desk[t];
    desk[t] = 0;
  }
}
```