;Exam2010H22FallPrg2  ZZ
;Exam2010H22秋Prg2
;連続したＮ後の語順とビット列を逆転
;----------------------
MAIN START
	LAD GR1,WORDS
	LD GR2,N
	CALL LREVRS
	RET
N DC 6
WORDS DC #BEFA,#5678,#89BD,#0315,#92C4,#BCA1
HOZON DC #BEFA,#5678,#89BD,#0315,#92C4,#BCA1
	END
;---------------
LREVRS START
	RPUSH
	LD GR3,GR1 ;WORDSの先頭アドレス
	LD GR4,GR2 ;　Ｎ
	SUBA GR4,=1
	JZE LOOP2
	ADDA GR4,GR1
LOOP1 LD GR5,0,GR3 ;GR3の指す語とGR4が指す語の内容を入れ替える
	LD GR6,0,GR4  ;
	ST GR5,0,GR4  ;
	ST GR6,0,GR3  ;
	LAD GR3,1,GR3 ;GR3を次の語に位置付ける
	LAD GR4,-1,GR4 ;GR4を一つ前の語に位置付ける
	CPA GR3,GR4
	JMI LOOP1 ;ゼロまたはプラスの時語順逆転完了
LOOP2 CALL REVRS
	LAD GR1,1,GR1 ;次の語のアドレス
	SUBA GR2,=1 ;残りの語数をカウント
	JNZ LOOP2 ;GR2がゼロになると終了
FIN3  RPOP
	RET
	END
;--------------------
REVRS START
	RPUSH
	LD GR4,=0    ;結果のビット列を初期化
	LAD GR2,15   ;ループカウンタ
	LD GR3,0,GR1 ; GR3 <--- ビット列
LOOP SLL GR4,1   ;結果のビット列を左シフト
	SRL GR3,1    ;元のビット列を右シフト
	JOV ON   ;元のビット列右端に１があればＯＮへ　答え　ウ
	JZE FIN1 ;元のビット列の残りのビットはすべてゼロ
	JUMP OFF
ON OR GR4,=#0001
OFF SUBA GR2,=1 ;カウンタから１を引く
	JMI FIN2    ;１６ビット処理済
	JUMP LOOP
FIN1 SLL GR4,0,GR2
;結果のビット列を残りのビット数だけシフト　答え　イ
FIN2 ST GR4,0,GR1
	RPOP
	RET
	END
;----------------
