user: 下面的汇编指令对应的C源代码是什么:

```asm
<get_mode_str>:
  endbr64
  mov    0x4(%rdi),%esi
  cmp    $0xae,%esi
  ja     L7
  mov    %esi,%eax
  lea    D99(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D394(%rip),%rax
  ret
  lea    D102(%rip),%rax
  ret
  lea    D306(%rip),%rax
  ret
  lea    D405(%rip),%rax
  ret
  lea    D71(%rip),%rax
  ret
  lea    D356(%rip),%rax
  ret
  lea    D22(%rip),%rax
  ret
  lea    D88(%rip),%rax
  ret
  lea    D446(%rip),%rax
  ret
  lea    D112(%rip),%rax
  ret
  lea    D186(%rip),%rax
  ret
  lea    D155(%rip),%rax
  ret
  lea    D226(%rip),%rax
  ret
  lea    D383(%rip),%rax
  ret
  lea    D350(%rip),%rax
  ret
  lea    D409(%rip),%rax
  ret
  lea    D329(%rip),%rax
  ret
  lea    D301(%rip),%rax
  ret
  lea    D108(%rip),%rax
  ret
  lea    D229(%rip),%rax
  ret
  lea    D55(%rip),%rax
  ret
  lea    D129(%rip),%rax
  ret
  lea    D246(%rip),%rax
  ret
  lea    D200(%rip),%rax
  ret
  lea    D449(%rip),%rax
  ret
  lea    D216(%rip),%rax
  ret
  lea    D364(%rip),%rax
  ret
  lea    D32(%rip),%rax
  ret
  lea    D174(%rip),%rax
  ret
  lea    D440(%rip),%rax
  ret
  lea    D133(%rip),%rax
  ret
  lea    D285(%rip),%rax
  ret
  lea    D25(%rip),%rax
  ret
  lea    D224(%rip),%rax
  ret
  lea    D141(%rip),%rax
  ret
  lea    D140(%rip),%rax
  ret
  lea    D82(%rip),%rax
  ret
  lea    D9(%rip),%rax
  ret
  lea    D254(%rip),%rax
  ret
  lea    D369(%rip),%rax
  ret
  lea    D407(%rip),%rax
  ret
  lea    D107(%rip),%rax
  ret
L7:
  sub    $0x8,%rsp
  lea    D151(%rip),%rdi
  call   <printf@plt>
  lea    D451(%rip),%rax
  add    $0x8,%rsp
  ret
  lea    D309(%rip),%rax
  ret
```

tool_calls: name: parse_data
arguments: tag: D394
type: string
name: parse_data
arguments: tag: D102
type: string
name: parse_data
arguments: tag: D306
type: string
name: parse_data
arguments: tag: D405
type: string
name: parse_data
arguments: tag: D71
type: string
name: parse_data
arguments: tag: D356
type: string
name: parse_data
arguments: tag: D22
type: string
name: parse_data
arguments: tag: D88
type: string
name: parse_data
arguments: tag: D446
type: string
name: parse_data
arguments: tag: D112
type: string
name: parse_data
arguments: tag: D186
type: string
name: parse_data
arguments: tag: D155
type: string
name: parse_data
arguments: tag: D226
type: string
name: parse_data
arguments: tag: D383
type: string
name: parse_data
arguments: tag: D350
type: string
name: parse_data
arguments: tag: D409
type: string
name: parse_data
arguments: tag: D329
type: string
name: parse_data
arguments: tag: D301
type: string
name: parse_data
arguments: tag: D108
type: string
name: parse_data
arguments: tag: D229
type: string
name: parse_data
arguments: tag: D55
type: string
name: parse_data
arguments: tag: D129
type: string
name: parse_data
arguments: tag: D246
type: string
name: parse_data
arguments: tag: D200
type: string
name: parse_data
arguments: tag: D449
type: string
name: parse_data
arguments: tag: D216
type: string
name: parse_data
arguments: tag: D364
type: string
name: parse_data
arguments: tag: D32
type: string
name: parse_data
arguments: tag: D174
type: string
name: parse_data
arguments: tag: D440
type: string
name: parse_data
arguments: tag: D133
type: string
name: parse_data
arguments: tag: D285
type: string
name: parse_data
arguments: tag: D25
type: string
name: parse_data
arguments: tag: D224
type: string
name: parse_data
arguments: tag: D141
type: string
name: parse_data
arguments: tag: D140
type: string
name: parse_data
arguments: tag: D82
type: string
name: parse_data
arguments: tag: D9
type: string
name: parse_data
arguments: tag: D254
type: string
name: parse_data
arguments: tag: D369
type: string
name: parse_data
arguments: tag: D407
type: string
name: parse_data
arguments: tag: D107
type: string
name: parse_data
arguments: tag: D151
type: string
name: parse_data
arguments: tag: D451
type: string
name: parse_data
arguments: tag: D309
type: string

tool: D394: Show freeze frame

tool: D102: Read DTCs

tool: D306: Clear DTCs

tool: D405: Mode Test Results (Non-CAN)

tool: D71: Mode Test Results (CAN)

tool: D356: Read Pending DTCs

tool: D22: Control Operations

tool: D88: Vehicle Information

tool: D446: Read Permanent DTCs

tool: D112: Diagnostic Control

tool: D186: ECU Reset

tool: D155: UDS Clear DTCs

tool: D226: UDS Read DTCs

tool: D383: Read DID by ID (GM)

tool: D350: Restore Normal Commnications

tool: D409: Read DATA By ID

tool: D329: Read Memory By Address

tool: D301: Read Scalling Data by ID

tool: D108: Security Access

tool: D229: Communication Control

tool: D55: Read DATA By ID Periodically

tool: D129: Define DATA By ID

tool: D246: Write DATA By ID

tool: D200: Input/Output Control By ID

tool: D449: Routine Control

tool: D216: Request Download

tool: D364: Request Upload

tool: D32: Transfer DATA

tool: D174: Request Transfer Exit

tool: D440: Request Transfer File

tool: D133: Write Memory By Address

tool: D285: Tester Present

tool: D25: Access Timing

tool: D224: Secured DATA Transfer

tool: D141: Control DTC Settings

tool: D140: Response On Event

tool: D82: Link Control

tool: D9: Programmed State (GM)

tool: D254: Programming Mode (GM)

tool: D369: Read Diagnostic Information (GM)

tool: D407: Read DATA By ID (GM)

tool: D107: Device Control (GM)

tool: D151: Unknown mode/sid (%02X)


tool: 

tool: D309: Show current Data

assistant: ```c
char *get_mode_str(struct canfd_frame frame) {
  switch (frame.data[1]) {
  case 0x01:
    return "Show current Data";
    break;
  case 0x02:
    return "Show freeze frame";
    break;
  case 0x03:
    return "Read DTCs";
    break;
  case 0x04:
    return "Clear DTCs";
    break;
  case 0x05:
    return "Mode Test Results (Non-CAN)";
    break;
  case 0x06:
    return "Mode Test Results (CAN)";
    break;
  case 0x07:
    return "Read Pending DTCs";
    break;
  case 0x08:
    return "Control Operations";
    break;
  case 0x09:
    return "Vehicle Information";
    break;
  case 0x0A:
    return "Read Permanent DTCs";
    break;
  case 0x10:
    return "Diagnostic Control";
    break;
  case 0x11:
    return "ECU Reset";
    break;
  case 0x14:
    return "UDS Clear DTCs";
    break;
  case 0x19:
    return "UDS Read DTCs";
    break;
  case 0x1A:
    return "Read DID by ID (GM)";
    break;
  case 0x20:
    return "Restore Normal Commnications";
    break;
  case 0x22:
    return "Read DATA By ID";
    break;
  case 0x23:
    return "Read Memory By Address";
    break;
  case 0x24:
    return "Read Scalling Data by ID";
    break;
  case 0x27:
    return "Security Access";
    break;
  case 0x28:
    return "Communication Control";
    break;
  case 0x2A:
    return "Read DATA By ID Periodically";
    break;
  case 0x2C:
    return "Define DATA By ID";
    break;
  case 0x2E:
    return "Write DATA By ID";
    break;
  case 0x2F:
    return "Input/Output Control By ID";
    break;
  case 0x31:
    return "Routine Control";
    break;
  case 0x34:
    return "Request Download";
    break;
  case 0x35:
    return "Request Upload";
    break;
  case 0x36:
    return "Transfer DATA";
    break;
  case 0x37:
    return "Request Transfer Exit";
    break;
  case 0x38:
    return "Request Transfer File";
    break;
  case 0x3D:
    return "Write Memory By Address";
    break;
  case 0x3E:
    return "Tester Present";
    break;
  case 0x83:
    return "Access Timing";
    break;
  case 0x84:
    return "Secured DATA Transfer";
    break;
  case 0x85:
    return "Control DTC Settings";
    break;
  case 0x86:
    return "Response On Event";
    break;
  case 0x87:
    return "Link Control";
    break;
  case 0xA2:
    return "Programmed State (GM)";
    break;
  case 0xA5:
    return "Programming Mode (GM)";
    break;
  case 0xA9:
    return "Read Diagnostic Information (GM)";
    break;
  case 0xAA:
    return "Read DATA By ID (GM)";
    break;
  case 0xAE:
    return "Device Control (GM)";
    break;
  default:
    printf("Unknown mode/sid (%02X)\n", frame.data[1]);
    return "";
  }
}
```