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

```asm
<compile1>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  mov    %rsi,%rbp
  mov    %edx,%r12d
  mov    $0x3,%edx
  lea    D57(%rip),%rsi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L120
  cmpb   $0x41,0x4(%rbx)
  je     L166
  movb   $0xbb,0x0(%rbp)
  lea    0x7(%rbx),%rdi
  call   <intbracket@plt>
  mov    %eax,0x1(%rbp)
L3:
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L166:
  movb   $0xb8,0x0(%rbp)
  lea    0x7(%rbx),%rdi
  call   <intbracket@plt>
  mov    %eax,0x1(%rbp)
  jmp    L3
L120:
  mov    $0x3,%edx
  lea    D119(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L173
  movb   $0x5,0x0(%rbp)
  lea    0x7(%rbx),%rdi
  call   <intbracket@plt>
  mov    %eax,0x1(%rbp)
  jmp    L3
L173:
  mov    $0x3,%edx
  lea    D88(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L45
  movb   $0x2d,0x0(%rbp)
  lea    0x7(%rbx),%rdi
  call   <intbracket@plt>
  mov    %eax,0x1(%rbp)
  jmp    L3
L45:
  mov    $0x3,%edx
  lea    D1(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L159
  movb   $0x1,0x0(%rbp)
  movb   $0xd8,0x1(%rbp)
  movb   $0x90,0x2(%rbp)
  movb   $0x90,0x3(%rbp)
  movb   $0x90,0x4(%rbp)
  jmp    L3
L159:
  mov    $0x3,%edx
  lea    D22(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L190
  movb   $0x3d,0x0(%rbp)
  lea    0x7(%rbx),%rdi
  call   <intbracket@plt>
  mov    %eax,0x1(%rbp)
  jmp    L3
L190:
  mov    $0x3,%edx
  lea    D103(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L160
  movb   $0x41,0x0(%rbp)
  movb   $0x8b,0x1(%rbp)
  cmpb   $0x41,0x4(%rbx)
  mov    $0x44,%eax
  mov    $0x5c,%edx
  cmovne %edx,%eax
  mov    %al,0x2(%rbp)
  movb   $0x24,0x3(%rbp)
  lea    0x7(%rbx),%rdi
  call   <intbracket@plt>
  shl    $0x2,%eax
  mov    %al,0x4(%rbp)
  jmp    L3
L160:
  mov    $0x3,%edx
  lea    D26(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L44
  movb   $0x41,0x0(%rbp)
  movb   $0x89,0x1(%rbp)
  cmpb   $0x41,0x4(%rbx)
  mov    $0x44,%eax
  mov    $0x5c,%edx
  cmovne %edx,%eax
  mov    %al,0x2(%rbp)
  movb   $0x24,0x3(%rbp)
  lea    0x7(%rbx),%rdi
  call   <intbracket@plt>
  shl    $0x2,%eax
  mov    %al,0x4(%rbp)
  jmp    L3
L44:
  mov    $0x3,%edx
  lea    D95(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L14
  movb   $0xe2,0x0(%rbp)
  movb   $0x1,0x1(%rbp)
  movb   $0xc3,0x2(%rbp)
  movb   $0xeb,0x3(%rbp)
  lea    0x4(%rbx),%rdi
  call   <intbracket@plt>
  sub    %r12d,%eax
  sub    $0x1,%eax
  mov    $0x5,%edx
  imul   %edx,%eax
  mov    %al,0x4(%rbp)
  jmp    L3
L14:
  mov    $0x3,%edx
  lea    D46(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L10
  movb   $0xe2,0x0(%rbp)
  movb   $0x1,0x1(%rbp)
  movb   $0xc3,0x2(%rbp)
  movb   $0x74,0x3(%rbp)
  lea    0x4(%rbx),%rdi
  call   <intbracket@plt>
  sub    %r12d,%eax
  sub    $0x1,%eax
  mov    $0x5,%edx
  imul   %edx,%eax
  mov    %al,0x4(%rbp)
  jmp    L3
L10:
  mov    $0x3,%edx
  lea    D97(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L59
  movb   $0xe2,0x0(%rbp)
  movb   $0x1,0x1(%rbp)
  movb   $0xc3,0x2(%rbp)
  movb   $0x75,0x3(%rbp)
  lea    0x4(%rbx),%rdi
  call   <intbracket@plt>
  sub    %r12d,%eax
  sub    $0x1,%eax
  mov    $0x5,%edx
  imul   %edx,%eax
  mov    %al,0x4(%rbp)
  jmp    L3
L59:
  mov    $0x3,%edx
  lea    D45(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L210
  movb   $0xc3,0x0(%rbp)
  jmp    L3
L210:
  mov    %rbx,%rsi
  lea    D34(%rip),%rdi
  call   <printf@plt>
  jmp    L3
```

tool_calls: name: read_data
arguments: data_label: D57
type: string
name: read_data
arguments: data_label: D119
type: string
name: read_data
arguments: data_label: D88
type: string
name: read_data
arguments: data_label: D1
type: string
name: read_data
arguments: data_label: D22
type: string
name: read_data
arguments: data_label: D103
type: string
name: read_data
arguments: data_label: D26
type: string
name: read_data
arguments: data_label: D95
type: string
name: read_data
arguments: data_label: D46
type: string
name: read_data
arguments: data_label: D97
type: string
name: read_data
arguments: data_label: D45
type: string
name: read_data
arguments: data_label: D34
type: string

tool: D57: MOV

tool: D119: ADD

tool: D88: SUB

tool: D1: SUM

tool: D22: CMP

tool: D103: LDR

tool: D26: STR

tool: D95: JMP

tool: D46: JEQ

tool: D97: JNE

tool: D45: RET

tool: D34: Unknown instr: %s


assistant: ```c
void compile1(const char *cmd, char *out, int instrno) {
  if (strncmp(cmd, "MOV", 3) == 0) {
    if (cmd[4] == 'A') {
      out[0] = 0xb8;
      *((int *)(out + 1)) = intbracket(cmd + 7);
    } else {
      out[0] = 0xbb;
      *((int *)(out + 1)) = intbracket(cmd + 7);
    }
  } else if (strncmp(cmd, "ADD", 3) == 0) {
    out[0] = 0x05;
    *((int *)(out + 1)) = intbracket(cmd + 7);
  } else if (strncmp(cmd, "SUB", 3) == 0) {
    out[0] = 0x2d;
    *((int *)(out + 1)) = intbracket(cmd + 7);
  } else if (strncmp(cmd, "SUM", 3) == 0) {
    out[0] = 0x01;
    out[1] = 0xd8;
    out[2] = 0x90;
    out[3] = 0x90;
    out[4] = 0x90;
  } else if (strncmp(cmd, "CMP", 3) == 0) {
    out[0] = 0x3d;
    *((int *)(out + 1)) = intbracket(cmd + 7);
  } else if (strncmp(cmd, "LDR", 3) == 0) {
    out[0] = 0x41;
    out[1] = 0x8b;
    if (cmd[4] == 'A') {
      out[2] = 0x44;
    } else {
      out[2] = 0x5c;
    }
    out[3] = 0x24;
    out[4] = 4 * intbracket(cmd + 7);
  } else if (strncmp(cmd, "STR", 3) == 0) {
    out[0] = 0x41;
    out[1] = 0x89;
    if (cmd[4] == 'A') {
      out[2] = 0x44;
    } else {
      out[2] = 0x5c;
    }
    out[3] = 0x24;
    out[4] = 4 * intbracket(cmd + 7);
  } else if (strncmp(cmd, "JMP", 3) == 0) {
    out[0] = 0xe2;
    out[1] = 0x01;
    out[2] = 0xc3;
    out[3] = 0xeb;
    out[4] = (intbracket(cmd + 4) - instrno) * 5 - 5;
  } else if (strncmp(cmd, "JEQ", 3) == 0) {
    out[0] = 0xe2;
    out[1] = 0x01;
    out[2] = 0xc3;
    out[3] = 0x74;
    out[4] = (intbracket(cmd + 4) - instrno) * 5 - 5;
  } else if (strncmp(cmd, "JNE", 3) == 0) {
    out[0] = 0xe2;
    out[1] = 0x01;
    out[2] = 0xc3;
    out[3] = 0x75;
    out[4] = (intbracket(cmd + 4) - instrno) * 5 - 5;
  } else if (strncmp(cmd, "RET", 3) == 0) {
    out[0] = 0xc3;
  } else {
    printf("Unknown instr: %s\n", cmd);
  }
}
```