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

```asm
<print_command>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbp
  mov    %edx,%r12d
  mov    %ecx,%ebx
  test   %esi,%esi
  jle    L402
  mov    %esi,%edx
  lea    D598(%rip),%rsi
  mov    $0x0,%eax
  call   <fprintf@plt>
L661:
  mov    %ebx,%ecx
  mov    %r12d,%edx
  lea    D144(%rip),%rsi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  cmp    $0xf,%ebx
  jg     L134
  test   %ebx,%ebx
  js     L629
  cmp    $0xf,%ebx
  ja     L861
  mov    %ebx,%eax
  lea    D45(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
L402:
  mov    %rdi,%rcx
  mov    $0x5,%edx
  mov    $0x1,%esi
  lea    D483(%rip),%rdi
  call   <fwrite@plt>
  jmp    L661
L134:
  cmp    $0x1c1,%ebx
  je     L393
  jle    L503
  cmp    $0x1c4,%ebx
  je     L19
  cmp    $0x1c8,%ebx
  jne    L262
  mov    %rbp,%rcx
  mov    $0x4,%edx
  mov    $0x1,%esi
  lea    D653(%rip),%rdi
  call   <fwrite@plt>
  jmp    L493
L503:
  cmp    $0x184,%ebx
  je     L188
  jle    L789
  cmp    $0x188,%ebx
  jne    L556
  mov    %rbp,%rcx
  mov    $0x4,%edx
  mov    $0x1,%esi
  lea    D609(%rip),%rdi
  call   <fwrite@plt>
  jmp    L493
L789:
  cmp    $0x181,%ebx
  je     L193
  cmp    $0x182,%ebx
  jne    L556
  mov    %rbp,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  lea    D833(%rip),%rdi
  call   <fwrite@plt>
  jmp    L493
L262:
  cmp    $0x1c2,%ebx
  jne    L759
  mov    %rbp,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  lea    D460(%rip),%rdi
  call   <fwrite@plt>
  jmp    L493
  mov    %rbp,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  lea    D295(%rip),%rdi
  call   <fwrite@plt>
L493:
  mov    %rbp,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  mov    %rbp,%rcx
  mov    $0x4,%edx
  mov    $0x1,%esi
  lea    D613(%rip),%rdi
  call   <fwrite@plt>
  jmp    L493
  mov    %rbp,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  lea    D335(%rip),%rdi
  call   <fwrite@plt>
  jmp    L493
  mov    %rbp,%rcx
  mov    $0x4,%edx
  mov    $0x1,%esi
  lea    D800(%rip),%rdi
  call   <fwrite@plt>
  jmp    L493
  mov    %rbp,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  lea    D157(%rip),%rdi
  call   <fwrite@plt>
  jmp    L493
  mov    %rbp,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  lea    D529(%rip),%rdi
  call   <fwrite@plt>
  jmp    L493
  mov    %rbp,%rcx
  mov    $0x4,%edx
  mov    $0x1,%esi
  lea    D443(%rip),%rdi
  call   <fwrite@plt>
  jmp    L493
  mov    %rbp,%rcx
  mov    $0x4,%edx
  mov    $0x1,%esi
  lea    D523(%rip),%rdi
  call   <fwrite@plt>
  jmp    L493
  mov    %rbp,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  lea    D621(%rip),%rdi
  call   <fwrite@plt>
  jmp    L493
  mov    %rbp,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  lea    D844(%rip),%rdi
  call   <fwrite@plt>
  jmp    L493
  mov    %rbp,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  lea    D927(%rip),%rdi
  call   <fwrite@plt>
  jmp    L493
  mov    %rbp,%rcx
  mov    $0x6,%edx
  mov    $0x1,%esi
  lea    D799(%rip),%rdi
  call   <fwrite@plt>
  jmp    L493
  mov    %rbp,%rcx
  mov    $0x6,%edx
  mov    $0x1,%esi
  lea    D765(%rip),%rdi
  call   <fwrite@plt>
  jmp    L493
L193:
  mov    %rbp,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  lea    D751(%rip),%rdi
  call   <fwrite@plt>
  jmp    L493
L188:
  mov    %rbp,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  lea    D447(%rip),%rdi
  call   <fwrite@plt>
  jmp    L493
L393:
  mov    %rbp,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  lea    D413(%rip),%rdi
  call   <fwrite@plt>
  jmp    L493
L19:
  mov    %rbp,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  lea    D2(%rip),%rdi
  call   <fwrite@plt>
  jmp    L493
L861:
  mov    %ebx,%eax
  sar    $0x4,%eax
  cmp    $0x1cf,%ebx
  jle    L251
L559:
  cmp    $0x303,%eax
  jg     L363
  cmp    $0x301,%eax
  jg     L625
  sub    $0x2c2,%eax
  lea    D229(%rip),%rdx
  cmp    $0x1,%eax
  ja     L629
L684:
  lea    D771(%rip),%rsi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %ebx,%esi
  and    $0x1f,%esi
  mov    %rbp,%rdi
  call   <print_reg@plt>
  jmp    L493
L251:
  test   %eax,%eax
  jg     L779
L629:
  mov    %ebx,%eax
  sar    $0x8,%eax
  sub    $0x2,%eax
  cmp    $0x3d,%eax
  ja     L751
  mov    %eax,%eax
  lea    D445(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D467(%rip),%rdx
  jmp    L684
L363:
  sub    $0x400,%eax
  lea    D731(%rip),%rdx
  cmp    $0x1,%eax
  jbe    L684
L30:
  mov    %ebx,%eax
  sar    $0xc,%eax
  sub    $0x4,%eax
  cmp    $0xb,%eax
  ja     L629
  mov    %eax,%eax
  lea    D620(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  mov    %ebx,%ecx
  and    $0x7,%ecx
  add    $0x61,%ecx
  test   $0x8,%bl
  lea    D721(%rip),%rdx
  lea    D580(%rip),%rax
  cmove  %rax,%rdx
  lea    D58(%rip),%rsi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  jmp    L493
  lea    D592(%rip),%rdx
  jmp    L684
  lea    D322(%rip),%rdx
  jmp    L684
  lea    D381(%rip),%rdx
  jmp    L684
  lea    D677(%rip),%rdx
  jmp    L684
  lea    D123(%rip),%rdx
  jmp    L684
  lea    D608(%rip),%rdx
  jmp    L684
  lea    D900(%rip),%rdx
  jmp    L684
  lea    D577(%rip),%rdx
  jmp    L684
  lea    D660(%rip),%rdx
  jmp    L684
L625:
  lea    D905(%rip),%rdx
  jmp    L684
  lea    D672(%rip),%rdx
  jmp    L73
  lea    D155(%rip),%rdx
L73:
  mov    %ebx,%ecx
  and    $0xf,%ecx
  lea    D11(%rip),%rsi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  jmp    L493
  lea    D409(%rip),%rdi
  jmp    L632
  lea    D743(%rip),%rdx
L638:
  lea    D771(%rip),%rsi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %ebx,%esi
  and    $0x1f,%esi
  mov    %rbp,%rdi
  call   <print_reg@plt>
  mov    %ebx,%edx
  sar    $0x5,%edx
  movzbl %dl,%edx
  cmp    $0x9,%edx
  jle    L550
  lea    D734(%rip),%rsi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  jmp    L493
  lea    D638(%rip),%rdx
  jmp    L638
L550:
  lea    D333(%rip),%rsi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  jmp    L493
  lea    D528(%rip),%rdi
L632:
  mov    %rbp,%rsi
  call   <fputs@plt>
  mov    %ebx,%edx
  and    $0xfff,%edx
  cmp    $0x9,%edx
  jg     L830
  test   %edx,%edx
  je     L493
  lea    D68(%rip),%rsi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  jmp    L493
  lea    D378(%rip),%rdi
  jmp    L632
  lea    D473(%rip),%rdi
  jmp    L632
  lea    D810(%rip),%rdi
  jmp    L632
  lea    D55(%rip),%rdi
  jmp    L632
  lea    D518(%rip),%rdi
  jmp    L632
  lea    D410(%rip),%rdi
  jmp    L632
L830:
  lea    D398(%rip),%rsi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  jmp    L493
  lea    D685(%rip),%rdx
  jmp    L537
  lea    D912(%rip),%rdx
L711:
  lea    D771(%rip),%rsi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %ebx,%esi
  and    $0x1f,%esi
  mov    %rbp,%rdi
  call   <print_reg@plt>
  mov    %rbp,%rcx
  mov    $0x2,%edx
  mov    $0x1,%esi
  lea    D174(%rip),%rdi
  call   <fwrite@plt>
  mov    %ebx,%esi
  sar    $0x5,%esi
  and    $0x1f,%esi
  mov    %rbp,%rdi
  call   <print_reg@plt>
  jmp    L493
  lea    D437(%rip),%rdx
  jmp    L711
  lea    D432(%rip),%rdx
  jmp    L711
  lea    D108(%rip),%rdx
  jmp    L711
  lea    D199(%rip),%rdx
  jmp    L711
  lea    D770(%rip),%rdx
  jmp    L711
  lea    D448(%rip),%rdx
  jmp    L711
  lea    D798(%rip),%rdx
L537:
  lea    D771(%rip),%rsi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %ebx,%esi
  and    $0x1f,%esi
  mov    %rbp,%rdi
  call   <print_reg@plt>
  mov    %ebx,%edx
  sar    $0x5,%edx
  and    $0xf,%edx
  lea    D734(%rip),%rsi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  jmp    L493
  lea    D684(%rip),%rdx
  jmp    L537
  lea    D128(%rip),%rdx
  jmp    L537
  lea    D545(%rip),%rdx
  jmp    L537
  lea    D641(%rip),%rdx
  jmp    L537
  lea    D637(%rip),%rdx
  jmp    L537
  lea    D160(%rip),%rdx
  jmp    L537
  lea    D889(%rip),%rdx
L682:
  lea    D771(%rip),%rsi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %ebx,%esi
  and    $0x1f,%esi
  mov    %rbp,%rdi
  call   <print_reg@plt>
  mov    %ebx,%edx
  sar    $0x5,%edx
  and    $0x1f,%edx
  lea    D734(%rip),%rsi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  jmp    L493
  lea    D150(%rip),%rdx
  jmp    L682
  mov    %ebx,%edx
  and    $0x7,%edx
  add    $0x61,%edx
  lea    D424(%rip),%rsi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %ebx,%edx
  sar    $0x3,%edx
  movzbl %dl,%edx
  cmp    $0x9,%edx
  jle    L369
  lea    D527(%rip),%rsi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  jmp    L493
L369:
  lea    D389(%rip),%rsi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  jmp    L493
  mov    %ebx,%edx
  sar    $0x5,%edx
  and    $0x7,%edx
  add    $0x61,%edx
  lea    D903(%rip),%rsi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  mov    %ebx,%esi
  and    $0x1f,%esi
  mov    %rbp,%rdi
  call   <print_reg@plt>
  jmp    L493
  mov    %rbp,%rcx
  mov    $0x5,%edx
  mov    $0x1,%esi
  lea    D402(%rip),%rdi
  call   <fwrite@plt>
  mov    %ebx,%esi
  and    $0x1f,%esi
  mov    %rbp,%rdi
  call   <print_reg@plt>
  mov    %ebx,%edx
  sar    $0x5,%edx
  and    $0x7,%edx
  add    $0x61,%edx
  lea    D232(%rip),%rsi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  jmp    L493
L751:
  mov    %rbp,%rsi
  mov    $0x3f,%edi
  call   <fputc@plt>
  lea    -0x20(%rbx),%eax
  cmp    $0x5e,%eax
  ja     L493
  mov    %ebx,%edx
  lea    D51(%rip),%rsi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
  jmp    L493
L556:
  mov    %ebx,%eax
  sar    $0x4,%eax
L779:
  cmp    $0x1c,%eax
  ja     L30
  mov    %eax,%eax
  lea    D904(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
L759:
  mov    %ebx,%eax
  sar    $0x4,%eax
  cmp    $0x1cf,%ebx
  jg     L559
  jmp    L779
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D598
data_type: string
name: extract_symbolic_data
arguments: data_label: D144
data_type: string
name: extract_symbolic_data
arguments: data_label: D483
data_type: string
name: extract_symbolic_data
arguments: data_label: D653
data_type: string
name: extract_symbolic_data
arguments: data_label: D609
data_type: string
name: extract_symbolic_data
arguments: data_label: D833
data_type: string
name: extract_symbolic_data
arguments: data_label: D460
data_type: string
name: extract_symbolic_data
arguments: data_label: D295
data_type: string
name: extract_symbolic_data
arguments: data_label: D613
data_type: string
name: extract_symbolic_data
arguments: data_label: D335
data_type: string
name: extract_symbolic_data
arguments: data_label: D800
data_type: string
name: extract_symbolic_data
arguments: data_label: D157
data_type: string
name: extract_symbolic_data
arguments: data_label: D529
data_type: string
name: extract_symbolic_data
arguments: data_label: D443
data_type: string
name: extract_symbolic_data
arguments: data_label: D523
data_type: string
name: extract_symbolic_data
arguments: data_label: D621
data_type: string
name: extract_symbolic_data
arguments: data_label: D844
data_type: string
name: extract_symbolic_data
arguments: data_label: D927
data_type: string
name: extract_symbolic_data
arguments: data_label: D799
data_type: string
name: extract_symbolic_data
arguments: data_label: D765
data_type: string
name: extract_symbolic_data
arguments: data_label: D751
data_type: string
name: extract_symbolic_data
arguments: data_label: D447
data_type: string
name: extract_symbolic_data
arguments: data_label: D413
data_type: string
name: extract_symbolic_data
arguments: data_label: D2
data_type: string
name: extract_symbolic_data
arguments: data_label: D229
data_type: string
name: extract_symbolic_data
arguments: data_label: D771
data_type: string
name: extract_symbolic_data
arguments: data_label: D467
data_type: string
name: extract_symbolic_data
arguments: data_label: D731
data_type: string
name: extract_symbolic_data
arguments: data_label: D721
data_type: string
name: extract_symbolic_data
arguments: data_label: D580
data_type: string
name: extract_symbolic_data
arguments: data_label: D58
data_type: string
name: extract_symbolic_data
arguments: data_label: D592
data_type: string
name: extract_symbolic_data
arguments: data_label: D322
data_type: string
name: extract_symbolic_data
arguments: data_label: D381
data_type: string
name: extract_symbolic_data
arguments: data_label: D677
data_type: string
name: extract_symbolic_data
arguments: data_label: D123
data_type: string
name: extract_symbolic_data
arguments: data_label: D608
data_type: string
name: extract_symbolic_data
arguments: data_label: D900
data_type: string
name: extract_symbolic_data
arguments: data_label: D577
data_type: string
name: extract_symbolic_data
arguments: data_label: D660
data_type: string
name: extract_symbolic_data
arguments: data_label: D905
data_type: string
name: extract_symbolic_data
arguments: data_label: D672
data_type: string
name: extract_symbolic_data
arguments: data_label: D155
data_type: string
name: extract_symbolic_data
arguments: data_label: D11
data_type: string
name: extract_symbolic_data
arguments: data_label: D409
data_type: string
name: extract_symbolic_data
arguments: data_label: D743
data_type: string
name: extract_symbolic_data
arguments: data_label: D734
data_type: string
name: extract_symbolic_data
arguments: data_label: D638
data_type: string
name: extract_symbolic_data
arguments: data_label: D333
data_type: string
name: extract_symbolic_data
arguments: data_label: D528
data_type: string
name: extract_symbolic_data
arguments: data_label: D68
data_type: string
name: extract_symbolic_data
arguments: data_label: D378
data_type: string
name: extract_symbolic_data
arguments: data_label: D473
data_type: string
name: extract_symbolic_data
arguments: data_label: D810
data_type: string
name: extract_symbolic_data
arguments: data_label: D55
data_type: string
name: extract_symbolic_data
arguments: data_label: D518
data_type: string
name: extract_symbolic_data
arguments: data_label: D410
data_type: string
name: extract_symbolic_data
arguments: data_label: D398
data_type: string
name: extract_symbolic_data
arguments: data_label: D685
data_type: string
name: extract_symbolic_data
arguments: data_label: D912
data_type: string
name: extract_symbolic_data
arguments: data_label: D174
data_type: string
name: extract_symbolic_data
arguments: data_label: D437
data_type: string
name: extract_symbolic_data
arguments: data_label: D432
data_type: string
name: extract_symbolic_data
arguments: data_label: D108
data_type: string
name: extract_symbolic_data
arguments: data_label: D199
data_type: string
name: extract_symbolic_data
arguments: data_label: D770
data_type: string
name: extract_symbolic_data
arguments: data_label: D448
data_type: string
name: extract_symbolic_data
arguments: data_label: D798
data_type: string
name: extract_symbolic_data
arguments: data_label: D684
data_type: string
name: extract_symbolic_data
arguments: data_label: D128
data_type: string
name: extract_symbolic_data
arguments: data_label: D545
data_type: string
name: extract_symbolic_data
arguments: data_label: D641
data_type: string
name: extract_symbolic_data
arguments: data_label: D637
data_type: string
name: extract_symbolic_data
arguments: data_label: D160
data_type: string
name: extract_symbolic_data
arguments: data_label: D889
data_type: string
name: extract_symbolic_data
arguments: data_label: D150
data_type: string
name: extract_symbolic_data
arguments: data_label: D424
data_type: string
name: extract_symbolic_data
arguments: data_label: D527
data_type: string
name: extract_symbolic_data
arguments: data_label: D389
data_type: string
name: extract_symbolic_data
arguments: data_label: D903
data_type: string
name: extract_symbolic_data
arguments: data_label: D402
data_type: string
name: extract_symbolic_data
arguments: data_label: D232
data_type: string
name: extract_symbolic_data
arguments: data_label: D51
data_type: string

tool: D598:  %4d

tool: D144:  %04x %04x			

tool: D483:      

tool: D653: clie

tool: D609: stie

tool: D833: stz

tool: D460: clz

tool: D295: nop

tool: D613: wait

tool: D335: rst

tool: D800: ijmp

tool: D157: tof

tool: D529: tdc

tool: D443: sksp

tool: D523: ijsr

tool: D621: slp

tool: D844: rts

tool: D927: rti

tool: D799: rtsc	0

tool: D765: rtsc	1

tool: D751: stc

tool: D447: stn

tool: D413: clc

tool: D2: cln

tool: D229: dec

tool: D771: %s	

tool: D467: neg

tool: D731: clr

tool: D721: pop

tool: D580: push

tool: D58: %s	#%c

tool: D592: not

tool: D322: shl

tool: D381: shr

tool: D677: shra

tool: D123: rlc

tool: D608: rrc

tool: D900: adc

tool: D577: sbc

tool: D660: swap

tool: D905: inc

tool: D672: sst

tool: D155: cst

tool: D11: %s	0%xh

tool: D409: jmp

tool: D743: movl

tool: D734: , 0%xh

tool: D638: cmpl

tool: D333: , %d

tool: D528: jsr

tool: D68: 	%d

tool: D378: jz

tool: D473: jnz

tool: D810: jns

tool: D55: js

tool: D518: jnc

tool: D410: jc

tool: D398: 	0%xh

tool: D685: bicl

tool: D912: mov

tool: D174: , 

tool: D437: cmp

tool: D432: sub

tool: D108: add

tool: D199: and

tool: D770: or

tool: D448: xor

tool: D798: bich

tool: D684: bttl

tool: D128: btth

tool: D545: bisl

tool: D641: bish

tool: D637: btgl

tool: D160: btgh

tool: D889: subl

tool: D150: addl

tool: D424: ldr	#%c, 

tool: D527: 0%xh

tool: D389: %d

tool: D903: mtpr	#%c, 

tool: D402: mfpr	

tool: D232: , #%c

tool: D51: 		; `%c'

assistant: ```c
void print_command(FILE *out, int line, int addr, int cmd) {
  char *m;
  int arg;
  if (line > 0)
    fprintf(out, " %4d", line);
  else
    fprintf(out, "     ");
  fprintf(out, " %04x %04x\t\t\t", addr, cmd);
  switch (cmd) {
  case 0x0000:
    fprintf(out, "nop");
    goto done;
  case 0x0001:
    fprintf(out, "wait");
    goto done;
  case 0x0002:
    fprintf(out, "rst");
    goto done;
  case 0x0003:
    fprintf(out, "ijmp");
    goto done;
  case 0x0004:
    fprintf(out, "tof");
    goto done;
  case 0x0005:
    fprintf(out, "tdc");
    goto done;
  case 0x0006:
    fprintf(out, "sksp");
    goto done;
  case 0x0007:
    fprintf(out, "ijsr");
    goto done;
  case 0x0008:
    fprintf(out, "slp");
    goto done;
  case 0x000c:
    fprintf(out, "rts");
    goto done;
  case 0x000d:
    fprintf(out, "rti");
    goto done;
  case 0x000e:
    fprintf(out, "rtsc\t0");
    goto done;
  case 0x000f:
    fprintf(out, "rtsc\t1");
    goto done;
  case 0x0181:
    fprintf(out, "stc");
    goto done;
  case 0x0182:
    fprintf(out, "stz");
    goto done;
  case 0x0184:
    fprintf(out, "stn");
    goto done;
  case 0x0188:
    fprintf(out, "stie");
    goto done;
  case 0x01c1:
    fprintf(out, "clc");
    goto done;
  case 0x01c2:
    fprintf(out, "clz");
    goto done;
  case 0x01c4:
    fprintf(out, "cln");
    goto done;
  case 0x01c8:
    fprintf(out, "clie");
    goto done;
  }
  switch (cmd >> 4) {
  case 0x001:
    fprintf(out, "%s\t#%c", (cmd & 8) ? "pop" : "push", (cmd & 7) + 'a');
    goto done;
  case 0x002:
  case 0x003:
    m = "swap";
    goto arg1op;
  case 0x004:
  case 0x005:
    m = "neg";
    goto arg1op;
  case 0x006:
  case 0x007:
    m = "not";
    goto arg1op;
  case 0x008:
  case 0x009:
    m = "shl";
    goto arg1op;
  case 0x00a:
  case 0x00b:
    m = "shr";
    goto arg1op;
  case 0x00c:
  case 0x00d:
    m = "shra";
    goto arg1op;
  case 0x00e:
  case 0x00f:
    m = "rlc";
    goto arg1op;
  case 0x010:
  case 0x011:
    m = "rrc";
    goto arg1op;
  case 0x012:
  case 0x013:
    m = "adc";
    goto arg1op;
  case 0x014:
  case 0x015:
    m = "sbc";
    goto arg1op;
  case 0x2c2:
  case 0x2c3:
    m = "dec";
    goto arg1op;
  case 0x302:
  case 0x303:
    m = "inc";
    goto arg1op;
  case 0x400:
  case 0x401:
    m = "clr";
    goto arg1op;
  arg1op:
    fprintf(out, "%s\t", m);
    print_reg(out, cmd & 0x1f);
    goto done;
  case 0x018:
    m = "sst";
    goto statusop;
  case 0x01c:
    m = "cst";
  statusop:
    fprintf(out, "%s\t0%xh", m, cmd & 0xf);
    goto done;
  }
  switch (cmd >> 12) {
  case 0x4:
  case 0x5:
    m = "movl";
    goto moveop;
  case 0x6:
  case 0x7:
    m = "cmpl";
  moveop:
    fprintf(out, "%s\t", m);
    print_reg(out, cmd & 0x1f);
    arg = (cmd >> 5) & 0xff;
    if (arg > 9)
      fprintf(out, ", 0%xh", arg);
    else
      fprintf(out, ", %d", arg);
    goto done;
  case 0x8:
    m = "jmp";
    goto jumpop;
  case 0x9:
    m = "jsr";
    goto jumpop;
  case 0xa:
    m = "jz";
    goto jumpop;
  case 0xb:
    m = "jnz";
    goto jumpop;
  case 0xc:
    m = "jns";
    goto jumpop;
  case 0xd:
    m = "js";
    goto jumpop;
  case 0xe:
    m = "jnc";
    goto jumpop;
  case 0xf:
    m = "jc";
  jumpop:
    fprintf(out, "%s", m);
    arg = cmd & 0xfff;
    if (arg > 9)
      fprintf(out, "\t0%xh", arg);
    else if (arg)
      fprintf(out, "\t%d", arg);
    goto done;
  }
  switch (cmd >> 8) {
  case 0x04:
  case 0x05:
  case 0x06:
  case 0x07:
    m = "mov";
    goto movop;
  case 0x08:
  case 0x09:
  case 0x0a:
  case 0x0b:
    m = "cmp";
    goto movop;
  case 0x0c:
  case 0x0d:
  case 0x0e:
  case 0x0f:
    m = "sub";
    goto movop;
  case 0x10:
  case 0x11:
  case 0x12:
  case 0x13:
    m = "add";
    goto movop;
  case 0x14:
  case 0x15:
  case 0x16:
  case 0x17:
    m = "and";
    goto movop;
  case 0x18:
  case 0x19:
  case 0x1a:
  case 0x1b:
    m = "or";
    goto movop;
  case 0x1c:
  case 0x1d:
  case 0x1e:
  case 0x1f:
    m = "xor";
  movop:
    fprintf(out, "%s\t", m);
    print_reg(out, cmd & 0x1f);
    fprintf(out, ", ");
    print_reg(out, cmd >> 5 & 0x1f);
    goto done;
  case 0x28:
  case 0x29:
    m = "bicl";
    goto bitop;
  case 0x2a:
  case 0x2b:
    m = "bich";
    goto bitop;
  case 0x34:
  case 0x35:
    m = "bttl";
    goto bitop;
  case 0x36:
  case 0x37:
    m = "btth";
    goto bitop;
  case 0x38:
  case 0x39:
    m = "bisl";
    goto bitop;
  case 0x3a:
  case 0x3b:
    m = "bish";
    goto bitop;
  case 0x3c:
  case 0x3d:
    m = "btgl";
    goto bitop;
  case 0x3e:
  case 0x3f:
    m = "btgh";
  bitop:
    fprintf(out, "%s\t", m);
    print_reg(out, cmd & 0x1f);
    fprintf(out, ", 0%xh", cmd >> 5 & 0xf);
    goto done;
  case 0x2c:
  case 0x2d:
  case 0x2e:
  case 0x2f:
    m = "subl";
    goto bit5op;
  case 0x30:
  case 0x31:
  case 0x32:
  case 0x33:
    m = "addl";
  bit5op:
    fprintf(out, "%s\t", m);
    print_reg(out, cmd & 0x1f);
    fprintf(out, ", 0%xh", cmd >> 5 & 0x1f);
    goto done;
  case 0x20:
  case 0x21:
  case 0x22:
  case 0x23:
  case 0x24:
  case 0x25:
  case 0x26:
  case 0x27:
    fprintf(out, "ldr\t#%c, ", (cmd & 7) + 'a');
    arg = (cmd >> 3) & 0xff;
    if (arg > 9)
      fprintf(out, "0%xh", arg);
    else
      fprintf(out, "%d", arg);
    goto done;
  case 0x02:
    fprintf(out, "mtpr\t#%c, ", ((cmd >> 5) & 7) + 'a');
    print_reg(out, cmd & 0x1f);
    goto done;
  case 0x03:
    fprintf(out, "mfpr\t");
    print_reg(out, cmd & 0x1f);
    fprintf(out, ", #%c", ((cmd >> 5) & 7) + 'a');
    goto done;
  }
  fprintf(out, "?");
  if (cmd >= ' ' && cmd <= '~')
    fprintf(out, "\t\t; `%c'", cmd);
done:
  fprintf(out, "\n");
}
```