CODE   START               ;暗号化 [c07.cas]
       LAD     GR1,0
       LD      GR0,KEY     ;KEYのロード
TOP    JZE     FIN         ;ゼロならば終了
       JMI     N1
N0     LAD     GR1,1,GR1   ;シフトした回数
       SLL     GR0,1       ;1のビットがある [  a  ]
       JMI     N1          ;    まで左にシフトする
       JUMP    N0
N1     LD      GR2,=#8000  ;#8000 → GR2
       SRL     GR2,0,GR1   ;GR1の数だけ右にずらす
       LD      GR3,DATA    ;DATAのロード
       AND     GR3,GR2     ;左のビットを取り出す [  b  ]
       LAD     GR4,1,GR1
N2     SLL     GR0,1       ;1のビットがあるまで
       JMI     N3          ;    シフト
       LAD     GR4,1,GR4
       JUMP    N2
N3     ST      GR4,GR4SV
       LD      GR6,=#8000  ;#8000 → GR6 [  c  ]
       SRL     GR6,0,GR4   ;GR4の数だけ右にずらす
       LD      GR5,DATA
       AND     GR5,GR6     ;左のビットを取り出す
       SUBA    GR4,GR1
       LD      GR7,GR3
       SRL     GR7,0,GR4   ;比較するために右にシフト
       CPA     GR7,GR5     ;比較
       JZE     NEXT        ;同じ場合は入れ換えない
       LD      GR5,DATA    ;DATAをロード
       CPA     GR3,=0      ;左のビットが0か?
       JZE     N4
       SUBA    GR5,GR2     ;左のビットが0の場合 [  d  ]
       ADDA    GR5,GR6
       ST      GR5,DATA    ;DATAに格納
       JUMP    NEXT
N4     ADDA    GR5,GR2     ;左のビットが1の場合
       SUBA    GR5,GR6
       ST      GR5,DATA    ;DATAに格納
NEXT   LD      GR1,GR4SV
       LAD     GR1,1,GR1
       SLL     GR0,1       ;1ビット左にずらす
       JUMP    TOP
FIN    RET
GR4SV  DS      1
DATA   DC      #6010  ;0110 0000 0001 0000
KEY    DC      #5012  ;0101 0000 0001 0010
       END