--- /dev/null
+;平成21年 春期 基本情報技術者 午後 問12-2
+MUL START ; 32ビット×32ビット→32ビット
+ RPUSH
+ PUSH 0,GR3
+ PUSH 0,GR2
+ LD GR2,1,GR2 ; 乗数下位語を取り出してGR2に設定
+ CALL MULS ; 被乗数×乗数下位語→積(A)
+ POP GR2
+ LD GR2,0,GR2
+ LAD GR3,SV ; 結果の格納先として作業領域を設定
+ CALL MULS ; 被乗数×乗数上位語→積(B)
+ LD GR6,1,GR3
+ POP GR3
+ ADDL GR6,0,GR3 ; 積(A)の上位語と積(B)の下位語を加算
+ ST GR6,0,GR3
+ RPOP
+ RET
+SV DS 2
+ END
+MULS START ; 32ビット×16ビット→32ビット
+ RPUSH
+ LAD GR6,0 ; 積 上位語の初期化
+ LAD GR7,0 ; 積 下位語の初期化
+ LD GR4,0,GR1 ; 被乗数 上位語の取出し
+ LD GR5,1,GR1 ; 被乗数 下位語の取出し
+LP SRL GR2,1 ; 乗数を1ビット右にシフト
+ JOV ADD32
+ JZE FIN
+ JUMP NEXT ; 加算処理をスキップ
+ADD32 ADDL GR6,GR4 ; 32ビット+32ビット→32ビット
+ ADDL GR7,GR5
+ JOV ADJ1
+ JUMP NEXT
+ADJ1 ADDL GR6,=1 ; けた上げ処理
+NEXT SLL GR4,1 ; 被乗数(32ビット)を1ビット左にシフト
+ SLL GR5,1
+ JOV ADJ2
+ JUMP LP
+ADJ2 OR GR4,=1
+ JUMP LP
+FIN ST GR6,0,GR3 ; 乗算結果の格納
+ ST GR7,1,GR3
+ RPOP
+ RET
+ END