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