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

```asm
<str2mac>:
  endbr64
  push   %rbp
  mov    $0x6,%edx
  mov    %rsi,%rbp
  xor    %esi,%esi
  push   %rbx
  mov    %rdi,%rbx
  sub    $0x8,%rsp
  call   <memset@plt>
  movzbl 0x0(%rbp),%edx
  movzbl 0x1(%rbp),%ecx
  lea    -0x30(%rdx),%eax
  cmp    $0x9,%al
  jbe    L488
  lea    -0x61(%rdx),%eax
  cmp    $0x5,%al
  jbe    L207
  lea    -0x41(%rdx),%eax
  cmp    $0x5,%al
  ja     L154
  lea    -0x37(%rdx),%eax
L488:
  lea    -0x30(%rcx),%edx
  cmp    $0x9,%dl
  jbe    L438
L10:
  lea    -0x61(%rcx),%edx
  cmp    $0x5,%dl
  jbe    L182
  lea    -0x41(%rcx),%edx
  cmp    $0x5,%dl
  ja     L154
  lea    -0x37(%rcx),%edx
L438:
  or     (%rbx),%al
  shl    $0x4,%eax
  or     %edx,%eax
  mov    %al,(%rbx)
  movzbl 0x3(%rbp),%edx
  movzbl 0x4(%rbp),%ecx
  lea    -0x30(%rdx),%eax
  cmp    $0x9,%al
  jbe    L115
  lea    -0x61(%rdx),%eax
  cmp    $0x5,%al
  jbe    L287
  lea    -0x41(%rdx),%eax
  cmp    $0x5,%al
  ja     L154
  lea    -0x37(%rdx),%eax
L115:
  lea    -0x30(%rcx),%edx
  cmp    $0x9,%dl
  jbe    L65
L431:
  lea    -0x61(%rcx),%edx
  cmp    $0x5,%dl
  jbe    L77
  lea    -0x41(%rcx),%edx
  cmp    $0x5,%dl
  ja     L154
  lea    -0x37(%rcx),%edx
L65:
  or     0x1(%rbx),%al
  shl    $0x4,%eax
  or     %edx,%eax
  mov    %al,0x1(%rbx)
  movzbl 0x6(%rbp),%edx
  movzbl 0x7(%rbp),%ecx
  lea    -0x30(%rdx),%eax
  cmp    $0x9,%al
  jbe    L362
  lea    -0x61(%rdx),%eax
  cmp    $0x5,%al
  jbe    L26
  lea    -0x41(%rdx),%eax
  cmp    $0x5,%al
  ja     L154
  lea    -0x37(%rdx),%eax
L362:
  lea    -0x30(%rcx),%edx
  cmp    $0x9,%dl
  jbe    L540
L385:
  lea    -0x61(%rcx),%edx
  cmp    $0x5,%dl
  jbe    L119
  lea    -0x41(%rcx),%edx
  cmp    $0x5,%dl
  ja     L154
  lea    -0x37(%rcx),%edx
L540:
  or     0x2(%rbx),%al
  shl    $0x4,%eax
  or     %edx,%eax
  mov    %al,0x2(%rbx)
  movzbl 0x9(%rbp),%edx
  movzbl 0xa(%rbp),%ecx
  lea    -0x30(%rdx),%eax
  cmp    $0x9,%al
  jbe    L6
  lea    -0x61(%rdx),%eax
  cmp    $0x5,%al
  jbe    L198
  lea    -0x41(%rdx),%eax
  cmp    $0x5,%al
  ja     L154
  lea    -0x37(%rdx),%eax
L6:
  lea    -0x30(%rcx),%edx
  cmp    $0x9,%dl
  jbe    L322
L421:
  lea    -0x61(%rcx),%edx
  cmp    $0x5,%dl
  jbe    L304
  lea    -0x41(%rcx),%edx
  cmp    $0x5,%dl
  ja     L154
  lea    -0x37(%rcx),%edx
L322:
  or     0x3(%rbx),%al
  shl    $0x4,%eax
  or     %edx,%eax
  mov    %al,0x3(%rbx)
  movzbl 0xc(%rbp),%edx
  movzbl 0xd(%rbp),%ecx
  lea    -0x30(%rdx),%eax
  cmp    $0x9,%al
  jbe    L150
  lea    -0x61(%rdx),%eax
  cmp    $0x5,%al
  jbe    L209
  lea    -0x41(%rdx),%eax
  cmp    $0x5,%al
  ja     L154
  lea    -0x37(%rdx),%eax
L150:
  lea    -0x30(%rcx),%edx
  cmp    $0x9,%dl
  jbe    L170
L191:
  lea    -0x61(%rcx),%edx
  cmp    $0x5,%dl
  jbe    L112
  lea    -0x41(%rcx),%edx
  cmp    $0x5,%dl
  ja     L154
  lea    -0x37(%rcx),%edx
L170:
  or     0x4(%rbx),%al
  shl    $0x4,%eax
  or     %edx,%eax
  mov    %al,0x4(%rbx)
  movzbl 0xf(%rbp),%edx
  movzbl 0x10(%rbp),%ecx
  lea    -0x30(%rdx),%eax
  cmp    $0x9,%al
  jbe    L337
  lea    -0x61(%rdx),%eax
  cmp    $0x5,%al
  ja     L302
  lea    -0x57(%rdx),%eax
L337:
  lea    -0x30(%rcx),%edx
  cmp    $0x9,%dl
  ja     L480
L91:
  or     0x5(%rbx),%al
  shl    $0x4,%eax
  or     %edx,%eax
  mov    %al,0x5(%rbx)
  add    $0x8,%rsp
  mov    $0x1,%eax
  pop    %rbx
  pop    %rbp
  ret
  nopl   0x0(%rax)
L480:
  lea    -0x61(%rcx),%edx
  cmp    $0x5,%dl
  ja     L189
  lea    -0x57(%rcx),%edx
  jmp    L91
  nopl   0x0(%rax)
L207:
  lea    -0x57(%rdx),%eax
  lea    -0x30(%rcx),%edx
  cmp    $0x9,%dl
  jbe    L438
  jmp    L10
  nopl   0x0(%rax)
L182:
  lea    -0x57(%rcx),%edx
  jmp    L438
L287:
  lea    -0x57(%rdx),%eax
  lea    -0x30(%rcx),%edx
  cmp    $0x9,%dl
  jbe    L65
  jmp    L431
  nopl   0x0(%rax)
L77:
  lea    -0x57(%rcx),%edx
  jmp    L65
L26:
  lea    -0x57(%rdx),%eax
  lea    -0x30(%rcx),%edx
  cmp    $0x9,%dl
  jbe    L540
  jmp    L385
  nopl   0x0(%rax)
L119:
  lea    -0x57(%rcx),%edx
  jmp    L540
L198:
  lea    -0x57(%rdx),%eax
  lea    -0x30(%rcx),%edx
  cmp    $0x9,%dl
  jbe    L322
  jmp    L421
  nopl   0x0(%rax)
L304:
  lea    -0x57(%rcx),%edx
  jmp    L322
L209:
  lea    -0x57(%rdx),%eax
  lea    -0x30(%rcx),%edx
  cmp    $0x9,%dl
  jbe    L170
  jmp    L191
  nopl   0x0(%rax)
L112:
  lea    -0x57(%rcx),%edx
  jmp    L170
L302:
  lea    -0x41(%rdx),%eax
  cmp    $0x5,%al
  ja     L154
  lea    -0x37(%rdx),%eax
  lea    -0x30(%rcx),%edx
  cmp    $0x9,%dl
  jbe    L91
  jmp    L480
  nopl   0x0(%rax,%rax,1)
L189:
  lea    -0x41(%rcx),%edx
  cmp    $0x5,%dl
  ja     L154
  lea    -0x37(%rcx),%edx
  jmp    L91
L154:
  add    $0x8,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  ret
```

assistant: ```c
int str2mac(unsigned char *mac_addr, char *str) {
  int i;
  char high, low;
  char *ptr = str;
  memset(mac_addr, 0, 6);
  for (i = 0; i < 6; i++) {
    high = *ptr;
    low = *(ptr + 1);
    if (high >= 48 && high <= 57)
      high -= 48;
    else if (high >= 97 && high <= 102)
      high -= 87;
    else if (high >= 65 && high <= 70)
      high -= 55;
    else
      return 0;
    if (low >= 48 && low <= 57)
      low -= 48;
    else if (low >= 97 && low <= 102)
      low -= 87;
    else if (low >= 65 && low <= 70)
      low -= 55;
    else
      return 0;
    mac_addr[i] |= high;
    mac_addr[i] = mac_addr[i] << 4;
    mac_addr[i] |= low;
    ptr = ptr + 3;
  }
  return 1;
}
```