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

```asm
<format_address>:
  endbr64
  push   %r12
  mov    %rdi,%r12
  push   %rbp
  mov    %rsi,%rbp
  push   %rbx
  mov    %r8d,%ebx
  cmp    $0x4,%rcx
  je     L159
  cmp    $0x10,%rcx
  je     L145
  test   %rsi,%rsi
  je     L30
  movb   $0x0,(%rdi)
L81:
  cmp    $0xffffffff,%ebx
  je     L198
  mov    %r12,%rdi
  call   <strlen@plt>
  mov    $0xcccccccd,%edi
  mov    %ebx,%esi
  mov    %rax,%rcx
  mov    %ebx,%eax
  imul   %rdi,%rax
  shr    $0x23,%rax
  lea    (%rax,%rax,4),%edx
  add    %edx,%edx
  sub    %edx,%esi
  mov    %eax,%edx
  add    $0x30,%esi
  cmp    %rcx,%rbp
  jbe    L172
  movb   $0x2f,(%r12,%rcx,1)
  lea    0x1(%rcx),%rdx
  cmp    $0x9,%ebx
  ja     L89
L177:
  cmp    %rdx,%rbp
  jbe    L27
  lea    0x1(%rdx),%rax
  mov    %sil,(%r12,%rdx,1)
  cmp    %rax,%rbp
  jbe    L27
  movb   $0x0,0x1(%r12,%rdx,1)
L198:
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nopw   0x0(%rax,%rax,1)
L30:
  cmp    $0xffffffff,%r8d
  je     L198
  mov    %r12,%rdi
  call   <strlen@plt>
  mov    $0xcccccccd,%edx
  mov    %ebx,%esi
  mov    %rax,%rcx
  mov    %ebx,%eax
  sub    $0xa,%ebx
  imul   %rdx,%rax
  shr    $0x23,%rax
  lea    (%rax,%rax,4),%edx
  add    %edx,%edx
  sub    %edx,%esi
  mov    %eax,%edx
  add    $0x30,%esi
  cmp    $0x59,%ebx
  ja     L198
L97:
  mov    $0xcccccccd,%edi
  mov    %edx,%eax
  imul   %rdi,%rax
  shr    $0x23,%rax
  lea    (%rax,%rax,4),%edi
  mov    %edx,%eax
  add    %edi,%edi
  sub    %edi,%eax
  mov    %rcx,%rdi
  add    $0x30,%eax
L96:
  cmp    %rbp,%rdi
  jae    L243
L13:
  mov    %al,(%r12,%rdi,1)
  lea    0x1(%rdi),%rdx
  jmp    L177
  nopw   0x0(%rax,%rax,1)
L159:
  call   <format_ipv4_address@plt>
  lea    -0x21(%rbx),%eax
  cmp    $0xffffffdd,%eax
  ja     L81
  mov    %r12,%rdi
  call   <strlen@plt>
  mov    %rax,%rcx
  cmp    %rax,%rbp
  ja     L87
  mov    $0x3,%edx
  mov    $0x32,%esi
  jmp    L97
  nopl   0x0(%rax)
L89:
  mov    %eax,%ecx
  imul   %rdi,%rcx
  shr    $0x23,%rcx
  lea    (%rcx,%rcx,4),%edi
  mov    %ecx,%r8d
  add    %edi,%edi
  sub    %edi,%eax
  mov    %rdx,%rdi
  add    $0x30,%eax
L65:
  cmp    $0x63,%ebx
  jbe    L96
  lea    0x30(%r8),%ecx
  cmp    %rdi,%rbp
  jbe    L243
  mov    %cl,(%r12,%rdi,1)
  add    $0x1,%rdi
  cmp    %rdi,%rbp
  ja     L13
L27:
  movb   $0x0,-0x1(%r12,%rbp,1)
L111:
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nopl   0x0(%rax,%rax,1)
L145:
  call   <format_ipv6_address@plt>
  lea    -0x81(%rbx),%eax
  cmp    $0xffffff7d,%eax
  ja     L81
  mov    %r12,%rdi
  call   <strlen@plt>
  mov    %rax,%rcx
  cmp    %rax,%rbp
  ja     L47
L243:
  test   %rbp,%rbp
  je     L198
  movb   $0x0,-0x1(%r12,%rbp,1)
  jmp    L111
  nopw   0x0(%rax,%rax,1)
L172:
  sub    $0xa,%ebx
  cmp    $0x59,%ebx
  ja     L243
  jmp    L97
  nopl   (%rax)
L87:
  xor    %r8d,%r8d
  mov    $0x33,%eax
  mov    $0x20,%ebx
  mov    $0x32,%esi
L214:
  movb   $0x2f,(%r12,%rcx,1)
  lea    0x1(%rcx),%rdi
  jmp    L65
L47:
  mov    $0x1,%r8d
  mov    $0x32,%eax
  mov    $0x80,%ebx
  mov    $0x38,%esi
  jmp    L214
```

assistant: ```c
void format_address(char *buf, size_t sizeof_buf, const void *v_addr, size_t sizeof_addr, unsigned prefix_length) {
  if (sizeof_addr == 4) {
    format_ipv4_address(buf, sizeof_buf, v_addr);
    if (prefix_length != ~0 && prefix_length > 32)
      prefix_length = 32;
  } else if (sizeof_addr == 16) {
    format_ipv6_address(buf, sizeof_buf, v_addr);
    if (prefix_length != ~0 && prefix_length > 128)
      prefix_length = 128;
  } else if (sizeof_buf > 0)
    buf[0] = '\0';
  if (prefix_length != ~0) {
    size_t d = strlen(buf);
    char c2;
    unsigned number = prefix_length;
    if (d < sizeof_buf)
      buf[d++] = '/';
    c2 = (number % 10) + '0';
    number /= 10;
    if (number) {
      char c1;
      c1 = (number % 10) + '0';
      number /= 10;
      if (number) {
        int c0;
        c0 = number + '0';
        if (d < sizeof_buf)
          buf[d++] = (char)c0;
      }
      if (d < sizeof_buf)
        buf[d++] = c1;
    }
    if (d < sizeof_buf)
      buf[d++] = c2;
    if (d < sizeof_buf)
      buf[d] = '\0';
    else if (sizeof_buf)
      buf[sizeof_buf - 1] = '\0';
  }
}
```