+++ /dev/null
-;平成21年 春期 基本情報技術者 午後 問12-2
-MAIN START
- LAD GR1,X
- LAD GR2,Y
- LAD GR3,A
- CALL MUL
- RET
-X DC 2,3
-Y DC 4,5
-A DS 2
- END
-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