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

```asm
<cmd_class_string>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %edi,-0x4(%rbp)
  cmpl   $0x20,-0x4(%rbp)
  jne    L349
  lea    D150(%rip),%rax
  jmp    L162
L349:
  cmpl   $0x2d,-0x4(%rbp)
  jne    L94
  lea    D148(%rip),%rax
  jmp    L162
L94:
  cmpl   $0x2b,-0x4(%rbp)
  jne    L137
  lea    D182(%rip),%rax
  jmp    L162
L137:
  cmpl   $0x85,-0x4(%rbp)
  jne    L443
  lea    D197(%rip),%rax
  jmp    L162
L443:
  cmpl   $0x26,-0x4(%rbp)
  jne    L31
  lea    D107(%rip),%rax
  jmp    L162
L31:
  cmpl   $0x31,-0x4(%rbp)
  jne    L428
  lea    D30(%rip),%rax
  jmp    L162
L428:
  cmpl   $0x72,-0x4(%rbp)
  jne    L159
  lea    D203(%rip),%rax
  jmp    L162
L159:
  cmpl   $0x94,-0x4(%rbp)
  jne    L62
  lea    D113(%rip),%rax
  jmp    L162
L62:
  cmpl   $0x70,-0x4(%rbp)
  jne    L358
  lea    D21(%rip),%rax
  jmp    L162
L358:
  cmpl   $0x87,-0x4(%rbp)
  jne    L236
  lea    D215(%rip),%rax
  jmp    L162
L236:
  cmpl   $0x84,-0x4(%rbp)
  jne    L430
  lea    D105(%rip),%rax
  jmp    L162
L430:
  cmpl   $0x40,-0x4(%rbp)
  jne    L233
  lea    D206(%rip),%rax
  jmp    L162
L233:
  cmpl   $0x43,-0x4(%rbp)
  jne    L259
  lea    D205(%rip),%rax
  jmp    L162
L259:
  cmpl   $0x2c,-0x4(%rbp)
  jne    L52
  lea    D216(%rip),%rax
  jmp    L162
L52:
  cmpl   $0x60,-0x4(%rbp)
  jne    L0
  lea    D208(%rip),%rax
  jmp    L162
L0:
  cmpl   $0x32,-0x4(%rbp)
  jne    L125
  lea    D84(%rip),%rax
  jmp    L162
L125:
  cmpl   $0x80,-0x4(%rbp)
  jne    L251
  lea    D37(%rip),%rax
  jmp    L162
L251:
  cmpl   $0x88,-0x4(%rbp)
  jne    L341
  lea    D179(%rip),%rax
  jmp    L162
L341:
  cmpl   $0x86,-0x4(%rbp)
  jne    L291
  lea    D195(%rip),%rax
  jmp    L162
L291:
  cmpl   $0x60,-0x4(%rbp)
  jne    L270
  lea    D136(%rip),%rax
  jmp    L162
L270:
  cmpl   $0x27,-0x4(%rbp)
  jne    L173
  lea    D6(%rip),%rax
  jmp    L162
L173:
  cmpl   $0xef,-0x4(%rbp)
  jne    L399
  lea    D45(%rip),%rax
  jmp    L162
L399:
  cmpl   $0x0,-0x4(%rbp)
  jne    L286
  lea    D68(%rip),%rax
  jmp    L162
L286:
  mov    -0x4(%rbp),%eax
  mov    %eax,%edx
  lea    D92(%rip),%rax
  mov    %rax,%rsi
  lea    D137(%rip),%rax
  mov    %rax,%rdi
  call   <sprintf@plt>
  lea    D137(%rip),%rax
L162:
  leave
  ret
```

tool_calls: name: read_data
arguments: data_label: D150
datatype: string
name: read_data
arguments: data_label: D148
datatype: string
name: read_data
arguments: data_label: D182
datatype: string
name: read_data
arguments: data_label: D197
datatype: string
name: read_data
arguments: data_label: D107
datatype: string
name: read_data
arguments: data_label: D30
datatype: string
name: read_data
arguments: data_label: D203
datatype: string
name: read_data
arguments: data_label: D113
datatype: string
name: read_data
arguments: data_label: D21
datatype: string
name: read_data
arguments: data_label: D215
datatype: string
name: read_data
arguments: data_label: D105
datatype: string
name: read_data
arguments: data_label: D206
datatype: string
name: read_data
arguments: data_label: D205
datatype: string
name: read_data
arguments: data_label: D216
datatype: string
name: read_data
arguments: data_label: D208
datatype: string
name: read_data
arguments: data_label: D84
datatype: string
name: read_data
arguments: data_label: D37
datatype: string
name: read_data
arguments: data_label: D179
datatype: string
name: read_data
arguments: data_label: D195
datatype: string
name: read_data
arguments: data_label: D136
datatype: string
name: read_data
arguments: data_label: D6
datatype: string
name: read_data
arguments: data_label: D45
datatype: string
name: read_data
arguments: data_label: D68
datatype: string
name: read_data
arguments: data_label: D92
datatype: string

tool: D150: COMMAND_CLASS_BASIC

tool: D148: COMMAND_CLASS_SCENE_CONTROLLER

tool: D182: COMMAND_CLASS_SCENE_ACTIVATION

tool: D197: COMMAND_CLASS_ASSOCIATION

tool: D107: COMMAND_CLASS_SWITCH_MULTILEVEL

tool: D30: COMMAND_CLASS_SENSOR_MULTILEVEL

tool: D203: COMMAND_CLASS_MANUFACTURER_SPECIFIC

tool: D113: COMMAND_CLASS_SIMPLE_AV_CONTROL

tool: D21: COMMAND_CLASS_CONFIGURATION

tool: D215: COMMAND_CLASS_INDICATOR

tool: D105: COMMAND_CLASS_WAKE_UP

tool: D206: COMMAND_CLASS_THERMOSTAT_MODE

tool: D205: COMMAND_CLASS_THERMOSTAT_SETPOINT

tool: D216: COMMAND_CLASS_ACTUATOR_CONF

tool: D208: COMMAND_CLASS_MULTI_INSTANCE

tool: D84: COMMAND_CLASS_METER

tool: D37: COMMAND_CLASS_BATTERY

tool: D179: COMMAND_CLASS_PROPRIETARY

tool: D195: COMMAND_CLASS_VERSION

tool: D136: COMMAND_CLASS_MULTI_INSTANCE_V2

tool: D6: COMMAND_CLASS_SWITCH_ALL

tool: D45: COMMAND_CLASS_MARK

tool: D68: COMMAND_CLASS_NO_OPERATION

tool: D92: %02x

assistant: ```c
char *cmd_class_string(int cls) {
  static char str[10];
  if (cls == 0x20)
    return "COMMAND_CLASS_BASIC";
  else if (cls == 0x2D)
    return "COMMAND_CLASS_SCENE_CONTROLLER";
  else if (cls == 0x2B)
    return "COMMAND_CLASS_SCENE_ACTIVATION";
  else if (cls == 0x85)
    return "COMMAND_CLASS_ASSOCIATION";
  else if (cls == 0x26)
    return "COMMAND_CLASS_SWITCH_MULTILEVEL";
  else if (cls == 0x31)
    return "COMMAND_CLASS_SENSOR_MULTILEVEL";
  else if (cls == 0x72)
    return "COMMAND_CLASS_MANUFACTURER_SPECIFIC";
  else if (cls == 0x94)
    return "COMMAND_CLASS_SIMPLE_AV_CONTROL";
  else if (cls == 0x70)
    return "COMMAND_CLASS_CONFIGURATION";
  else if (cls == 0x87)
    return "COMMAND_CLASS_INDICATOR";
  else if (cls == 0x84)
    return "COMMAND_CLASS_WAKE_UP";
  else if (cls == 0x40)
    return "COMMAND_CLASS_THERMOSTAT_MODE";
  else if (cls == 0x43)
    return "COMMAND_CLASS_THERMOSTAT_SETPOINT";
  else if (cls == 0x2C)
    return "COMMAND_CLASS_ACTUATOR_CONF";
  else if (cls == 0x60)
    return "COMMAND_CLASS_MULTI_INSTANCE";
  else if (cls == 0x32)
    return "COMMAND_CLASS_METER";
  else if (cls == 0x80)
    return "COMMAND_CLASS_BATTERY";
  else if (cls == 0x88)
    return "COMMAND_CLASS_PROPRIETARY";
  else if (cls == 0x86)
    return "COMMAND_CLASS_VERSION";
  else if (cls == 0x60)
    return "COMMAND_CLASS_MULTI_INSTANCE_V2";
  else if (cls == 0x27)
    return "COMMAND_CLASS_SWITCH_ALL";
  else if (cls == 0xEF)
    return "COMMAND_CLASS_MARK";
  else if (cls == 0x00)
    return "COMMAND_CLASS_NO_OPERATION";
  else {
    sprintf(str, "%02x", cls);
    return str;
  }
}
```