user: 这段汇编代码用C语言表示是什么样的?

```asm
<unpack2>:
  endbr64
  mov    %rsi,%rdx
  mov    %rdi,%rax
  lea    0x200(%rdi),%rsi
L0:
  mov    (%rdx),%ecx
  shr    $0x1e,%ecx
  mov    %ecx,(%rax)
  mov    (%rdx),%ecx
  shr    $0x1c,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x4(%rax)
  mov    (%rdx),%ecx
  shr    $0x1a,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x8(%rax)
  mov    (%rdx),%ecx
  shr    $0x18,%ecx
  and    $0x3,%ecx
  mov    %ecx,0xc(%rax)
  mov    (%rdx),%ecx
  shr    $0x16,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x10(%rax)
  mov    (%rdx),%ecx
  shr    $0x14,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x14(%rax)
  mov    (%rdx),%ecx
  shr    $0x12,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x18(%rax)
  mov    (%rdx),%ecx
  shr    $0x10,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x1c(%rax)
  mov    (%rdx),%ecx
  shr    $0xe,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x20(%rax)
  mov    (%rdx),%ecx
  shr    $0xc,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x24(%rax)
  mov    (%rdx),%ecx
  shr    $0xa,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x28(%rax)
  mov    (%rdx),%ecx
  shr    $0x8,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x2c(%rax)
  mov    (%rdx),%ecx
  shr    $0x6,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x30(%rax)
  mov    (%rdx),%ecx
  shr    $0x4,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x34(%rax)
  mov    (%rdx),%ecx
  shr    $0x2,%ecx
  and    $0x3,%ecx
  mov    %ecx,0x38(%rax)
  mov    (%rdx),%ecx
  and    $0x3,%ecx
  mov    %ecx,0x3c(%rax)
  mov    0x4(%rdx),%ecx
  shr    $0x1e,%ecx
  mov    %ecx,0x40(%rax)
  mov    0x4(%rdx),%ecx
  shr    $0x1c,%ecx
  and    $0x3,%ecx
  sub    $0xffffffffffffff80,%rax
  add    $0x8,%rdx
  mov    %ecx,-0x3c(%rax)
  mov    -0x4(%rdx),%ecx
  shr    $0x1a,%ecx
  and    $0x3,%ecx
  mov    %ecx,-0x38(%rax)
  movzbl -0x1(%rdx),%ecx
  and    $0x3,%ecx
  mov    %ecx,-0x34(%rax)
  mov    -0x4(%rdx),%ecx
  shr    $0x16,%ecx
  and    $0x3,%ecx
  mov    %ecx,-0x30(%rax)
  mov    -0x4(%rdx),%ecx
  shr    $0x14,%ecx
  and    $0x3,%ecx
  mov    %ecx,-0x2c(%rax)
  mov    -0x4(%rdx),%ecx
  shr    $0x12,%ecx
  and    $0x3,%ecx
  mov    %ecx,-0x28(%rax)
  movzwl -0x2(%rdx),%ecx
  and    $0x3,%ecx
  mov    %ecx,-0x24(%rax)
  mov    -0x4(%rdx),%ecx
  shr    $0xe,%ecx
  and    $0x3,%ecx
  mov    %ecx,-0x20(%rax)
  mov    -0x4(%rdx),%ecx
  shr    $0xc,%ecx
  and    $0x3,%ecx
  mov    %ecx,-0x1c(%rax)
  mov    -0x4(%rdx),%ecx
  shr    $0xa,%ecx
  and    $0x3,%ecx
  mov    %ecx,-0x18(%rax)
  mov    -0x4(%rdx),%ecx
  shr    $0x8,%ecx
  and    $0x3,%ecx
  mov    %ecx,-0x14(%rax)
  mov    -0x4(%rdx),%ecx
  shr    $0x6,%ecx
  and    $0x3,%ecx
  mov    %ecx,-0x10(%rax)
  mov    -0x4(%rdx),%ecx
  shr    $0x4,%ecx
  and    $0x3,%ecx
  mov    %ecx,-0xc(%rax)
  mov    -0x4(%rdx),%ecx
  shr    $0x2,%ecx
  and    $0x3,%ecx
  mov    %ecx,-0x8(%rax)
  mov    -0x4(%rdx),%ecx
  and    $0x3,%ecx
  mov    %ecx,-0x4(%rax)
  cmp    %rsi,%rax
  jne    L0
  ret
```

assistant: ```c
void unpack2(unsigned int *p, unsigned int *w) {
  int i;
  for (i = 0; i < 128; i += 32, p += 32, w += 2) {
    p[0] = (w[0] >> 30);
    p[1] = (w[0] >> 28) & 3;
    p[2] = (w[0] >> 26) & 3;
    p[3] = (w[0] >> 24) & 3;
    p[4] = (w[0] >> 22) & 3;
    p[5] = (w[0] >> 20) & 3;
    p[6] = (w[0] >> 18) & 3;
    p[7] = (w[0] >> 16) & 3;
    p[8] = (w[0] >> 14) & 3;
    p[9] = (w[0] >> 12) & 3;
    p[10] = (w[0] >> 10) & 3;
    p[11] = (w[0] >> 8) & 3;
    p[12] = (w[0] >> 6) & 3;
    p[13] = (w[0] >> 4) & 3;
    p[14] = (w[0] >> 2) & 3;
    p[15] = (w[0]) & 3;
    p[16] = (w[1] >> 30);
    p[17] = (w[1] >> 28) & 3;
    p[18] = (w[1] >> 26) & 3;
    p[19] = (w[1] >> 24) & 3;
    p[20] = (w[1] >> 22) & 3;
    p[21] = (w[1] >> 20) & 3;
    p[22] = (w[1] >> 18) & 3;
    p[23] = (w[1] >> 16) & 3;
    p[24] = (w[1] >> 14) & 3;
    p[25] = (w[1] >> 12) & 3;
    p[26] = (w[1] >> 10) & 3;
    p[27] = (w[1] >> 8) & 3;
    p[28] = (w[1] >> 6) & 3;
    p[29] = (w[1] >> 4) & 3;
    p[30] = (w[1] >> 2) & 3;
    p[31] = (w[1]) & 3;
  }
}
```