user: 请将以下的汇编代码转换成C语言代码:

```asm
<stbi_decode_DXT1_block>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %rdi,-0x48(%rbp)
  mov    %rsi,-0x50(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x20,-0x34(%rbp)
  mov    -0x50(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x50(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x8,%eax
  add    %edx,%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x50(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x50(%rbp),%rax
  add    $0x3,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x8,%eax
  add    %edx,%eax
  mov    %eax,-0x28(%rbp)
  lea    -0x38(%rbp),%rcx
  lea    -0x3c(%rbp),%rdx
  lea    -0x40(%rbp),%rsi
  mov    -0x2c(%rbp),%eax
  mov    %eax,%edi
  call   <stbi_rgb_888_from_565@plt>
  mov    -0x40(%rbp),%eax
  mov    %al,-0x20(%rbp)
  mov    -0x3c(%rbp),%eax
  mov    %al,-0x1f(%rbp)
  mov    -0x38(%rbp),%eax
  mov    %al,-0x1e(%rbp)
  movb   $0xff,-0x1d(%rbp)
  lea    -0x38(%rbp),%rcx
  lea    -0x3c(%rbp),%rdx
  lea    -0x40(%rbp),%rsi
  mov    -0x28(%rbp),%eax
  mov    %eax,%edi
  call   <stbi_rgb_888_from_565@plt>
  mov    -0x40(%rbp),%eax
  mov    %al,-0x1c(%rbp)
  mov    -0x3c(%rbp),%eax
  mov    %al,-0x1b(%rbp)
  mov    -0x38(%rbp),%eax
  mov    %al,-0x1a(%rbp)
  movb   $0xff,-0x19(%rbp)
  mov    -0x2c(%rbp),%eax
  cmp    -0x28(%rbp),%eax
  jle    L33
  movzbl -0x20(%rbp),%eax
  movzbl %al,%eax
  lea    (%rax,%rax,1),%edx
  movzbl -0x1c(%rbp),%eax
  movzbl %al,%eax
  add    %edx,%eax
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %al,-0x18(%rbp)
  movzbl -0x1f(%rbp),%eax
  movzbl %al,%eax
  lea    (%rax,%rax,1),%edx
  movzbl -0x1b(%rbp),%eax
  movzbl %al,%eax
  add    %edx,%eax
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %al,-0x17(%rbp)
  movzbl -0x1e(%rbp),%eax
  movzbl %al,%eax
  lea    (%rax,%rax,1),%edx
  movzbl -0x1a(%rbp),%eax
  movzbl %al,%eax
  add    %edx,%eax
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %al,-0x16(%rbp)
  movb   $0xff,-0x15(%rbp)
  movzbl -0x20(%rbp),%eax
  movzbl %al,%edx
  movzbl -0x1c(%rbp),%eax
  movzbl %al,%eax
  add    %eax,%eax
  add    %edx,%eax
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %al,-0x14(%rbp)
  movzbl -0x1f(%rbp),%eax
  movzbl %al,%edx
  movzbl -0x1b(%rbp),%eax
  movzbl %al,%eax
  add    %eax,%eax
  add    %edx,%eax
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %al,-0x13(%rbp)
  movzbl -0x1e(%rbp),%eax
  movzbl %al,%edx
  movzbl -0x1a(%rbp),%eax
  movzbl %al,%eax
  add    %eax,%eax
  add    %edx,%eax
  movslq %eax,%rdx
  imul   $0x55555556,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  mov    %al,-0x12(%rbp)
  movb   $0xff,-0x11(%rbp)
  jmp    L5
L33:
  movzbl -0x20(%rbp),%eax
  movzbl %al,%edx
  movzbl -0x1c(%rbp),%eax
  movzbl %al,%eax
  add    %edx,%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %al,-0x18(%rbp)
  movzbl -0x1f(%rbp),%eax
  movzbl %al,%edx
  movzbl -0x1b(%rbp),%eax
  movzbl %al,%eax
  add    %edx,%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %al,-0x17(%rbp)
  movzbl -0x1e(%rbp),%eax
  movzbl %al,%edx
  movzbl -0x1a(%rbp),%eax
  movzbl %al,%eax
  add    %edx,%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %al,-0x16(%rbp)
  movb   $0xff,-0x15(%rbp)
  movb   $0x0,-0x14(%rbp)
  movb   $0x0,-0x13(%rbp)
  movb   $0x0,-0x12(%rbp)
  movb   $0x0,-0x11(%rbp)
L5:
  movl   $0x0,-0x30(%rbp)
  jmp    L4
L31:
  mov    -0x34(%rbp),%eax
  sar    $0x3,%eax
  movslq %eax,%rdx
  mov    -0x50(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x34(%rbp),%eax
  and    $0x7,%eax
  mov    %eax,%ecx
  sar    %cl,%edx
  mov    %edx,%eax
  and    $0x3,%eax
  shl    $0x2,%eax
  mov    %eax,-0x24(%rbp)
  addl   $0x2,-0x34(%rbp)
  mov    -0x30(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  add    %rax,%rdx
  mov    -0x24(%rbp),%eax
  cltq
  movzbl -0x20(%rbp,%rax,1),%eax
  mov    %al,(%rdx)
  mov    -0x24(%rbp),%eax
  lea    0x1(%rax),%ecx
  mov    -0x30(%rbp),%eax
  cltq
  lea    0x1(%rax),%rdx
  mov    -0x48(%rbp),%rax
  add    %rax,%rdx
  movslq %ecx,%rax
  movzbl -0x20(%rbp,%rax,1),%eax
  mov    %al,(%rdx)
  mov    -0x24(%rbp),%eax
  lea    0x2(%rax),%ecx
  mov    -0x30(%rbp),%eax
  cltq
  lea    0x2(%rax),%rdx
  mov    -0x48(%rbp),%rax
  add    %rax,%rdx
  movslq %ecx,%rax
  movzbl -0x20(%rbp,%rax,1),%eax
  mov    %al,(%rdx)
  mov    -0x24(%rbp),%eax
  lea    0x3(%rax),%ecx
  mov    -0x30(%rbp),%eax
  cltq
  lea    0x3(%rax),%rdx
  mov    -0x48(%rbp),%rax
  add    %rax,%rdx
  movslq %ecx,%rax
  movzbl -0x20(%rbp,%rax,1),%eax
  mov    %al,(%rdx)
  addl   $0x4,-0x30(%rbp)
L4:
  cmpl   $0x3f,-0x30(%rbp)
  jle    L31
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L13
  call   <__stack_chk_fail@plt>
L13:
  leave
  ret
```

assistant: ```c
void stbi_decode_DXT1_block(unsigned char uncompressed[16 * 4], unsigned char compressed[8]) {
  int next_bit = 4 * 8;
  int i, r, g, b;
  int c0, c1;
  unsigned char decode_colors[4 * 4];
  c0 = compressed[0] + (compressed[1] << 8);
  c1 = compressed[2] + (compressed[3] << 8);
  stbi_rgb_888_from_565(c0, &r, &g, &b);
  decode_colors[0] = r;
  decode_colors[1] = g;
  decode_colors[2] = b;
  decode_colors[3] = 255;
  stbi_rgb_888_from_565(c1, &r, &g, &b);
  decode_colors[4] = r;
  decode_colors[5] = g;
  decode_colors[6] = b;
  decode_colors[7] = 255;
  if (c0 > c1) {
    decode_colors[8] = (2 * decode_colors[0] + decode_colors[4]) / 3;
    decode_colors[9] = (2 * decode_colors[1] + decode_colors[5]) / 3;
    decode_colors[10] = (2 * decode_colors[2] + decode_colors[6]) / 3;
    decode_colors[11] = 255;
    decode_colors[12] = (decode_colors[0] + 2 * decode_colors[4]) / 3;
    decode_colors[13] = (decode_colors[1] + 2 * decode_colors[5]) / 3;
    decode_colors[14] = (decode_colors[2] + 2 * decode_colors[6]) / 3;
    decode_colors[15] = 255;
  } else {
    decode_colors[8] = (decode_colors[0] + decode_colors[4]) / 2;
    decode_colors[9] = (decode_colors[1] + decode_colors[5]) / 2;
    decode_colors[10] = (decode_colors[2] + decode_colors[6]) / 2;
    decode_colors[11] = 255;
    decode_colors[12] = 0;
    decode_colors[13] = 0;
    decode_colors[14] = 0;
    decode_colors[15] = 0;
  }
  for (i = 0; i < 16 * 4; i += 4) {
    int idx = ((compressed[next_bit >> 3] >> (next_bit & 7)) & 3) * 4;
    next_bit += 2;
    uncompressed[i + 0] = decode_colors[idx + 0];
    uncompressed[i + 1] = decode_colors[idx + 1];
    uncompressed[i + 2] = decode_colors[idx + 2];
    uncompressed[i + 3] = decode_colors[idx + 3];
  }
}
```