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

```asm
<parse_LD>:
  endbr64
  push   %rbp
  lea    D8(%rip),%rbp
  xor    %edi,%edi
  push   %rbx
  mov    %rbp,%rsi
  sub    $0x8,%rsp
  call   <strtok@plt>
  movzbl (%rax),%ebx
  lea    -0x42(%rbx),%edx
  cmp    $0x19,%dl
  ja     L12
  lea    D15(%rip),%rcx
  movzbl %dl,%edx
  movslq (%rcx,%rdx,4),%rdx
  add    %rcx,%rdx
  notrack jmp *%rdx
  nopw   0x0(%rax,%rax,1)
L12:
  mov    $0xffffffff,%eax
L72:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  ret
  nopl   0x0(%rax)
  mov    %rbp,%rsi
  xor    %edi,%edi
  call   <strtok@plt>
  movsbl 0x1(%rax),%edi
  call   <char2byte@plt>
  add    $0x8,%rsp
  shl    $0x8,%eax
  pop    %rbx
  pop    %rbp
  and    $0xf00,%eax
  or     $0xf055,%ax
  ret
  cs nopw 0x0(%rax,%rax,1)
  mov    %rbp,%rsi
  xor    %edi,%edi
  call   <strtok@plt>
  movsbl 0x1(%rax),%edi
  call   <char2byte@plt>
  add    $0x8,%rsp
  shl    $0x8,%eax
  pop    %rbx
  pop    %rbp
  and    $0xf00,%eax
  or     $0xf033,%ax
  ret
  cs nopw 0x0(%rax,%rax,1)
  mov    %rbp,%rsi
  xor    %edi,%edi
  call   <strtok@plt>
  movsbl 0x1(%rax),%edi
  call   <char2byte@plt>
  add    $0x8,%rsp
  shl    $0x8,%eax
  pop    %rbx
  pop    %rbp
  and    $0xf00,%eax
  or     $0xf015,%ax
  ret
  cs nopw 0x0(%rax,%rax,1)
  mov    %rbp,%rsi
  xor    %edi,%edi
  call   <strtok@plt>
  movsbl 0x1(%rax),%edi
  call   <char2byte@plt>
  add    $0x8,%rsp
  shl    $0x8,%eax
  pop    %rbx
  pop    %rbp
  and    $0xf00,%eax
  or     $0xf029,%ax
  ret
  cs nopw 0x0(%rax,%rax,1)
  mov    %rbp,%rsi
  xor    %edi,%edi
  call   <strtok@plt>
  movsbl (%rax),%edi
  mov    %rax,%rbp
  call   <char2byte@plt>
  movsbl 0x1(%rbp),%edi
  mov    %eax,%ebx
  call   <char2byte@plt>
  shl    $0x8,%ebx
  movsbl 0x2(%rbp),%edi
  shl    $0x4,%eax
  and    $0xf00,%ebx
  movzbl %al,%eax
  or     %eax,%ebx
  call   <char2byte@plt>
  add    $0x8,%rsp
  and    $0xf,%eax
  or     %ebx,%eax
  pop    %rbx
  pop    %rbp
  or     $0xa000,%ax
  ret
  nopw   0x0(%rax,%rax,1)
  mov    %rbp,%rsi
  xor    %edi,%edi
  call   <strtok@plt>
  movsbl 0x1(%rax),%edi
  call   <char2byte@plt>
  add    $0x8,%rsp
  shl    $0x8,%eax
  pop    %rbx
  pop    %rbp
  and    $0xf00,%eax
  or     $0xf018,%ax
  ret
  cs nopw 0x0(%rax,%rax,1)
  movsbl 0x1(%rax),%edi
  call   <char2byte@plt>
  mov    %rbp,%rsi
  xor    %edi,%edi
  shl    $0x8,%eax
  mov    %eax,%ebx
  call   <strtok@plt>
  and    $0xf00,%ebx
  movsbl (%rax),%edi
  mov    %rax,%rbp
  cmp    $0x56,%dil
  je     L35
  mov    %ebx,%eax
  jg     L46
  or     $0xf007,%ax
  cmp    $0x44,%dil
  je     L72
  cmp    $0x4b,%dil
  jne    L23
  mov    %ebx,%eax
  or     $0xf00a,%ax
  jmp    L72
  nopl   (%rax)
L46:
  or     $0xf065,%ax
  cmp    $0x5b,%dil
  je     L72
L23:
  call   <char2byte@plt>
  movsbl 0x1(%rbp),%edi
  shl    $0x4,%eax
  movzbl %al,%eax
  or     %eax,%ebx
  call   <char2byte@plt>
  and    $0xf,%eax
  or     %eax,%ebx
  mov    %ebx,%eax
  or     $0x60,%ah
  jmp    L72
  nopl   0x0(%rax,%rax,1)
L35:
  movsbl 0x1(%rax),%edi
  call   <char2byte@plt>
  shl    $0x4,%eax
  movzbl %al,%eax
  or     %ebx,%eax
  or     $0x8000,%ax
  jmp    L72
```

tool_calls: name: unpack_data
arguments: label: D8
type: string

tool: D8:  ,

assistant: ```c
unsigned short parse_LD() {
  unsigned short instruction = 0x0000;
  char *arg;
  arg = strtok(NULL, " ,");
  switch (arg[0]) {
  case 'V':
    instruction |= (char2byte(arg[1]) & 0x0F) << 8;
    arg = strtok(NULL, " ,");
    switch (arg[0]) {
    case 'V':
      instruction |= 0x8000;
      instruction |= (char2byte(arg[1]) & 0x0F) << 4;
      break;
    case 'D':
      instruction |= 0xF007;
      break;
    case 'K':
      instruction |= 0xF00A;
      break;
    case '[':
      instruction |= 0xF065;
      break;
    default:
      instruction |= 0x6000;
      instruction |= (char2byte(arg[0]) & 0x0F) << 4;
      instruction |= (char2byte(arg[1]) & 0x0F) << 0;
    }
    break;
  case 'I':
    instruction = 0xA000;
    arg = strtok(NULL, " ,");
    instruction |= (char2byte(arg[0]) & 0x0F) << 8;
    instruction |= (char2byte(arg[1]) & 0x0F) << 4;
    instruction |= (char2byte(arg[2]) & 0x0F) << 0;
    break;
  case 'D':
    instruction |= 0xF015;
    arg = strtok(NULL, " ,");
    instruction |= (char2byte(arg[1]) & 0x0F) << 8;
    break;
  case 'S':
    instruction |= 0xF018;
    arg = strtok(NULL, " ,");
    instruction |= (char2byte(arg[1]) & 0x0F) << 8;
    break;
  case 'F':
    instruction |= 0xF029;
    arg = strtok(NULL, " ,");
    instruction |= (char2byte(arg[1]) & 0x0F) << 8;
    break;
  case 'B':
    instruction |= 0xF033;
    arg = strtok(NULL, " ,");
    instruction |= (char2byte(arg[1]) & 0x0F) << 8;
    break;
  case '[':
    instruction |= 0xF055;
    arg = strtok(NULL, " ,");
    instruction |= (char2byte(arg[1]) & 0x0F) << 8;
    break;
  default:
    return 0xFFFF;
  }
  return instruction;
}
```