;２０１７年平成２９年度秋の問題プログラム２
;２語のビット列Alphaから別のビット列Betaを検索し、
;その位置をビット列Gammaで置換する。
;-------------  
; 以下の MAIN は、題意に沿うように
; 自作したBSRH呼び出しコード
MAIN START
	LAD GR1,ALP
	LD GR2,BET
	LD GR3,N
	LD GR4,GAM
	CALL BREP
	ST GR0,P
	RET
ALP	DC #00A0
	DC #00B0
BET	DC #A000
GAM 	DC #D000
N 	DC 4
P 	DS 1
    END
;---------------------
BREP 	START
	RPUSH
	CALL BSRH
	LD GR2,GR0
	JMI FIN
	LD GR6,=#FFFF ; マスク作成
	SRL GR6,0,GR3
	XOR GR6,=#FFFF
	LD GR7,GR3 L ; GR7 <-- N
	LD GR3,=16
	SUBA GR3,GR2 ; GR3 <-- 16 - P
	JMI ONL2 ;
	JZE ONL2
	CPA GR3,GR7 ; (16 - P) and N Comparison
	JMI NEXT ; ２語にまたがる処理
	JUMP ONL1 ; 一致する部分ビット列が１語目だけのとき
NEXT 	LD GR5,GR4 ; Gammaとマスクを退避
	LD GR7,GR6
	CALL S1 ; １語目の処理
	LD GR4,GR5
	LD GR6,GR7
	SLL GR4,0,GR3 ; ２語目用Gammaの調整
	SLL GR6,0,GR3 ; ２語目用マスクの調整
	LAD GR1,1,GR1
	CALL S2 ; ２語目の最終処理
 	JUMP FIN
ONL1 	CALL S1
	JUMP FIN
ONL2 	LD GR2,=0 ; 問c　 答え　イ
	SUBA GR2,GR3 ; GR2 <-- P - 16
	LAD GR1,1,GR1 ; 操作対象を２語目にして、
	CALL S1 ; ２語目の処理
FIN 	RPOP
	RET
S1	SRL GR4,0,GR2 ; Gammaの調整
	SRL GR6,0,GR2 ; マスクの調整
S2	LD GR2,0,GR1 ; 操作対象語の取り出し
	XOR GR6,=#FFFF
	AND GR2,GR6
	OR GR2,GR4 ; 問ｄ　答え　イ
	ST GR2,0,GR1
	RET
	END
;-----------------------------
BSRH 	START
    	RPUSH
	LD GR0,=-1
	LD GR6,=#FFFF ;
	SRL GR6,0,GR3
	XOR GR6,=#FFFF
	LD GR4,0,GR1 ; AA
	LD GR5,1,GR1
	LD GR1,=32
	SUBA GR1,GR3 ; gr1 <-- 32 - N
	LD GR3,GR1 ; gr3 <-- 32 - N
LP 	LD GR7,GR4
	AND GR7,GR6
	XOR GR7,GR2 ; o
	;LD GR7,GR7
	JZE FOUND ; ari
	SUBA GR1,=1
	JMI FIN ; nasi
	SLL GR4,1 ; shift aa right by 1bit
	SLL GR5,1
	JOV NEXT
	JUMP LP
NEXT 	OR GR4,=#0001
	JUMP LP
FOUND 	SUBA GR3,GR1 ; pp
	LD GR0,GR3
FIN 	RPOP
    RET
    END
;----------------------   -
