user: 请从给定的汇编指令推导出C源代码：

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

tool_calls: name: disassemble_data
arguments: tag: D36
data_type: string

tool: D36:  ,

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