user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<get_minor_device_name>:
  endbr64
  cmp    $0x3f,%edi
  ja     L774
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    %esi,%ebx
  mov    %edi,%edi
  lea    D648(%rip),%rdx
  movslq (%rdx,%rdi,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D707(%rip),%rax
L399:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  ret
  cmp    $0x6,%esi
  ja     L656
  mov    %esi,%ebx
  lea    D441(%rip),%rdx
  movslq (%rdx,%rbx,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D770(%rip),%rax
  jmp    L399
  lea    D523(%rip),%rax
  jmp    L399
  lea    D649(%rip),%rax
  jmp    L399
  lea    D537(%rip),%rax
  jmp    L399
  lea    D916(%rip),%rax
  jmp    L399
  lea    D898(%rip),%rax
  jmp    L399
  cmp    $0x6,%esi
  ja     L471
  mov    %esi,%ebx
  lea    D129(%rip),%rdx
  movslq (%rdx,%rbx,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D924(%rip),%rax
  jmp    L399
  lea    D959(%rip),%rax
  jmp    L399
  lea    D295(%rip),%rax
  jmp    L399
  lea    D832(%rip),%rax
  jmp    L399
  lea    D893(%rip),%rax
  jmp    L399
  lea    D627(%rip),%rax
  jmp    L399
  lea    D674(%rip),%rax
  test   %esi,%esi
  je     L399
  lea    0x7(%rsi),%eax
  cmovns %esi,%eax
  mov    %eax,%edx
  sar    $0x3,%edx
  cmp    $0x3f,%eax
  ja     L599
  mov    %edx,%eax
  lea    D109(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D617(%rip),%rax
  jmp    L399
  lea    D478(%rip),%rax
  jmp    L399
  lea    D611(%rip),%rax
  jmp    L399
  lea    D689(%rip),%rax
  jmp    L399
  lea    D765(%rip),%rax
  jmp    L399
  lea    D525(%rip),%rax
  jmp    L399
  lea    D863(%rip),%rax
  jmp    L399
  cmp    $0x12,%esi
  ja     L589
  mov    %esi,%ebx
  lea    D815(%rip),%rdx
  movslq (%rdx,%rbx,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D130(%rip),%rax
  jmp    L399
  lea    D138(%rip),%rax
  jmp    L399
  lea    D871(%rip),%rax
  jmp    L399
  lea    D31(%rip),%rax
  jmp    L399
  lea    D768(%rip),%rax
  jmp    L399
  lea    D9(%rip),%rax
  jmp    L399
  lea    D857(%rip),%rax
  jmp    L399
  lea    D918(%rip),%rax
  jmp    L399
  lea    D838(%rip),%rax
  jmp    L399
  lea    D190(%rip),%rax
  jmp    L399
  lea    D876(%rip),%rax
  jmp    L399
  lea    D951(%rip),%rax
  jmp    L399
  lea    D716(%rip),%rax
  jmp    L399
  lea    D771(%rip),%rax
  jmp    L399
  lea    D174(%rip),%rax
  jmp    L399
  lea    D542(%rip),%rax
  jmp    L399
  movb   $0x0,D672(%rip)
  mov    %esi,%eax
  and    $0x30,%eax
  cmp    $0x20,%eax
  je     L309
  cmp    $0x30,%eax
  je     L30
  cmp    $0x10,%eax
  je     L746
L710:
  mov    %ebx,%ebp
  and    $0xf,%ebp
  jne    L787
L311:
  lea    D672(%rip),%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  lea    D672(%rip),%rax
  test   %edx,%edx
  jg     L399
  lea    D604(%rip),%rax
  test   $0x4,%bl
  jne    L399
  lea    D278(%rip),%rax
  test   $0x8,%bl
  jne    L399
  lea    D789(%rip),%rax
  test   $0x10,%bl
  jne    L399
  test   $0x20,%bl
  lea    D707(%rip),%rax
  lea    D30(%rip),%rdx
  cmovne %rdx,%rax
  jmp    L399
L746:
  mov    $0x30,%edx
  lea    D757(%rip),%rsi
  lea    D672(%rip),%rdi
  call   <strncpy@plt>
  jmp    L710
L309:
  mov    $0x30,%edx
  lea    D530(%rip),%rsi
  lea    D672(%rip),%rdi
  call   <strncpy@plt>
  jmp    L710
L30:
  mov    $0x30,%edx
  lea    D242(%rip),%rsi
  lea    D672(%rip),%rdi
  call   <strncpy@plt>
  jmp    L710
L787:
  lea    D672(%rip),%rdi
  call   <strlen@plt>
  test   %eax,%eax
  jg     L130
L796:
  cmp    $0x6,%ebp
  ja     L561
  mov    %ebp,%ebp
  lea    D952(%rip),%rdx
  movslq (%rdx,%rbp,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
L130:
  lea    D590(%rip),%rsi
  lea    D672(%rip),%rdi
  call   <strcat@plt>
  jmp    L796
  lea    D672(%rip),%rbp
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    $0x30,%edx
  sub    %eax,%edx
  lea    D280(%rip),%rsi
  mov    %rbp,%rdi
  call   <strncat@plt>
  jmp    L311
  lea    D672(%rip),%rbp
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    $0x30,%edx
  sub    %eax,%edx
  lea    D103(%rip),%rsi
  mov    %rbp,%rdi
  call   <strncat@plt>
  jmp    L311
  lea    D672(%rip),%rbp
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    $0x30,%edx
  sub    %eax,%edx
  lea    D854(%rip),%rsi
  mov    %rbp,%rdi
  call   <strncat@plt>
  jmp    L311
  lea    D672(%rip),%rbp
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    $0x30,%edx
  sub    %eax,%edx
  lea    D68(%rip),%rsi
  mov    %rbp,%rdi
  call   <strncat@plt>
  jmp    L311
  lea    D672(%rip),%rbp
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    $0x30,%edx
  sub    %eax,%edx
  lea    D784(%rip),%rsi
  mov    %rbp,%rdi
  call   <strncat@plt>
  jmp    L311
  lea    D672(%rip),%rbp
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    $0x30,%edx
  sub    %eax,%edx
  lea    D630(%rip),%rsi
  mov    %rbp,%rdi
  call   <strncat@plt>
  jmp    L311
L561:
  lea    D672(%rip),%rbp
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    $0x30,%edx
  sub    %eax,%edx
  lea    D447(%rip),%rsi
  mov    %rbp,%rdi
  call   <strncat@plt>
  jmp    L311
  cmp    $0x5,%esi
  ja     L547
  mov    %esi,%ebx
  lea    D414(%rip),%rdx
  movslq (%rdx,%rbx,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D729(%rip),%rax
  jmp    L399
  lea    D262(%rip),%rax
  jmp    L399
  lea    D963(%rip),%rax
  jmp    L399
  lea    D132(%rip),%rax
  jmp    L399
  cmp    $0x5,%esi
  ja     L348
  mov    %esi,%ebx
  lea    D553(%rip),%rdx
  movslq (%rdx,%rbx,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D588(%rip),%rax
  jmp    L399
  lea    D822(%rip),%rax
  jmp    L399
  lea    D818(%rip),%rax
  jmp    L399
  lea    D261(%rip),%rax
  jmp    L399
L348:
  lea    D707(%rip),%rax
  jmp    L399
L547:
  lea    D707(%rip),%rax
  jmp    L399
L589:
  lea    D707(%rip),%rax
  jmp    L399
L599:
  lea    D707(%rip),%rax
  jmp    L399
L471:
  lea    D707(%rip),%rax
  jmp    L399
L656:
  lea    D707(%rip),%rax
  jmp    L399
  lea    D644(%rip),%rax
  jmp    L399
  lea    D674(%rip),%rax
  jmp    L399
  lea    D674(%rip),%rax
  jmp    L399
  lea    D275(%rip),%rax
  jmp    L399
  lea    D674(%rip),%rax
  jmp    L399
  lea    D101(%rip),%rax
  jmp    L399
  lea    D383(%rip),%rax
  jmp    L399
L774:
  lea    D707(%rip),%rax
  ret
```

tool_calls: name: retrieve_data
arguments: label: D707
data_type: string
name: retrieve_data
arguments: label: D770
data_type: string
name: retrieve_data
arguments: label: D523
data_type: string
name: retrieve_data
arguments: label: D649
data_type: string
name: retrieve_data
arguments: label: D537
data_type: string
name: retrieve_data
arguments: label: D916
data_type: string
name: retrieve_data
arguments: label: D898
data_type: string
name: retrieve_data
arguments: label: D924
data_type: string
name: retrieve_data
arguments: label: D959
data_type: string
name: retrieve_data
arguments: label: D295
data_type: string
name: retrieve_data
arguments: label: D832
data_type: string
name: retrieve_data
arguments: label: D893
data_type: string
name: retrieve_data
arguments: label: D627
data_type: string
name: retrieve_data
arguments: label: D674
data_type: string
name: retrieve_data
arguments: label: D617
data_type: string
name: retrieve_data
arguments: label: D478
data_type: string
name: retrieve_data
arguments: label: D611
data_type: string
name: retrieve_data
arguments: label: D689
data_type: string
name: retrieve_data
arguments: label: D765
data_type: string
name: retrieve_data
arguments: label: D525
data_type: string
name: retrieve_data
arguments: label: D863
data_type: string
name: retrieve_data
arguments: label: D130
data_type: string
name: retrieve_data
arguments: label: D138
data_type: string
name: retrieve_data
arguments: label: D871
data_type: string
name: retrieve_data
arguments: label: D31
data_type: string
name: retrieve_data
arguments: label: D768
data_type: string
name: retrieve_data
arguments: label: D9
data_type: string
name: retrieve_data
arguments: label: D857
data_type: string
name: retrieve_data
arguments: label: D918
data_type: string
name: retrieve_data
arguments: label: D838
data_type: string
name: retrieve_data
arguments: label: D190
data_type: string
name: retrieve_data
arguments: label: D876
data_type: string
name: retrieve_data
arguments: label: D951
data_type: string
name: retrieve_data
arguments: label: D716
data_type: string
name: retrieve_data
arguments: label: D771
data_type: string
name: retrieve_data
arguments: label: D174
data_type: string
name: retrieve_data
arguments: label: D542
data_type: string
name: retrieve_data
arguments: label: D604
data_type: string
name: retrieve_data
arguments: label: D278
data_type: string
name: retrieve_data
arguments: label: D789
data_type: string
name: retrieve_data
arguments: label: D30
data_type: string
name: retrieve_data
arguments: label: D757
data_type: string
name: retrieve_data
arguments: label: D530
data_type: string
name: retrieve_data
arguments: label: D242
data_type: string
name: retrieve_data
arguments: label: D590
data_type: string
name: retrieve_data
arguments: label: D280
data_type: string
name: retrieve_data
arguments: label: D103
data_type: string
name: retrieve_data
arguments: label: D854
data_type: string
name: retrieve_data
arguments: label: D68
data_type: string
name: retrieve_data
arguments: label: D784
data_type: string
name: retrieve_data
arguments: label: D630
data_type: string
name: retrieve_data
arguments: label: D447
data_type: string
name: retrieve_data
arguments: label: D729
data_type: string
name: retrieve_data
arguments: label: D262
data_type: string
name: retrieve_data
arguments: label: D963
data_type: string
name: retrieve_data
arguments: label: D132
data_type: string
name: retrieve_data
arguments: label: D588
data_type: string
name: retrieve_data
arguments: label: D822
data_type: string
name: retrieve_data
arguments: label: D818
data_type: string
name: retrieve_data
arguments: label: D261
data_type: string
name: retrieve_data
arguments: label: D644
data_type: string
name: retrieve_data
arguments: label: D275
data_type: string
name: retrieve_data
arguments: label: D101
data_type: string
name: retrieve_data
arguments: label: D383
data_type: string

tool: D707: Unknown

tool: D770: Desktop workstation

tool: D523: Server

tool: D649: Laptop

tool: D537: Handheld

tool: D916: Palm

tool: D898: Wearable

tool: D924: Cellular

tool: D959: Cordless

tool: D295: Smart phone

tool: D832: Wired modem / voice gateway

tool: D893: Common ISDN Access

tool: D627: Sim Card Reader

tool: D674: Uncategorized

tool: D617: 1-17% utilized

tool: D478: 17-33% utilized

tool: D611: 33-50% utilized

tool: D689: 50-67% utilized

tool: D765: 67-83% utilized

tool: D525: 83-99% utilized

tool: D863: No service available

tool: D130: Headset profile

tool: D138: Hands-free

tool: D871: Microphone

tool: D31: Loudspeaker

tool: D768: Headphones

tool: D9: Portable Audio

tool: D857: Car Audio

tool: D918: Set-top box

tool: D838: HiFi Audio Device

tool: D190: VCR

tool: D876: Video Camera

tool: D951: Camcorder

tool: D716: Video Monitor

tool: D771: Video Display and Loudspeaker

tool: D174: Video Conferencing

tool: D542: Gaming/Toy

tool: D604: Display

tool: D278: Camera

tool: D789: Scanner

tool: D30: Printer

tool: D757: Keyboard

tool: D530: Pointing device

tool: D242: Combo keyboard/pointing device

tool: D590: /

tool: D280: Joystick

tool: D103: Gamepad

tool: D854: Remote control

tool: D68: Sensing device

tool: D784: Digitizer tablet

tool: D630: Card reader

tool: D447: (reserved)

tool: D729: Pager

tool: D262: Jacket

tool: D963: Helmet

tool: D132: Glasses

tool: D588: Vehicle

tool: D822: Doll / Action Figure

tool: D818: Controller

tool: D261: Game

tool: 

tool: D275: Fully available

tool: D101: Wrist Watch

tool: D383: Robot

assistant: ```c
char *get_minor_device_name(int major, int minor) {
  switch (major) {
  case 0:
    return "";
  case 1:
    switch (minor) {
    case 0:
      return "Uncategorized";
    case 1:
      return "Desktop workstation";
    case 2:
      return "Server";
    case 3:
      return "Laptop";
    case 4:
      return "Handheld";
    case 5:
      return "Palm";
    case 6:
      return "Wearable";
    }
    break;
  case 2:
    switch (minor) {
    case 0:
      return "Uncategorized";
    case 1:
      return "Cellular";
    case 2:
      return "Cordless";
    case 3:
      return "Smart phone";
    case 4:
      return "Wired modem / voice gateway";
    case 5:
      return "Common ISDN Access";
    case 6:
      return "Sim Card Reader";
    }
    break;
  case 3:
    if (minor == 0)
      return "Uncategorized";
    switch (minor / 8) {
    case 0:
      return "Fully available";
    case 1:
      return "1-17% utilized";
    case 2:
      return "17-33% utilized";
    case 3:
      return "33-50% utilized";
    case 4:
      return "50-67% utilized";
    case 5:
      return "67-83% utilized";
    case 6:
      return "83-99% utilized";
    case 7:
      return "No service available";
    }
    break;
  case 4:
    switch (minor) {
    case 0:
      return "Uncategorized";
    case 1:
      return "Headset profile";
    case 2:
      return "Hands-free";
    case 4:
      return "Microphone";
    case 5:
      return "Loudspeaker";
    case 6:
      return "Headphones";
    case 7:
      return "Portable Audio";
    case 8:
      return "Car Audio";
    case 9:
      return "Set-top box";
    case 10:
      return "HiFi Audio Device";
    case 11:
      return "VCR";
    case 12:
      return "Video Camera";
    case 13:
      return "Camcorder";
    case 14:
      return "Video Monitor";
    case 15:
      return "Video Display and Loudspeaker";
    case 16:
      return "Video Conferencing";
    case 18:
      return "Gaming/Toy";
    }
    break;
  case 5: {
    static char cls_str[48];
    cls_str[0] = '\0';
    switch (minor & 48) {
    case 16:
      strncpy(cls_str, "Keyboard", sizeof(cls_str));
      break;
    case 32:
      strncpy(cls_str, "Pointing device", sizeof(cls_str));
      break;
    case 48:
      strncpy(cls_str, "Combo keyboard/pointing device", sizeof(cls_str));
      break;
    }
    if ((minor & 15) && (strlen(cls_str) > 0))
      strcat(cls_str, "/");
    switch (minor & 15) {
    case 0:
      break;
    case 1:
      strncat(cls_str, "Joystick", sizeof(cls_str) - strlen(cls_str));
      break;
    case 2:
      strncat(cls_str, "Gamepad", sizeof(cls_str) - strlen(cls_str));
      break;
    case 3:
      strncat(cls_str, "Remote control", sizeof(cls_str) - strlen(cls_str));
      break;
    case 4:
      strncat(cls_str, "Sensing device", sizeof(cls_str) - strlen(cls_str));
      break;
    case 5:
      strncat(cls_str, "Digitizer tablet", sizeof(cls_str) - strlen(cls_str));
      break;
    case 6:
      strncat(cls_str, "Card reader", sizeof(cls_str) - strlen(cls_str));
      break;
    default:
      strncat(cls_str, "(reserved)", sizeof(cls_str) - strlen(cls_str));
      break;
    }
    if (strlen(cls_str) > 0)
      return cls_str;
  }
  case 6:
    if (minor & 4)
      return "Display";
    if (minor & 8)
      return "Camera";
    if (minor & 16)
      return "Scanner";
    if (minor & 32)
      return "Printer";
    break;
  case 7:
    switch (minor) {
    case 1:
      return "Wrist Watch";
    case 2:
      return "Pager";
    case 3:
      return "Jacket";
    case 4:
      return "Helmet";
    case 5:
      return "Glasses";
    }
    break;
  case 8:
    switch (minor) {
    case 1:
      return "Robot";
    case 2:
      return "Vehicle";
    case 3:
      return "Doll / Action Figure";
    case 4:
      return "Controller";
    case 5:
      return "Game";
    }
    break;
  case 63:
    return "";
  }
  return "Unknown";
}
```