user: Demonstrate the C code that generates the assembly output below:

```asm
<get_operation_code>:
  endbr64
  push   %rbp
  lea    D14(%rip),%rsi
  mov    %rdi,%rbp
  call   <strcmp@plt>
  mov    %rax,%r8
  xor    %eax,%eax
  test   %r8,%r8
  jne    L4
L2:
  pop    %rbp
  ret
L4:
  lea    D85(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0x1,%eax
  test   %r8,%r8
  je     L2
  lea    D18(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0x2,%eax
  test   %r8,%r8
  je     L2
  lea    D57(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0x3,%eax
  test   %r8,%r8
  je     L2
  lea    D67(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0x4,%eax
  test   %r8,%r8
  je     L2
  lea    D95(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0x5,%eax
  test   %r8,%r8
  je     L2
  lea    D47(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0x6,%eax
  test   %r8,%r8
  je     L2
  lea    D69(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0x7,%eax
  test   %r8,%r8
  je     L2
  lea    D63(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0x8,%eax
  test   %r8,%r8
  je     L2
  lea    D7(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0x9,%eax
  test   %r8,%r8
  je     L2
  lea    D11(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0xa,%eax
  test   %r8,%r8
  je     L2
  lea    D4(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0xb,%eax
  test   %r8,%r8
  je     L2
  lea    D46(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  mov    %rax,%r8
  mov    $0xc,%eax
  test   %r8,%r8
  je     L2
  mov    %rbp,%rdi
  lea    D36(%rip),%rsi
  call   <strcmp@plt>
  pop    %rbp
  cmp    $0x1,%rax
  sbb    %eax,%eax
  and    $0xe,%al
  add    $0xff,%eax
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D14
data_type: string
name: disassemble_data
arguments: data_tag: D85
data_type: string
name: disassemble_data
arguments: data_tag: D18
data_type: string
name: disassemble_data
arguments: data_tag: D57
data_type: string
name: disassemble_data
arguments: data_tag: D67
data_type: string
name: disassemble_data
arguments: data_tag: D95
data_type: string
name: disassemble_data
arguments: data_tag: D47
data_type: string
name: disassemble_data
arguments: data_tag: D69
data_type: string
name: disassemble_data
arguments: data_tag: D63
data_type: string
name: disassemble_data
arguments: data_tag: D7
data_type: string
name: disassemble_data
arguments: data_tag: D11
data_type: string
name: disassemble_data
arguments: data_tag: D4
data_type: string
name: disassemble_data
arguments: data_tag: D46
data_type: string
name: disassemble_data
arguments: data_tag: D36
data_type: string

tool: D14: cmove

tool: D85: get

tool: D18: set

tool: D57: add

tool: D67: mult

tool: D95: div

tool: D47: nand

tool: D69: halt

tool: D63: allocate

tool: D7: free

tool: D11: out

tool: D4: in

tool: D46: load

tool: D36: put

assistant: ```c
uint8_t get_operation_code(const char *code) {
  if (strcmp(code, "cmove") == 0)
    return 0;
  else if (strcmp(code, "get") == 0)
    return 1;
  else if (strcmp(code, "set") == 0)
    return 2;
  else if (strcmp(code, "add") == 0)
    return 3;
  else if (strcmp(code, "mult") == 0)
    return 4;
  else if (strcmp(code, "div") == 0)
    return 5;
  else if (strcmp(code, "nand") == 0)
    return 6;
  else if (strcmp(code, "halt") == 0)
    return 7;
  else if (strcmp(code, "allocate") == 0)
    return 8;
  else if (strcmp(code, "free") == 0)
    return 9;
  else if (strcmp(code, "out") == 0)
    return 10;
  else if (strcmp(code, "in") == 0)
    return 11;
  else if (strcmp(code, "load") == 0)
    return 12;
  else if (strcmp(code, "put") == 0)
    return 13;
  return 255;
}
```