; 平成２３年度春　図形の回転
; 連続する 16 語に格納した 16 × 16 ドットの白黒の図形を，
; 時計回りに 90 度回転する 副プログラム ROTATE である。
; 図形の回転の実行例を図１に示す。
; このとき，１ドットを１ビットで 表し，
; 白は０，黒は１が格納されている。
;---------------------------
;問題の表示に合わせるため「表示」-->「表示スタイルの選択」
;-->「メモリ領域の表示スタイル」から「白黒の丸表示」を
;選択、設定変更するとたいへんよく理解できるようになります。
;----------------------
; (1) 図形を表す 16 語の先頭アドレスは GR1 に設定されて，
;     主プログラムから渡される。
;----------
;(2) 回転した結果の図形を格納する領域の先頭アドレスは
;    GR2 に設定されて， 主プログラムから渡される。
;----------
ROTATE  START
    RPUSH
    LAD GR1,ZUKEI
    LAD GR2,KAITENZK
;-----------
    LAD GR4,1
LOOP1 LD GR5,GR2
; GR5 ← 結果の領域のアドレス
    LD GR6,0,GR1
; GR6 ← 元の図形の先頭語の内容
LOOP2 LD  GR7,0,GR5
; GR7 ← 結果の領域の１語の内容
;--------------------------------
  SLL GR6,1 ;変更前の行
;   SRL GR6,1 ;変更後の行
;------------------------------------
    JOV    ON
    JZE NL
    JUMP   CONT
ON   OR GR7,GR4
CONT ST GR7,0,GR5
; 処理した１語を結果の領域に格納
    LAD GR5,1,GR5
  JUMP    LOOP2
NL  LAD GR1,1,GR1
    SLL GR4,1
  JNZ    LOOP1
  RPOP
  RET
ZUKEI DC #FFFC
    DC #FFFC
    DC #FFFC
    DC #0700
    DC #0700
    DC #0700
    DC #FFFC
    DC #FFFC
    DC #FFFC
    DC #071C
    DC #071C
    DC #071C
    DC #FFFF
    DC #FFFF
    DC #FFFF
    DC #0000
KAITENZK DS 16
  END
