MAIN   START
       LAD    GR1,ARG        ;引数のセット
       CALL   SCR            ;副プログラムの呼び出し
       RET
ARG    DC     3,4
       END
SCR    START                 ;長方形を出力 [b11.cas]
       RPUSH                 ;汎用レジスタの退避
       LD     GR4,0,GR1      ;横の長さ
       ST     GR4,LEN        ;横の長さを格納
       LAD    GR4,-1,GR4
       OUT    DATA1,LEN      ;1行出力
       LD     GR2,1,GR1      ;縦の長さ
       SUBA   GR2,=1         ;縦の長さを1引く
       JZE    FIN
       SUBA   GR2,=1         ; [  a  ]
       JZE    PRINT
       LD     GR3,DATA1      ;'*'を入れる
       ST     GR3,DATA2,GR4  ; [  b  ]
LOOP   OUT    DATA2,LEN      ;出力
       SUBA   GR2,=1         ;縦の長さを1引く
       JNZ    LOOP           ; [  c  ]
       LD     GR4,GR4        ;横の長さは0か?
       JZE    PRINT
       LD     GR3,=' '       ; [  d  ]
       ST     GR3,DATA2,GR4  ;空白を格納
PRINT  OUT    DATA1,LEN      ;出力
FIN    RPOP                  ;汎用レジスタの復元
       RET
DATA1  DC     '********************'
DATA2  DC     '*                   '
LEN    DS     1
       END