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

```asm
<SwitchStateToString1F>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %edi,-0x14(%rbp)
  mov    %rsi,-0x20(%rbp)
  movl   $0x0,-0x4(%rbp)
  mov    -0x14(%rbp),%eax
  and    $0x80,%eax
  test   %eax,%eax
  je     L88
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  lea    D116(%rip),%rdx
  lea    D136(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x14(%rbp),%eax
  and    $0x40,%eax
  test   %eax,%eax
  je     L11
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  lea    D253(%rip),%rdx
  lea    D136(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L174
L11:
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  lea    D95(%rip),%rdx
  lea    D136(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L174
L88:
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  lea    D317(%rip),%rdx
  lea    D136(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x14(%rbp),%eax
  and    $0x40,%eax
  test   %eax,%eax
  je     L160
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  lea    D15(%rip),%rdx
  lea    D136(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L174
L160:
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  lea    D279(%rip),%rdx
  lea    D136(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
L174:
  mov    -0x14(%rbp),%eax
  and    $0x20,%eax
  test   %eax,%eax
  je     L75
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  lea    D325(%rip),%rdx
  lea    D136(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L84
L75:
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  lea    D281(%rip),%rdx
  lea    D136(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
L84:
  mov    -0x14(%rbp),%eax
  and    $0x10,%eax
  test   %eax,%eax
  je     L65
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  lea    D130(%rip),%rdx
  lea    D136(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L40
L65:
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  lea    D143(%rip),%rdx
  lea    D136(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
L40:
  mov    -0x14(%rbp),%eax
  and    $0x8,%eax
  test   %eax,%eax
  je     L56
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  lea    D316(%rip),%rdx
  lea    D136(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L156
L56:
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  lea    D268(%rip),%rdx
  lea    D136(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
L156:
  mov    -0x14(%rbp),%eax
  and    $0x4,%eax
  test   %eax,%eax
  je     L102
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  lea    D290(%rip),%rdx
  lea    D136(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L163
L102:
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  lea    D214(%rip),%rdx
  lea    D136(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
L163:
  mov    -0x14(%rbp),%eax
  and    $0x2,%eax
  test   %eax,%eax
  je     L48
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  lea    D248(%rip),%rdx
  lea    D136(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L122
L48:
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  lea    D175(%rip),%rdx
  lea    D136(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
L122:
  mov    -0x14(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L148
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  lea    D183(%rip),%rdx
  lea    D136(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
  jmp    L141
L148:
  mov    -0x4(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  lea    D263(%rip),%rdx
  lea    D136(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  mov    %eax,%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x4(%rbp)
L141:
  mov    -0x4(%rbp),%eax
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: label: D116
type_infered: string
name: disassemble_data
arguments: label: D136
type_infered: string
name: disassemble_data
arguments: label: D253
type_infered: string
name: disassemble_data
arguments: label: D95
type_infered: string
name: disassemble_data
arguments: label: D317
type_infered: string
name: disassemble_data
arguments: label: D15
type_infered: string
name: disassemble_data
arguments: label: D279
type_infered: string
name: disassemble_data
arguments: label: D325
type_infered: string
name: disassemble_data
arguments: label: D281
type_infered: string
name: disassemble_data
arguments: label: D130
type_infered: string
name: disassemble_data
arguments: label: D143
type_infered: string
name: disassemble_data
arguments: label: D316
type_infered: string
name: disassemble_data
arguments: label: D268
type_infered: string
name: disassemble_data
arguments: label: D290
type_infered: string
name: disassemble_data
arguments: label: D214
type_infered: string
name: disassemble_data
arguments: label: D248
type_infered: string
name: disassemble_data
arguments: label: D175
type_infered: string
name: disassemble_data
arguments: label: D183
type_infered: string
name: disassemble_data
arguments: label: D263
type_infered: string

tool: D116: Manual mode


tool: D136: %s

tool: D253: Output transistor on


tool: D95: Output transistor off


tool: D317: Auto-control mode


tool: D15: Output association with Auxillary


tool: D279: Output association with Main


tool: D325: Negative edge sensed since inactive on Main


tool: D281: No event on Main


tool: D130: Negative edge sensed since inactive on Aux.


tool: D143: No event on Aux.


tool: D316: Voltage High on Aux. output


tool: D268: Voltage Low on Aux. output


tool: D290: Inactive status of Aux. output


tool: D214: Active status of Aux. output


tool: D248: Voltage High on Main output


tool: D175: Voltage Low on Main output


tool: D183: Inactive status on Main output


tool: D263: Active status on Main output


assistant: ```c
int SwitchStateToString1F(int infobyte, char *outstr) {
  int cnt = 0;
  if (infobyte & 0x80) {
    cnt += sprintf(outstr + cnt, "%s", "Manual mode\n");
    if (infobyte & 0x40)
      cnt += sprintf(outstr + cnt, "%s", "Output transistor on\n");
    else
      cnt += sprintf(outstr + cnt, "%s", "Output transistor off\n");
  } else {
    cnt += sprintf(outstr + cnt, "%s", "Auto-control mode\n");
    if (infobyte & 0x40)
      cnt += sprintf(outstr + cnt, "%s", "Output association with Auxillary\n");
    else
      cnt += sprintf(outstr + cnt, "%s", "Output association with Main\n");
  }
  if (infobyte & 0x20)
    cnt += sprintf(outstr + cnt, "%s", "Negative edge sensed since inactive on Main\n");
  else
    cnt += sprintf(outstr + cnt, "%s", "No event on Main\n");
  if (infobyte & 0x10)
    cnt += sprintf(outstr + cnt, "%s", "Negative edge sensed since inactive on Aux.\n");
  else
    cnt += sprintf(outstr + cnt, "%s", "No event on Aux.\n");
  if (infobyte & 0x08)
    cnt += sprintf(outstr + cnt, "%s", "Voltage High on Aux. output\n");
  else
    cnt += sprintf(outstr + cnt, "%s", "Voltage Low on Aux. output\n");
  if (infobyte & 0x04)
    cnt += sprintf(outstr + cnt, "%s", "Inactive status of Aux. output\n");
  else
    cnt += sprintf(outstr + cnt, "%s", "Active status of Aux. output\n");
  if (infobyte & 0x02)
    cnt += sprintf(outstr + cnt, "%s", "Voltage High on Main output\n");
  else
    cnt += sprintf(outstr + cnt, "%s", "Voltage Low on Main output\n");
  if (infobyte & 0x01)
    cnt += sprintf(outstr + cnt, "%s", "Inactive status on Main output\n");
  else
    cnt += sprintf(outstr + cnt, "%s", "Active status on Main output\n");
  return cnt;
}
```