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

```asm
<get_result>:
  endbr64
  push   %r15
  push   %r14
  lea    D101(%rip),%r14
  push   %r13
  mov    %rdi,%r13
  push   %r12
  mov    %rdx,%r12
  push   %rbp
  mov    %rsi,%rbp
  mov    %r14,%rsi
  push   %rbx
  mov    %rbp,%rdi
  sub    $0x18,%rsp
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L175
  lea    D108(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L225
L175:
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L184
  lea    D51(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L235
L184:
  lea    D147(%rip),%r15
  mov    %rbp,%rdi
  lea    D104(%rip),%rbx
  mov    %r15,%rsi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L162
  lea    D51(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L201
L162:
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L130
L15:
  lea    D70(%rip),%rax
  mov    %rbp,%rdi
  mov    %rax,%rsi
  mov    %rax,0x8(%rsp)
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L240
  lea    D51(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L235
L240:
  mov    %r15,%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L237
  lea    D108(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L119
L237:
  mov    0x8(%rsp),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L241
  lea    D108(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L241
  lea    D91(%rip),%rsi
  mov    %r13,%rdi
  call   <strcpy@plt>
  jmp    L228
  nop
L130:
  lea    D108(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L15
  lea    D70(%rip),%rax
  mov    %rax,0x8(%rsp)
L236:
  mov    0x8(%rsp),%rsi
  mov    %r13,%rdi
  call   <strcpy@plt>
  jmp    L228
  nopl   0x0(%rax,%rax,1)
L235:
  mov    %r14,%rsi
  mov    %r13,%rdi
  call   <strcpy@plt>
L228:
  add    $0x18,%rsp
  mov    %r13,%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L241:
  lea    D187(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L54
  lea    D108(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L236
L54:
  lea    D91(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L102
L58:
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L228
  lea    D51(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L228
  nopl   0x0(%rax,%rax,1)
L201:
  mov    %rbx,%rsi
  mov    %r13,%rdi
  call   <strcpy@plt>
  jmp    L228
L225:
  lea    D147(%rip),%r15
L134:
  mov    %r15,%rsi
  mov    %r13,%rdi
  call   <strcpy@plt>
  jmp    L228
  nopw   0x0(%rax,%rax,1)
L102:
  lea    D108(%rip),%rsi
  mov    %r12,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L58
  jmp    L134
  cs nopw 0x0(%rax,%rax,1)
L119:
  lea    D187(%rip),%rsi
  mov    %r13,%rdi
  call   <strcpy@plt>
  jmp    L228
```

tool_calls: name: read_data
arguments: data_tag: D101
type_guessed: string
name: read_data
arguments: data_tag: D108
type_guessed: string
name: read_data
arguments: data_tag: D51
type_guessed: string
name: read_data
arguments: data_tag: D147
type_guessed: string
name: read_data
arguments: data_tag: D104
type_guessed: string
name: read_data
arguments: data_tag: D70
type_guessed: string
name: read_data
arguments: data_tag: D91
type_guessed: string
name: read_data
arguments: data_tag: D187
type_guessed: string

tool: D101: CLOSED

tool: D108: button_clicked

tool: D51: cycle_complete

tool: D147: OPENING

tool: D104: OPEN

tool: D70: CLOSING

tool: D91: STOPPED_WHILE_CLOSING

tool: D187: STOPPED_WHILE_OPENING

assistant: ```c
char *get_result(char *res, char *state, char *oper) {
  if (strcmp(state, "CLOSED") == 0 && strcmp(oper, "button_clicked") == 0) {
    strcpy(res, "OPENING");
  } else if (strcmp(state, "CLOSED") == 0 && strcmp(oper, "cycle_complete") == 0) {
    strcpy(res, "CLOSED");
  } else if (strcmp(state, "OPENING") == 0 && strcmp(oper, "cycle_complete") == 0) {
    strcpy(res, "OPEN");
  } else if (strcmp(state, "OPEN") == 0 && strcmp(oper, "button_clicked") == 0) {
    strcpy(res, "CLOSING");
  } else if (strcmp(state, "CLOSING") == 0 && strcmp(oper, "cycle_complete") == 0) {
    strcpy(res, "CLOSED");
  } else if (strcmp(state, "OPENING") == 0 && strcmp(oper, "button_clicked") == 0) {
    strcpy(res, "STOPPED_WHILE_OPENING");
  } else if (strcmp(state, "CLOSING") == 0 && strcmp(oper, "button_clicked") == 0) {
    strcpy(res, "STOPPED_WHILE_CLOSING");
  } else if (strcmp(state, "STOPPED_WHILE_OPENING") == 0 && strcmp(oper, "button_clicked") == 0) {
    strcpy(res, "CLOSING");
  } else if (strcmp(state, "STOPPED_WHILE_CLOSING") == 0 && strcmp(oper, "button_clicked") == 0) {
    strcpy(res, "OPENING");
  } else if (strcmp(state, "OPEN") == 0 && strcmp(oper, "cycle_complete") == 0) {
    strcpy(res, "OPEN");
  }
  return res;
}
```