MAIN   START
       LAD     GR1,ARG      ;パラメタ
       CALL    CHGMJ        ;副プログラムの呼び出し
       RET
ARG    DC      DATA         ;文字列
       DC      #63AD        ;キービット
DATA   DC      'LANGUAGE CASL II'
       END
CHGMJ  START                ;文字列の変換 [b12.cas]
       RPUSH                ;汎用レジスタの退避
       LD      GR2,1,GR1    ;キービットの取り出し
       LD      GR1,0,GR1    ;文字列のアドレス
       LAD     GR4,0        ;格納場所の指標レジスタ
       LAD     GR5,16       ;ループカウンタ
LOOP   LD      GR3,0,GR1    ; [  a  ]
       LD      GR2,GR2      ;キーの符号判定
       JPL     L1
       ST      GR3,OUT,GR4  ;文字の格納 [  b  ]
       LAD     GR4,1,GR4    ;指標レジスタの加算
       JUMP    L2
L1     PUSH    0,GR3        ;スタック領域に格納
L2     SLL     GR2,1        ;1ビット左シフト [  c  ]
       LAD     GR1,1,GR1
       SUBA    GR5,=1       ;カウンタの減算
       JPL     LOOP
       LAD     GR1,15       ;指標レジスタの初期設定
L3     POP     GR3          ;スタックから戻す
       ST      GR3,OUT,GR1  ;文字の格納 [  d  ]
       LAD     GR1,-1,GR1
       CPA     GR1,GR4
       JMI     L4
       JUMP    L3
L4     OUT     OUT,LEN      ;出力
       RPOP                 ;汎用レジスタの復元
       RET
LEN    DC      16
OUT    DS      16
       END