user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<x6E_Tag_DescriptorParser>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %edi,-0x14(%rbp)
  mov    %rsi,-0x20(%rbp)
  movl   $0x0,-0x4(%rbp)
  movb   $0x0,-0x6(%rbp)
  movb   $0x0,-0x5(%rbp)
  cmpq   $0x0,-0x20(%rbp)
  jne    L65
  mov    $0xffffffff,%eax
  jmp    L43
L65:
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x14(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <Parser_DisplayTagInfo@plt>
  mov    -0x20(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x14(%rbp),%eax
  lea    D6(%rip),%rcx
  mov    %rcx,%rsi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <Parser_TsPacketLog@plt>
  mov    -0x20(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x8,%eax
  mov    %eax,%edx
  mov    -0x20(%rbp),%rax
  add    $0x3,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  or     %eax,%edx
  mov    -0x14(%rbp),%eax
  lea    D88(%rip),%rcx
  mov    %rcx,%rsi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <Parser_TsPacketLog@plt>
  movl   $0x2,-0x4(%rbp)
  jmp    L40
L11:
  mov    -0x20(%rbp),%rax
  add    $0x4,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  and    $0xf0,%eax
  mov    %eax,%edx
  mov    -0x14(%rbp),%eax
  lea    D76(%rip),%rcx
  mov    %rcx,%rsi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <Parser_TsPacketLog@plt>
  mov    -0x20(%rbp),%rax
  add    $0x4,%rax
  movzbl (%rax),%eax
  and    $0x7,%eax
  mov    %al,-0x6(%rbp)
  movzbl -0x6(%rbp),%edx
  mov    -0x14(%rbp),%eax
  lea    D50(%rip),%rcx
  mov    %rcx,%rsi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <Parser_TsPacketLog@plt>
  cmpb   $0x1,-0x6(%rbp)
  je     L37
  cmpb   $0x2,-0x6(%rbp)
  je     L37
  cmpb   $0x3,-0x6(%rbp)
  jne    L26
L37:
  mov    -0x20(%rbp),%rax
  add    $0x5,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x8,%eax
  mov    %eax,%edx
  mov    -0x20(%rbp),%rax
  add    $0x6,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  or     %eax,%edx
  mov    -0x14(%rbp),%eax
  lea    D25(%rip),%rcx
  mov    %rcx,%rsi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <Parser_TsPacketLog@plt>
  mov    -0x20(%rbp),%rax
  add    $0x7,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x8,%eax
  mov    %eax,%edx
  mov    -0x20(%rbp),%rax
  add    $0x8,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  or     %eax,%edx
  mov    -0x14(%rbp),%eax
  lea    D58(%rip),%rcx
  mov    %rcx,%rsi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <Parser_TsPacketLog@plt>
  mov    -0x20(%rbp),%rax
  add    $0x9,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  shl    $0x8,%eax
  mov    %eax,%edx
  mov    -0x20(%rbp),%rax
  add    $0xa,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  or     %eax,%edx
  mov    -0x14(%rbp),%eax
  lea    D45(%rip),%rcx
  mov    %rcx,%rsi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <Parser_TsPacketLog@plt>
  mov    -0x20(%rbp),%rax
  add    $0xb,%rax
  movzbl (%rax),%eax
  movzbl %al,%edx
  mov    -0x14(%rbp),%eax
  lea    D41(%rip),%rcx
  mov    %rcx,%rsi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <Parser_TsPacketLog@plt>
L26:
  movzbl -0x5(%rbp),%eax
  add    %eax,-0x4(%rbp)
L40:
  mov    -0x20(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  cmp    %eax,-0x4(%rbp)
  jb     L11
  mov    -0x14(%rbp),%eax
  lea    D35(%rip),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <Parser_TsPacketLog@plt>
  mov    -0x20(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
L43:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: label: D6
datatype: string
name: disassemble_data
arguments: label: D88
datatype: string
name: disassemble_data
arguments: label: D76
datatype: string
name: disassemble_data
arguments: label: D50
datatype: string
name: disassemble_data
arguments: label: D25
datatype: string
name: disassemble_data
arguments: label: D58
datatype: string
name: disassemble_data
arguments: label: D45
datatype: string
name: disassemble_data
arguments: label: D41
datatype: string
name: disassemble_data
arguments: label: D35
datatype: string

tool: D6: Descriptor_length = 0x%x


tool: D88: announcement_support_indicator = 0x%x


tool: D76: announcement_type = 0x%x


tool: D50: reference_type = 0x%x


tool: D25: original_network_id = 0x%x


tool: D58: transport_stream_id = 0x%x


tool: D45: service_id = 0x%x


tool: D41: component_tag = 0x%x


tool: D35: ******END******


assistant: ```c
int x6E_Tag_DescriptorParser(unsigned int type, unsigned char *buff) {
  unsigned int i = 0;
  unsigned char reference_type = 0;
  unsigned char offset = 0;
  if (NULL == buff) {
    return -1;
  }
  Parser_DisplayTagInfo(type, buff[0]);
  Parser_TsPacketLog(type, "Descriptor_length = 0x%x\n", buff[1]);
  Parser_TsPacketLog(type, "announcement_support_indicator = 0x%x\n", ((buff[2] & 0xFF) << 8) | (buff[3] & 0xFF));
  for (i = 2; i < buff[1]; i += offset) {
    Parser_TsPacketLog(type, "announcement_type = 0x%x\n", buff[4] & 0xF0);
    reference_type = buff[4] & 0x07;
    Parser_TsPacketLog(type, "reference_type = 0x%x\n", reference_type);
    if ((0x01 == reference_type) || (0x02 == reference_type) || (0x03 == reference_type)) {
      Parser_TsPacketLog(type, "original_network_id = 0x%x\n", ((buff[5] & 0xFF) << 8) | (buff[6] & 0xFF));
      Parser_TsPacketLog(type, "transport_stream_id = 0x%x\n", ((buff[7] & 0xFF) << 8) | (buff[8] & 0xFF));
      Parser_TsPacketLog(type, "service_id = 0x%x\n", ((buff[9] & 0xFF) << 8) | (buff[10] & 0xFF));
      Parser_TsPacketLog(type, "component_tag = 0x%x\n", buff[11]);
    } else {
    }
  }
  Parser_TsPacketLog(type, "******END******\n");
  return buff[1];
}
```