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

```asm
<ns_parserr>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %esi,-0x1c(%rbp)
  mov    %edx,-0x20(%rbp)
  mov    %rcx,-0x28(%rbp)
  mov    -0x1c(%rbp),%eax
  mov    %eax,-0x8(%rbp)
  cmpl   $0x0,-0x8(%rbp)
  js     L187
  mov    D32(%rip),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x1c(%rbp)
  jl     L83
L187:
  mov    D128(%rip),%rax
  mov    (%rax),%edx
  mov    D29(%rip),%rax
  mov    %edx,(%rax)
  mov    $0xffffffff,%eax
  jmp    L55
L83:
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x1c(%rbp)
  je     L71
  mov    -0x1c(%rbp),%edx
  mov    -0x18(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <setsection@plt>
L71:
  cmpl   $0xffffffff,-0x20(%rbp)
  jne    L204
  mov    -0x18(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0x20(%rbp)
L204:
  cmpl   $0x0,-0x20(%rbp)
  js     L221
  mov    -0x18(%rbp),%rax
  mov    0x8(%rax),%rdx
  mov    -0x1c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    %eax,-0x20(%rbp)
  jl     L163
L221:
  mov    D128(%rip),%rax
  mov    (%rax),%edx
  mov    D29(%rip),%rax
  mov    %edx,(%rax)
  mov    $0xffffffff,%eax
  jmp    L55
L163:
  mov    -0x18(%rbp),%rax
  mov    0x4(%rax),%eax
  cmp    %eax,-0x20(%rbp)
  jge    L70
  mov    -0x1c(%rbp),%edx
  mov    -0x18(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <setsection@plt>
L70:
  mov    -0x18(%rbp),%rax
  mov    0x4(%rax),%eax
  cmp    %eax,-0x20(%rbp)
  jle    L51
  mov    -0x18(%rbp),%rax
  mov    0x4(%rax),%edx
  mov    -0x20(%rbp),%eax
  sub    %edx,%eax
  mov    %eax,%ecx
  mov    -0x18(%rbp),%rax
  mov    0x14(%rax),%esi
  mov    -0x18(%rbp),%rax
  mov    0x10(%rax),%eax
  mov    -0x1c(%rbp),%edx
  mov    %eax,%edi
  call   <ns_skiprr@plt>
  mov    %eax,-0x4(%rbp)
  cmpl   $0x0,-0x4(%rbp)
  jns    L76
  mov    $0xffffffff,%eax
  jmp    L55
L76:
  mov    -0x18(%rbp),%rax
  mov    0x10(%rax),%edx
  mov    -0x4(%rbp),%eax
  add    %eax,%edx
  mov    -0x18(%rbp),%rax
  mov    %edx,0x10(%rax)
  mov    -0x18(%rbp),%rax
  mov    -0x20(%rbp),%edx
  mov    %edx,0x4(%rax)
L51:
  mov    D52(%rip),%rax
  mov    (%rax),%edi
  mov    -0x28(%rbp),%rax
  mov    0x20(%rax),%ecx
  mov    -0x18(%rbp),%rax
  mov    0x10(%rax),%edx
  mov    -0x18(%rbp),%rax
  mov    0x14(%rax),%esi
  mov    -0x18(%rbp),%rax
  mov    0x18(%rax),%eax
  mov    %edi,%r8d
  mov    %eax,%edi
  call   <dn_expand@plt>
  mov    %eax,-0x4(%rbp)
  cmpl   $0x0,-0x4(%rbp)
  jns    L107
  mov    $0xffffffff,%eax
  jmp    L55
L107:
  mov    -0x18(%rbp),%rax
  mov    0x10(%rax),%edx
  mov    -0x4(%rbp),%eax
  add    %eax,%edx
  mov    -0x18(%rbp),%rax
  mov    %edx,0x10(%rax)
  mov    -0x18(%rbp),%rax
  mov    0x10(%rax),%edx
  mov    D7(%rip),%rax
  mov    (%rax),%eax
  add    %eax,%edx
  mov    D7(%rip),%rax
  mov    (%rax),%eax
  add    %eax,%edx
  mov    -0x18(%rbp),%rax
  mov    0x14(%rax),%eax
  cmp    %eax,%edx
  jle    L34
  mov    D44(%rip),%rax
  mov    (%rax),%edx
  mov    D29(%rip),%rax
  mov    %edx,(%rax)
  mov    $0xffffffff,%eax
  jmp    L55
L34:
  mov    -0x18(%rbp),%rax
  mov    0x10(%rax),%edx
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <NS_GET16@plt>
  mov    -0x18(%rbp),%rax
  mov    0x10(%rax),%edx
  mov    -0x28(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <NS_GET16@plt>
  mov    D131(%rip),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x1c(%rbp)
  jne    L90
  mov    -0x28(%rbp),%rax
  movq   $0x0,0x18(%rax)
  mov    -0x28(%rbp),%rax
  movl   $0x0,0x8(%rax)
  mov    -0x28(%rbp),%rax
  movq   $0x0,0x10(%rax)
  jmp    L219
L90:
  mov    -0x18(%rbp),%rax
  mov    0x10(%rax),%edx
  mov    D76(%rip),%rax
  mov    (%rax),%eax
  add    %eax,%edx
  mov    D7(%rip),%rax
  mov    (%rax),%eax
  add    %eax,%edx
  mov    -0x18(%rbp),%rax
  mov    0x14(%rax),%eax
  cmp    %eax,%edx
  jle    L183
  mov    D44(%rip),%rax
  mov    (%rax),%edx
  mov    D29(%rip),%rax
  mov    %edx,(%rax)
  mov    $0xffffffff,%eax
  jmp    L55
L183:
  mov    -0x18(%rbp),%rax
  mov    0x10(%rax),%edx
  mov    -0x28(%rbp),%rax
  mov    0x18(%rax),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <NS_GET32@plt>
  mov    -0x18(%rbp),%rax
  mov    0x10(%rax),%edx
  mov    -0x28(%rbp),%rax
  mov    0x8(%rax),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <NS_GET16@plt>
  mov    -0x18(%rbp),%rax
  mov    0x10(%rax),%edx
  mov    -0x28(%rbp),%rax
  mov    0x8(%rax),%eax
  add    %eax,%edx
  mov    -0x18(%rbp),%rax
  mov    0x14(%rax),%eax
  cmp    %eax,%edx
  jle    L137
  mov    D44(%rip),%rax
  mov    (%rax),%edx
  mov    D29(%rip),%rax
  mov    %edx,(%rax)
  mov    $0xffffffff,%eax
  jmp    L55
L137:
  mov    -0x18(%rbp),%rax
  mov    0x10(%rax),%eax
  cltq
  mov    %rax,%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,0x10(%rax)
  mov    -0x18(%rbp),%rax
  mov    0x10(%rax),%edx
  mov    -0x28(%rbp),%rax
  mov    0x8(%rax),%eax
  add    %eax,%edx
  mov    -0x18(%rbp),%rax
  mov    %edx,0x10(%rax)
L219:
  mov    -0x18(%rbp),%rax
  mov    0x4(%rax),%eax
  lea    0x1(%rax),%edx
  mov    -0x18(%rbp),%rax
  mov    %edx,0x4(%rax)
  mov    -0x18(%rbp),%rax
  mov    0x4(%rax),%edx
  mov    -0x18(%rbp),%rax
  mov    0x8(%rax),%rcx
  mov    -0x1c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  cmp    %eax,%edx
  jle    L190
  mov    -0x1c(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    -0x18(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <setsection@plt>
L190:
  mov    $0x0,%eax
L55:
  leave
  ret
```

assistant: ```c
int ns_parserr(ns_msg *handle, ns_sect section, int rrnum, ns_rr *rr) {
  int b;
  int tmp;
  tmp = section;
  if (tmp < 0 || section >= ns_s_max)
    do {
      errno = (ENODEV);
      return (-1);
    } while (0);
  if (section != handle->_sect)
    setsection(handle, section);
  if (rrnum == -1)
    rrnum = handle->_rrnum;
  if (rrnum < 0 || rrnum >= handle->_counts[(int)section])
    do {
      errno = (ENODEV);
      return (-1);
    } while (0);
  if (rrnum < handle->_rrnum)
    setsection(handle, section);
  if (rrnum > handle->_rrnum) {
    b = ns_skiprr(handle->_msg_ptr, handle->_eom, section, rrnum - handle->_rrnum);
    if (b < 0)
      return (-1);
    handle->_msg_ptr += b;
    handle->_rrnum = rrnum;
  }
  b = dn_expand(handle->_msg, handle->_eom, handle->_msg_ptr, rr->name, NS_MAXDNAME);
  if (b < 0)
    return (-1);
  handle->_msg_ptr += b;
  if (handle->_msg_ptr + NS_INT16SZ + NS_INT16SZ > handle->_eom)
    do {
      errno = (EMSGSIZE);
      return (-1);
    } while (0);
  NS_GET16(rr->type, handle->_msg_ptr);
  NS_GET16(rr->rr_class, handle->_msg_ptr);
  if (section == ns_s_qd) {
    rr->ttl = 0;
    rr->rdlength = 0;
    rr->rdata = NULL;
  } else {
    if (handle->_msg_ptr + NS_INT32SZ + NS_INT16SZ > handle->_eom)
      do {
        errno = (EMSGSIZE);
        return (-1);
      } while (0);
    NS_GET32(rr->ttl, handle->_msg_ptr);
    NS_GET16(rr->rdlength, handle->_msg_ptr);
    if (handle->_msg_ptr + rr->rdlength > handle->_eom)
      do {
        errno = (EMSGSIZE);
        return (-1);
      } while (0);
    rr->rdata = handle->_msg_ptr;
    handle->_msg_ptr += rr->rdlength;
  }
  if (++handle->_rrnum > handle->_counts[(int)section])
    setsection(handle, (ns_sect)((int)section + 1));
  return (0);
}
```