user: Demonstrate the C code that generates the assembly output below:

```asm
<ns_parserr>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  test   %esi,%esi
  js     L88
  mov    D18(%rip),%rax
  mov    %esi,%ebx
  cmp    %esi,(%rax)
  jle    L88
  mov    %rdi,%rbp
  mov    %edx,%r13d
  mov    %rcx,%r12
  cmp    %esi,(%rdi)
  je     L123
  call   <setsection@plt>
L123:
  cmp    $0xffffffff,%r13d
  jne    L44
  mov    0x4(%rbp),%r13d
L44:
  test   %r13d,%r13d
  js     L88
  mov    0x8(%rbp),%rax
  movslq %ebx,%r14
  cmp    %r13d,(%rax,%r14,4)
  jle    L88
  mov    0x4(%rbp),%eax
  cmp    %r13d,%eax
  jg     L189
L12:
  mov    0x14(%rbp),%esi
  mov    0x10(%rbp),%r9d
  cmp    %eax,%r13d
  jg     L196
L155:
  mov    D14(%rip),%rax
  mov    0x20(%r12),%ecx
  mov    %r9d,%edx
  mov    0x18(%rbp),%edi
  mov    (%rax),%r8d
  call   <dn_expand@plt>
  mov    %eax,%esi
  test   %eax,%eax
  js     L21
  mov    D78(%rip),%r13
  add    0x10(%rbp),%esi
  mov    %esi,0x10(%rbp)
  mov    0x0(%r13),%eax
  lea    (%rsi,%rax,2),%eax
  cmp    0x14(%rbp),%eax
  jg     L108
  mov    (%r12),%edi
  call   <NS_GET16@plt>
  mov    0x10(%rbp),%esi
  mov    0x4(%r12),%edi
  call   <NS_GET16@plt>
  mov    D88(%rip),%rax
  cmp    %ebx,(%rax)
  je     L197
  mov    D63(%rip),%rax
  mov    0x10(%rbp),%esi
  mov    (%rax),%ecx
  mov    0x0(%r13),%eax
  add    %esi,%ecx
  add    %ecx,%eax
  cmp    0x14(%rbp),%eax
  jg     L108
  mov    0x18(%r12),%rdi
  call   <NS_GET32@plt>
  mov    0x10(%rbp),%esi
  mov    0x8(%r12),%edi
  call   <NS_GET16@plt>
  movslq 0x10(%rbp),%rax
  mov    0x8(%r12),%edx
  add    %eax,%edx
  cmp    0x14(%rbp),%edx
  jg     L108
  mov    %rax,0x10(%r12)
  mov    %edx,0x10(%rbp)
L40:
  mov    0x4(%rbp),%eax
  mov    0x8(%rbp),%rdx
  xor    %r12d,%r12d
  add    $0x1,%eax
  mov    %eax,0x4(%rbp)
  cmp    (%rdx,%r14,4),%eax
  jg     L133
L69:
  pop    %rbx
  mov    %r12d,%eax
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  nop
L196:
  mov    %r13d,%ecx
  mov    %r9d,%edi
  mov    %ebx,%edx
  sub    %eax,%ecx
  call   <ns_skiprr@plt>
  mov    %eax,%r9d
  test   %eax,%eax
  js     L21
  add    0x10(%rbp),%r9d
  mov    0x14(%rbp),%esi
  mov    %r13d,0x4(%rbp)
  mov    %r9d,0x10(%rbp)
  jmp    L155
  xchg   %ax,%ax
L189:
  mov    %ebx,%esi
  mov    %rbp,%rdi
  call   <setsection@plt>
  mov    0x4(%rbp),%eax
  jmp    L12
  nopw   0x0(%rax,%rax,1)
L197:
  movq   $0x0,0x18(%r12)
  movl   $0x0,0x8(%r12)
  movq   $0x0,0x10(%r12)
  jmp    L40
  nopl   0x0(%rax,%rax,1)
L133:
  lea    0x1(%rbx),%esi
  mov    %rbp,%rdi
  call   <setsection@plt>
  pop    %rbx
  mov    %r12d,%eax
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  nopw   0x0(%rax,%rax,1)
L108:
  mov    D28(%rip),%rax
  mov    (%rax),%edx
  mov    D13(%rip),%rax
  mov    %edx,(%rax)
L21:
  mov    $0xffffffff,%r12d
  jmp    L69
  nopl   (%rax)
L88:
  mov    D61(%rip),%rax
  mov    $0xffffffff,%r12d
  mov    (%rax),%edx
  mov    D13(%rip),%rax
  mov    %edx,(%rax)
  jmp    L69
```

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);
}
```