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

```asm
<break_test>:
  endbr64
  push   %rbp
  lea    D115(%rip),%rdi
  lea    D33(%rip),%rbp
  push   %rbx
  sub    $0x8,%rsp
  call   <puts@plt>
  mov    $0x16a,%esi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x9c000005,%edi
  call   <getreg@plt>
  mov    %eax,%ebx
  test   $0x1e,%al
  je     L176
  test   $0x80,%al
  je     L107
L289:
  mov    $0x16c,%esi
  lea    D107(%rip),%rdi
  call   <fail@plt>
L111:
  mov    $0x16d,%esi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x43,%esi
  mov    $0x9c000003,%edi
  call   <setreg@plt>
  mov    $0x16f,%esi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x62,%edi
  call   <send_char@plt>
  mov    $0x171,%esi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x2a,%edi
  call   <recv_char@plt>
  mov    $0x3,%esi
  mov    $0x9c000003,%edi
  call   <setreg@plt>
  mov    $0x174,%esi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x21,%edi
  call   <send_char@plt>
  mov    $0x178,%esi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
L251:
  mov    $0x9c000005,%edi
  call   <getreg@plt>
  mov    %eax,%ebx
  test   $0x1,%al
  je     L251
  xor    %eax,%eax
  mov    $0xf1,%esi
  lea    D11(%rip),%rdi
  call   <printf@plt>
  cmp    $0xf1,%ebx
  je     L281
  mov    $0x17c,%esi
  lea    D107(%rip),%rdi
  call   <fail@plt>
L281:
  mov    $0x9c000000,%edi
  call   <getreg@plt>
  test   %eax,%eax
  jne    L49
L310:
  mov    $0x17e,%esi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x23,%esi
  mov    $0x9c000000,%edi
  call   <setreg@plt>
  nopl   0x0(%rax)
L2:
  mov    $0x9c000005,%edi
  call   <getreg@plt>
  test   $0x1,%al
  je     L2
  mov    $0x9c000005,%edi
  call   <getreg@plt>
  mov    %eax,%ebx
  test   $0x1e,%al
  je     L311
  test   $0x80,%al
  je     L248
L190:
  mov    $0x183,%esi
  lea    D107(%rip),%rdi
  call   <fail@plt>
L96:
  mov    $0x9c000000,%edi
  call   <getreg@plt>
  cmp    $0x24,%eax
  je     L249
  mov    $0x184,%esi
  lea    D107(%rip),%rdi
  call   <fail@plt>
L249:
  mov    %rbp,%rdi
  mov    $0x185,%esi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D170(%rip),%rbx
  mov    $0x6e,%edi
  cs nopw 0x0(%rax,%rax,1)
L124:
  call   <send_char@plt>
  movsbl 0x1(%rbx),%edi
  add    $0x1,%rbx
  test   %dil,%dil
  jne    L124
  mov    $0x9c000005,%edi
  call   <getreg@plt>
  test   $0x1,%al
  jne    L212
  nopl   0x0(%rax)
L211:
  mov    $0x9c000005,%edi
  call   <getreg@plt>
  test   $0x40,%al
  je     L211
  mov    $0x2a,%esi
  mov    $0x9c000000,%edi
  call   <setreg@plt>
  mov    $0x43,%esi
  mov    $0x9c000003,%edi
  call   <setreg@plt>
  mov    $0x18f,%esi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x3f,%edi
  call   <recv_char@plt>
  mov    $0x3,%esi
  mov    $0x9c000003,%edi
  call   <setreg@plt>
  mov    $0x9c000005,%edi
  call   <getreg@plt>
  mov    %eax,%ebx
  test   $0x1e,%al
  je     L13
  test   $0x80,%al
  je     L207
L256:
  mov    $0x194,%esi
  lea    D107(%rip),%rdi
  call   <fail@plt>
L12:
  mov    %rbp,%rdi
  mov    $0x195,%esi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x23,%edi
  call   <send_char@plt>
  nopw   0x0(%rax,%rax,1)
L268:
  mov    $0x9c000005,%edi
  call   <getreg@plt>
  mov    %eax,%ebx
  test   $0x1,%al
  je     L268
  mov    %eax,%esi
  mov    $0xf1,%edx
  lea    D161(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  cmp    $0xf1,%ebx
  je     L75
  mov    $0x19d,%esi
  lea    D107(%rip),%rdi
  call   <fail@plt>
L75:
  mov    $0x9c000000,%edi
  call   <getreg@plt>
  test   %eax,%eax
  jne    L228
L141:
  mov    $0x19f,%esi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x3f,%edi
  call   <send_char@plt>
  mov    $0x1a1,%esi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <printf@plt>
L296:
  mov    $0x9c000005,%edi
  call   <getreg@plt>
  test   $0x1,%al
  je     L296
  mov    $0x21,%edi
  call   <recv_char@plt>
  add    $0x8,%rsp
  lea    D168(%rip),%rdi
  pop    %rbx
  pop    %rbp
  jmp    10c0 <puts@plt>
  nopw   0x0(%rax,%rax,1)
L13:
  test   $0x80,%al
  jne    L256
L194:
  and    $0x60,%ebx
  cmp    $0x40,%ebx
  jne    L12
  jmp    L256
  nopl   0x0(%rax)
L311:
  test   $0x80,%al
  jne    L190
L279:
  and    $0x60,%ebx
  cmp    $0x40,%ebx
  jne    L96
  jmp    L190
  nopl   0x0(%rax)
L176:
  test   $0x80,%al
  jne    L289
L247:
  and    $0x60,%ebx
  cmp    $0x40,%ebx
  jne    L111
  jmp    L289
  nopl   0x0(%rax)
L49:
  mov    $0x17d,%esi
  lea    D107(%rip),%rdi
  call   <fail@plt>
  jmp    L310
  cs nopw 0x0(%rax,%rax,1)
L228:
  mov    $0x19e,%esi
  lea    D107(%rip),%rdi
  call   <fail@plt>
  jmp    L141
  cs nopw 0x0(%rax,%rax,1)
L212:
  mov    $0x18a,%esi
  lea    D107(%rip),%rdi
  call   <fail@plt>
  jmp    L211
  cs nopw 0x0(%rax,%rax,1)
L207:
  mov    %eax,%esi
  mov    $0x194,%edx
  lea    D48(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L194
  nopw   0x0(%rax,%rax,1)
L107:
  mov    %eax,%esi
  mov    $0x16c,%edx
  lea    D48(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L247
  nopw   0x0(%rax,%rax,1)
L248:
  mov    %eax,%esi
  mov    $0x183,%edx
  lea    D48(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L279
```

tool_calls: name: parse_data
arguments: data_tag: D115
type: string
name: parse_data
arguments: data_tag: D33
type: string
name: parse_data
arguments: data_tag: D107
type: string
name: parse_data
arguments: data_tag: D11
type: string
name: parse_data
arguments: data_tag: D170
type: string
name: parse_data
arguments: data_tag: D161
type: string
name: parse_data
arguments: data_tag: D168
type: string
name: parse_data
arguments: data_tag: D48
type: string

tool: D115: break_test

tool: D33: Passed line %i


tool: D107: ?

tool: D11: [%x]


tool: D170: ns

tool: D161: [%x:%x]


tool: D168: OK

tool: D48: LSR7 (0x%02x) ERR @ %i


assistant: ```c
void break_test() {
  unsigned x;
  char *s;
  printf("break_test\n");
  printf("Passed line %i\n", 362);
  {
    unsigned x = getreg(((0x9c000000) + 5));
    if ((x & ((0x10) | (0x08) | (0x04) | (0x02))) && !(x & (0x80)))
      printf("LSR7 (0x%02x) ERR @ %i\n", x, 364);
    ((!(x & (0x80)) && ((x & 0x60) != 0x40)) ? 1 : fail("?", 364));
  };
  printf("Passed line %i\n", 365);
  setreg(((0x9c000000) + 3), 0x03 | (0x40));
  printf("Passed line %i\n", 367);
  send_char('b');
  printf("Passed line %i\n", 369);
  recv_char('*');
  setreg(((0x9c000000) + 3), 0x03);
  printf("Passed line %i\n", 372);
  send_char('!');
  printf("Passed line %i\n", 376);
  while (!((x = getreg(((0x9c000000) + 5))) & (0x01)))
    ;
  printf("[%x]\n", ((0x01) | (0x10) | (0x80) | (0x20) | (0x40)));
  ((x == ((0x01) | (0x10) | (0x80) | (0x20) | (0x40))) ? 1 : fail("?", 380));
  ((getreg(((0x9c000000) + 0)) == 0) ? 1 : fail("?", 381));
  printf("Passed line %i\n", 382);
  setreg(((0x9c000000) + 0), '#');
  while (!(getreg(((0x9c000000) + 5)) & (0x01)))
    ;
  {
    unsigned x = getreg(((0x9c000000) + 5));
    if ((x & ((0x10) | (0x08) | (0x04) | (0x02))) && !(x & (0x80)))
      printf("LSR7 (0x%02x) ERR @ %i\n", x, 387);
    ((!(x & (0x80)) && ((x & 0x60) != 0x40)) ? 1 : fail("?", 387));
  };
  ((getreg(((0x9c000000) + 0)) == '$') ? 1 : fail("?", 388));
  printf("Passed line %i\n", 389);
  s = "ns";
  while (*s)
    send_char(*s++);
  ((!(getreg(((0x9c000000) + 5)) & (0x01))) ? 1 : fail("?", 394));
  while (!(getreg(((0x9c000000) + 5)) & (0x40)))
    ;
  setreg(((0x9c000000) + 0), '*');
  setreg(((0x9c000000) + 3), 0x3 | (0x40));
  printf("Passed line %i\n", 399);
  recv_char('?');
  setreg(((0x9c000000) + 3), 0x3);
  {
    unsigned x = getreg(((0x9c000000) + 5));
    if ((x & ((0x10) | (0x08) | (0x04) | (0x02))) && !(x & (0x80)))
      printf("LSR7 (0x%02x) ERR @ %i\n", x, 404);
    ((!(x & (0x80)) && ((x & 0x60) != 0x40)) ? 1 : fail("?", 404));
  };
  printf("Passed line %i\n", 405);
  send_char('#');
  while (!((x = getreg(((0x9c000000) + 5))) & (0x01)))
    ;
  printf("[%x:%x]\n", x, ((0x01) | (0x10) | (0x80) | (0x20) | (0x40)));
  ((x == ((0x01) | (0x10) | (0x80) | (0x20) | (0x40))) ? 1 : fail("?", 413));
  ((getreg(((0x9c000000) + 0)) == 0) ? 1 : fail("?", 414));
  printf("Passed line %i\n", 415);
  send_char('?');
  printf("Passed line %i\n", 417);
  while (!(getreg(((0x9c000000) + 5)) & (0x01)))
    ;
  recv_char('!');
  printf("OK\n");
}
```