user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<print_command>:
  endbr64
  push   %r12
  mov    %edx,%r12d
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  mov    %ecx,%ebx
  test   %esi,%esi
  jle    L214
  mov    %esi,%edx
  xor    %eax,%eax
  lea    D504(%rip),%rsi
  call   <fprintf@plt>
L340:
  xor    %eax,%eax
  mov    %ebx,%ecx
  mov    %r12d,%edx
  mov    %rbp,%rdi
  lea    D781(%rip),%rsi
  call   <fprintf@plt>
  cmp    $0xf,%ebx
  jg     L197
  test   %ebx,%ebx
  js     L413
  cmp    $0xf,%ebx
  ja     L413
  lea    D480(%rip),%rdx
  mov    %ebx,%eax
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  nopw   0x0(%rax,%rax,1)
L197:
  cmp    $0x1c1,%ebx
  je     L919
  jle    L681
  cmp    $0x1c4,%ebx
  je     L844
  cmp    $0x1c8,%ebx
  jne    L247
  mov    %rbp,%rcx
  mov    $0x4,%edx
  mov    $0x1,%esi
  lea    D636(%rip),%rdi
  call   <fwrite@plt>
L559:
  pop    %rbx
  mov    %rbp,%rsi
  mov    $0xa,%edi
  pop    %rbp
  pop    %r12
  jmp    10b0 <fputc@plt>
  nopl   0x0(%rax)
L681:
  cmp    $0x184,%ebx
  je     L854
  jle    L781
  cmp    $0x188,%ebx
  jne    L504
  mov    %rbp,%rcx
  mov    $0x4,%edx
  mov    $0x1,%esi
  lea    D339(%rip),%rdi
  call   <fwrite@plt>
  jmp    L559
  nopl   (%rax)
L247:
  cmp    $0x1c2,%ebx
  jne    L720
  mov    %rbp,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  lea    D412(%rip),%rdi
  call   <fwrite@plt>
  jmp    L559
  nopl   0x0(%rax,%rax,1)
L781:
  cmp    $0x181,%ebx
  je     L365
  cmp    $0x182,%ebx
  jne    L504
  mov    %rbp,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  lea    D898(%rip),%rdi
  call   <fwrite@plt>
  jmp    L559
  cs nopw 0x0(%rax,%rax,1)
L214:
  mov    %rdi,%rcx
  mov    $0x5,%edx
  mov    $0x1,%esi
  lea    D802(%rip),%rdi
  call   <fwrite@plt>
  jmp    L340
L720:
  mov    %ebx,%eax
  sar    $0x4,%eax
  cmp    $0x1c,%eax
  je     L126
  cmp    $0x303,%eax
  jg     L140
  cmp    $0x301,%eax
  jg     L562
  sub    $0x2c2,%eax
  lea    D306(%rip),%rdx
  cmp    $0x1,%eax
  jbe    L617
L413:
  mov    %ebx,%eax
  sar    $0x8,%eax
  sub    $0x2,%eax
  cmp    $0x3d,%eax
  ja     L422
  lea    D342(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  nopl   0x0(%rax)
  mov    %rbp,%rcx
  mov    $0x6,%edx
  mov    $0x1,%esi
  lea    D712(%rip),%rdi
  call   <fwrite@plt>
  jmp    L559
  xchg   %ax,%ax
  mov    %rbp,%rcx
  mov    $0x6,%edx
  mov    $0x1,%esi
  lea    D48(%rip),%rdi
  call   <fwrite@plt>
  jmp    L559
  xchg   %ax,%ax
  mov    %rbp,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  lea    D829(%rip),%rdi
  call   <fwrite@plt>
  jmp    L559
  xchg   %ax,%ax
  mov    %rbp,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  lea    D542(%rip),%rdi
  call   <fwrite@plt>
  jmp    L559
  xchg   %ax,%ax
  mov    %rbp,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  lea    D731(%rip),%rdi
  call   <fwrite@plt>
  jmp    L559
  xchg   %ax,%ax
  mov    %rbp,%rcx
  mov    $0x4,%edx
  mov    $0x1,%esi
  lea    D20(%rip),%rdi
  call   <fwrite@plt>
  jmp    L559
  xchg   %ax,%ax
  mov    %rbp,%rcx
  mov    $0x4,%edx
  mov    $0x1,%esi
  lea    D848(%rip),%rdi
  call   <fwrite@plt>
  jmp    L559
  xchg   %ax,%ax
  mov    %rbp,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  lea    D255(%rip),%rdi
  call   <fwrite@plt>
  jmp    L559
  xchg   %ax,%ax
  mov    %rbp,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  lea    D786(%rip),%rdi
  call   <fwrite@plt>
  jmp    L559
  xchg   %ax,%ax
  mov    %rbp,%rcx
  mov    $0x4,%edx
  mov    $0x1,%esi
  lea    D187(%rip),%rdi
  call   <fwrite@plt>
  jmp    L559
  xchg   %ax,%ax
  mov    %rbp,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  lea    D530(%rip),%rdi
  call   <fwrite@plt>
  jmp    L559
  xchg   %ax,%ax
  mov    %rbp,%rcx
  mov    $0x4,%edx
  mov    $0x1,%esi
  lea    D715(%rip),%rdi
  call   <fwrite@plt>
  jmp    L559
  xchg   %ax,%ax
  mov    %rbp,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  lea    D402(%rip),%rdi
  call   <fwrite@plt>
  jmp    L559
  xchg   %ax,%ax
L844:
  mov    %rbp,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  lea    D460(%rip),%rdi
  call   <fwrite@plt>
  jmp    L559
  xchg   %ax,%ax
L919:
  mov    %rbp,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  lea    D230(%rip),%rdi
  call   <fwrite@plt>
  jmp    L559
  xchg   %ax,%ax
L854:
  mov    %rbp,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  lea    D632(%rip),%rdi
  call   <fwrite@plt>
  jmp    L559
  xchg   %ax,%ax
L365:
  mov    %rbp,%rcx
  mov    $0x3,%edx
  mov    $0x1,%esi
  lea    D317(%rip),%rdi
  call   <fwrite@plt>
  jmp    L559
  xchg   %ax,%ax
L504:
  mov    %ebx,%eax
  sar    $0x4,%eax
  cmp    $0x1cf,%ebx
  ja     L132
  lea    D799(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  xchg   %ax,%ax
L140:
  sub    $0x400,%eax
  lea    D804(%rip),%rdx
  cmp    $0x1,%eax
  jbe    L617
L132:
  mov    %ebx,%eax
  sar    $0xc,%eax
  sub    $0x4,%eax
  cmp    $0xb,%eax
  ja     L413
  lea    D856(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D196(%rip),%rdx
  nopw   0x0(%rax,%rax,1)
L617:
  mov    %rbp,%rdi
  lea    D655(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %ebx,%esi
  mov    %rbp,%rdi
  and    $0x1f,%esi
  call   <print_reg@plt>
  jmp    L559
  lea    D544(%rip),%rdx
  jmp    L617
  lea    D451(%rip),%rdx
  jmp    L617
  lea    D292(%rip),%rdx
  jmp    L617
  lea    D223(%rip),%rdx
  jmp    L617
  lea    D755(%rip),%rdx
  jmp    L617
  lea    D202(%rip),%rdx
  jmp    L617
  lea    D486(%rip),%rdx
  jmp    L617
  lea    D380(%rip),%rdx
  jmp    L617
  lea    D307(%rip),%rdx
  jmp    L617
  mov    %ebx,%ecx
  lea    D101(%rip),%rax
  mov    %rbp,%rdi
  and    $0x7,%ecx
  lea    D626(%rip),%rdx
  lea    D674(%rip),%rsi
  add    $0x61,%ecx
  and    $0x8,%ebx
  cmove  %rax,%rdx
  xor    %eax,%eax
  call   <fprintf@plt>
  jmp    L559
  lea    D243(%rip),%rdx
L108:
  mov    %ebx,%ecx
  lea    D263(%rip),%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  and    $0xf,%ecx
  call   <fprintf@plt>
  jmp    L559
L126:
  lea    D502(%rip),%rdx
  jmp    L108
  lea    D420(%rip),%rdx
L139:
  lea    D655(%rip),%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %ebx,%esi
  mov    %rbp,%rdi
  and    $0x1f,%esi
  call   <print_reg@plt>
  mov    %ebx,%edx
  sar    $0x5,%edx
  movzbl %dl,%edx
  cmp    $0x9,%edx
  jg     L452
  lea    D170(%rip),%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <fprintf@plt>
  jmp    L559
  lea    D470(%rip),%rdx
  jmp    L139
  lea    D791(%rip),%rdi
L775:
  mov    %rbp,%rsi
  call   <fputs@plt>
  mov    %ebx,%edx
  and    $0xfff,%edx
  cmp    $0x9,%edx
  jg     L868
  test   %edx,%edx
  je     L559
  lea    D682(%rip),%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <fprintf@plt>
  jmp    L559
  lea    D762(%rip),%rdi
  jmp    L775
  lea    D825(%rip),%rdi
  jmp    L775
  lea    D350(%rip),%rdi
  jmp    L775
  lea    D686(%rip),%rdi
  jmp    L775
  lea    D528(%rip),%rdi
  jmp    L775
  lea    D365(%rip),%rdi
  jmp    L775
  lea    D364(%rip),%rdi
  jmp    L775
L868:
  lea    D608(%rip),%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <fprintf@plt>
  jmp    L559
  lea    D735(%rip),%rdx
L166:
  lea    D655(%rip),%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %ebx,%esi
  mov    %rbp,%rdi
  and    $0x1f,%esi
  call   <print_reg@plt>
  mov    %ebx,%edx
  sar    $0x5,%edx
  and    $0xf,%edx
L452:
  lea    D904(%rip),%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <fprintf@plt>
  jmp    L559
  nopl   0x0(%rax)
L562:
  lea    D374(%rip),%rdx
  jmp    L617
  lea    D517(%rip),%rdx
  jmp    L166
  lea    D169(%rip),%rdx
  jmp    L166
  lea    D573(%rip),%rdx
  jmp    L166
  lea    D89(%rip),%rdx
  jmp    L166
  lea    D809(%rip),%rdx
L10:
  mov    %rbp,%rdi
  lea    D655(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %ebx,%esi
  mov    %rbp,%rdi
  and    $0x1f,%esi
  call   <print_reg@plt>
  mov    %ebx,%edx
  lea    D904(%rip),%rsi
  xor    %eax,%eax
  sar    $0x5,%edx
  mov    %rbp,%rdi
  and    $0x1f,%edx
  call   <fprintf@plt>
  jmp    L559
  lea    D489(%rip),%rdx
  jmp    L10
  lea    D737(%rip),%rdx
  jmp    L166
  lea    D465(%rip),%rdx
  jmp    L166
  mov    %ebx,%edx
  lea    D22(%rip),%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  and    $0x7,%edx
  add    $0x61,%edx
  call   <fprintf@plt>
  mov    %ebx,%edx
  sar    $0x3,%edx
  movzbl %dl,%edx
  cmp    $0x9,%edx
  jle    L13
  lea    D691(%rip),%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <fprintf@plt>
  jmp    L559
  lea    D808(%rip),%rdx
L355:
  mov    %rbp,%rdi
  lea    D655(%rip),%rsi
  xor    %eax,%eax
  call   <fprintf@plt>
  mov    %ebx,%esi
  mov    %rbp,%rdi
  and    $0x1f,%esi
  call   <print_reg@plt>
  mov    %rbp,%rcx
  mov    $0x2,%edx
  mov    $0x1,%esi
  lea    D588(%rip),%rdi
  call   <fwrite@plt>
  mov    %ebx,%esi
  mov    %rbp,%rdi
  sar    $0x5,%esi
  and    $0x1f,%esi
  call   <print_reg@plt>
  jmp    L559
L13:
  lea    D565(%rip),%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <fprintf@plt>
  jmp    L559
  lea    D479(%rip),%rdx
  jmp    L355
  lea    D824(%rip),%rdx
  jmp    L355
  lea    D28(%rip),%rdx
  jmp    L355
  lea    D778(%rip),%rdx
  jmp    L355
  lea    D877(%rip),%rdx
  jmp    L355
  lea    D756(%rip),%rdx
  jmp    L355
  mov    %rbp,%rcx
  mov    $0x5,%edx
  mov    $0x1,%esi
  lea    D436(%rip),%rdi
  call   <fwrite@plt>
  mov    %ebx,%esi
  mov    %rbp,%rdi
  and    $0x1f,%esi
  call   <print_reg@plt>
  mov    %ebx,%edx
  lea    D246(%rip),%rsi
  xor    %eax,%eax
  sar    $0x5,%edx
  mov    %rbp,%rdi
  and    $0x7,%edx
  add    $0x61,%edx
  call   <fprintf@plt>
  jmp    L559
  mov    %ebx,%edx
  mov    %rbp,%rdi
  lea    D437(%rip),%rsi
  xor    %eax,%eax
  sar    $0x5,%edx
  and    $0x7,%edx
  add    $0x61,%edx
  call   <fprintf@plt>
  mov    %ebx,%esi
  mov    %rbp,%rdi
  and    $0x1f,%esi
  call   <print_reg@plt>
  jmp    L559
  lea    D282(%rip),%rdx
  jmp    L166
L422:
  mov    %rbp,%rsi
  mov    $0x3f,%edi
  call   <fputc@plt>
  jmp    L559
```

tool_calls: name: disassemble_data
arguments: data_label: D504
type_guessed: string
name: disassemble_data
arguments: data_label: D781
type_guessed: string
name: disassemble_data
arguments: data_label: D636
type_guessed: string
name: disassemble_data
arguments: data_label: D339
type_guessed: string
name: disassemble_data
arguments: data_label: D412
type_guessed: string
name: disassemble_data
arguments: data_label: D898
type_guessed: string
name: disassemble_data
arguments: data_label: D802
type_guessed: string
name: disassemble_data
arguments: data_label: D306
type_guessed: string
name: disassemble_data
arguments: data_label: D712
type_guessed: string
name: disassemble_data
arguments: data_label: D48
type_guessed: string
name: disassemble_data
arguments: data_label: D829
type_guessed: string
name: disassemble_data
arguments: data_label: D542
type_guessed: string
name: disassemble_data
arguments: data_label: D731
type_guessed: string
name: disassemble_data
arguments: data_label: D20
type_guessed: string
name: disassemble_data
arguments: data_label: D848
type_guessed: string
name: disassemble_data
arguments: data_label: D255
type_guessed: string
name: disassemble_data
arguments: data_label: D786
type_guessed: string
name: disassemble_data
arguments: data_label: D187
type_guessed: string
name: disassemble_data
arguments: data_label: D530
type_guessed: string
name: disassemble_data
arguments: data_label: D715
type_guessed: string
name: disassemble_data
arguments: data_label: D402
type_guessed: string
name: disassemble_data
arguments: data_label: D460
type_guessed: string
name: disassemble_data
arguments: data_label: D230
type_guessed: string
name: disassemble_data
arguments: data_label: D632
type_guessed: string
name: disassemble_data
arguments: data_label: D317
type_guessed: string
name: disassemble_data
arguments: data_label: D804
type_guessed: string
name: disassemble_data
arguments: data_label: D196
type_guessed: string
name: disassemble_data
arguments: data_label: D655
type_guessed: string
name: disassemble_data
arguments: data_label: D544
type_guessed: string
name: disassemble_data
arguments: data_label: D451
type_guessed: string
name: disassemble_data
arguments: data_label: D292
type_guessed: string
name: disassemble_data
arguments: data_label: D223
type_guessed: string
name: disassemble_data
arguments: data_label: D755
type_guessed: string
name: disassemble_data
arguments: data_label: D202
type_guessed: string
name: disassemble_data
arguments: data_label: D486
type_guessed: string
name: disassemble_data
arguments: data_label: D380
type_guessed: string
name: disassemble_data
arguments: data_label: D307
type_guessed: string
name: disassemble_data
arguments: data_label: D101
type_guessed: string
name: disassemble_data
arguments: data_label: D626
type_guessed: string
name: disassemble_data
arguments: data_label: D674
type_guessed: string
name: disassemble_data
arguments: data_label: D243
type_guessed: string
name: disassemble_data
arguments: data_label: D263
type_guessed: string
name: disassemble_data
arguments: data_label: D502
type_guessed: string
name: disassemble_data
arguments: data_label: D420
type_guessed: string
name: disassemble_data
arguments: data_label: D170
type_guessed: string
name: disassemble_data
arguments: data_label: D470
type_guessed: string
name: disassemble_data
arguments: data_label: D791
type_guessed: string
name: disassemble_data
arguments: data_label: D682
type_guessed: string
name: disassemble_data
arguments: data_label: D762
type_guessed: string
name: disassemble_data
arguments: data_label: D825
type_guessed: string
name: disassemble_data
arguments: data_label: D350
type_guessed: string
name: disassemble_data
arguments: data_label: D686
type_guessed: string
name: disassemble_data
arguments: data_label: D528
type_guessed: string
name: disassemble_data
arguments: data_label: D365
type_guessed: string
name: disassemble_data
arguments: data_label: D364
type_guessed: string
name: disassemble_data
arguments: data_label: D608
type_guessed: string
name: disassemble_data
arguments: data_label: D735
type_guessed: string
name: disassemble_data
arguments: data_label: D904
type_guessed: string
name: disassemble_data
arguments: data_label: D374
type_guessed: string
name: disassemble_data
arguments: data_label: D517
type_guessed: string
name: disassemble_data
arguments: data_label: D169
type_guessed: string
name: disassemble_data
arguments: data_label: D573
type_guessed: string
name: disassemble_data
arguments: data_label: D89
type_guessed: string
name: disassemble_data
arguments: data_label: D809
type_guessed: string
name: disassemble_data
arguments: data_label: D489
type_guessed: string
name: disassemble_data
arguments: data_label: D737
type_guessed: string
name: disassemble_data
arguments: data_label: D465
type_guessed: string
name: disassemble_data
arguments: data_label: D22
type_guessed: string
name: disassemble_data
arguments: data_label: D691
type_guessed: string
name: disassemble_data
arguments: data_label: D808
type_guessed: string
name: disassemble_data
arguments: data_label: D588
type_guessed: string
name: disassemble_data
arguments: data_label: D565
type_guessed: string
name: disassemble_data
arguments: data_label: D479
type_guessed: string
name: disassemble_data
arguments: data_label: D824
type_guessed: string
name: disassemble_data
arguments: data_label: D28
type_guessed: string
name: disassemble_data
arguments: data_label: D778
type_guessed: string
name: disassemble_data
arguments: data_label: D877
type_guessed: string
name: disassemble_data
arguments: data_label: D756
type_guessed: string
name: disassemble_data
arguments: data_label: D436
type_guessed: string
name: disassemble_data
arguments: data_label: D246
type_guessed: string
name: disassemble_data
arguments: data_label: D437
type_guessed: string
name: disassemble_data
arguments: data_label: D282
type_guessed: string

tool: D504:  %4d

tool: D781:  %04x %04x			

tool: D636: clie

tool: D339: stie

tool: D412: clz

tool: D898: stz

tool: D802:      

tool: D306: dec

tool: D712: rtsc	1

tool: D48: rtsc	0

tool: D829: rti

tool: D542: rts

tool: D731: slp

tool: D20: ijsr

tool: D848: sksp

tool: D255: tdc

tool: D786: tof

tool: D187: ijmp

tool: D530: rst

tool: D715: wait

tool: D402: nop

tool: D460: cln

tool: D230: clc

tool: D632: stn

tool: D317: stc

tool: D804: clr

tool: D196: neg

tool: D655: %s	

tool: D544: swap

tool: D451: sbc

tool: D292: adc

tool: D223: rrc

tool: D755: not

tool: D202: rlc

tool: D486: shra

tool: D380: shr

tool: D307: shl

tool: D101: push

tool: D626: pop

tool: D674: %s	#%c

tool: D243: sst

tool: D263: %s	0%xh

tool: D502: cst

tool: D420: cmpl

tool: D170: , %d

tool: D470: movl

tool: D791: jmp

tool: D682: 	%d

tool: D762: jc

tool: D825: jns

tool: D350: jnz

tool: D686: jz

tool: D528: jsr

tool: D365: jnc

tool: D364: js

tool: D608: 	0%xh

tool: D735: btgl

tool: D904: , 0%xh

tool: D374: inc

tool: D517: bish

tool: D169: bisl

tool: D573: btth

tool: D89: bttl

tool: D809: addl

tool: D489: subl

tool: D737: bich

tool: D465: bicl

tool: D22: ldr	#%c, 

tool: D691: 0%xh

tool: D808: xor

tool: D588: , 

tool: D565: %d

tool: D479: or

tool: D824: and

tool: D28: add

tool: D778: sub

tool: D877: cmp

tool: D756: mov

tool: D436: mfpr	

tool: D246: , #%c

tool: D437: mtpr	#%c, 

tool: D282: btgh

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");
}
```