;Exam2012H24HaruSpring
;---------------------------
MAIN START
	CALL SUMC
	RET
;VR DC '9134','987','57','2', '36'
	END
;--------------------
SUMC START
	LAD GR1,BUF1  ;数字１のポインタを設定
	IN BUF1,LEN1  ;最初の数字列を入力し数字列を１とする
	LD GR4,LEN1   ;数字列１の長さを設定
	LAD GR3,BUF3  ;BUF3を総和の領域として設定
	LAD GR2,BUF2  ;数字列２のポインタを設定
LOOP IN BUF2,LEN2 ;次の数字列を入力し数字列２とする
	LD GR5,LEN2  ;数字列２の長さを設定
	;JMI FIN1   ;入力終了
	JZE FIN1    ;入力終了
;注意：Visible Inside の仕様ではIN命令で入力がない時には
;文字列の長さとして-1 ではなくてゼロを格納する。
;このため上記のように試験問題文のコードを変更した。
	CALL ADDC
	LD GR4,GR0 ; e　答え　オ
	PUSH 0,GR1 ;総和の領域のポインタと
	LD GR1,GR3 ;数字列１のポインタを入れ替え
	POP GR3 ;
	JUMP LOOP
FIN1 LAD GR3,BUF3 ; f 答え　ウ
	CPA GR1,GR3 ;総和の領域を判定
	JZE FIN2
	ST GR4,LEN1
	OUT BUF1,LEN1
FIN2 ST GR4,LEN3
	OUT BUF3,LEN3
FIN3 RET
BUF1 DS  9 ;数字列１または総和
BUF2 DS  9 ;数字列２
BUF3 DS  9 ;総和または数字列１
LEN1 DS 1
LEN2 DS 1
LEN3 DS 1

	END
;---------------------
ADDC START
	RPUSH
	CPA GR4,GR5   ; 文字数の比較
	JPL CONT
	PUSH 0,GR4    ;GR4 >= GR5 となるように
	LD GR4,GR5    ;数字列１と数字列２の
	POP GR5       ;ポインタの入れ替え
	PUSH 0,GR1;
	LD GR1,GR2;
	POP GR2;
CONT ADDA GR1,GR4 ;末桁の次のアドレス
	ADDA GR2,GR5
	LD GR0,=0;
	PUSH 0
LOOP1 LAD GR2,-1,GR2 ;末桁のアドｒ巣
	LD GR6,0,GR2     ;末桁の数字を取り出す
	AND GR6,=#000F   ;数値として取り出す
LOOP2 LAD GR1,-1,GR1
	ADDA GR6,0,GR1   ;１桁加算
	ADDA GR6,GR0     ;桁上げフラグを加算
	CPA GR6,='9'     ;桁上げ？
	JPL CARRY
	LD GR0,=0      ;桁上げフラグをクリア
	JUMP NEXT
CARRY LD GR0,=1    ;桁上げフラグを設定
	SUBA GR6,=10   ; a 答え　ケ
NEXT PUSH 0,GR6    ;加算結果１桁を保存
	SUBA GR4,=1    ; b　答え　ア
	JZE END1
	SUBA GR5,=1    ; c　　答え　エ
	JPL LOOP1
	LD GR6,=0
	JUMP LOOP2
END1 LD GR0,GR0    ;左端を桁上げ？
	JZE NOCARRY
	LD GR1,='1' ; 
LOOP3 ST GR1,0,GR3 ;左端に'1'を追加
	LAD GR3,1,GR3
NOCARRY POP GR1    ;加算結果１桁取り出し
	LD GR1,GR1
	JZE END2
	ADDA GR0,=1
	JUMP LOOP3
END2 RPOP
	RET
	END
;---------------------
