; Exam2019R01AkiP1パック１０進数の加算（同符号の場合）
MAIN	START
	LD GR1,AA
	LD GR2,BB
	CALL ADDP1
	ST GR0,ANS
	RET
AA 	DC #246C
BB 	DC #057C
ANS 	DS 1 ; 答え　#303C
;AA 	DC #246D
;BB 	DC #057D
;ANS 	DS 1 ; 答え　#303D
	END
;-------------------------------------------
ADDP1	START
	RPUSH
	ST GR1,A
	ST GR2,B
	LAD GR3,4 ; ビット数カウンタの初期化
	AND GR1,=#000F
	ST GR1,RESULT ;　 (a, ア）
	LD GR1,A ;
	SRL GR1,0,GR3 ;　上位パックを最下位パックにシフト（移動）
	LD GR2,B
	SRL GR2,0,GR3
LOOP	AND GR1,=#000F ; 最下位パックの数値を取り出す
	AND GR2,=#000F
	LAD GR0,0
	ADDL GR1,GR2
	CPL GR1,=10 ; 10以上は桁上げ
	JMI MERGE ; （b, ア）
	SUBL GR1,=10
	LAD GR0,1 ; 桁上げ加算用の１を GR0に仮保持する
MERGE	SLL GR1,0,GR3 ;　（c, イ）　GR1を元に戻す
	OR GR1,RESULT ;　中間結果との併合
	LAD GR3,4,GR3
	;4->8->12->16シフト用ビット数カウンタを加算
	CPL GR3,=16
	JZE FIN ;終了判定
	ST GR1,RESULT ; 中間結果を退避
	LD GR1,A
	SRL GR1,0,GR3
	LD GR2,B
	SRL GR2,0,GR3
	ADDL GR1,GR0 ; 桁上がり分を加算する
	JUMP LOOP
FIN 	LD GR0,GR1
	RPOP
	RET
A	DS 1
B	DS 1
RESULT 	DS 1
	END
;--------------
