b4143cfeed414ab5e0c8725860141e32ad5501aa
[YACASL2.git] / as / exam_fe / 2009_04 / Q12 / muls2.casl
1 ;平成21年 春期 基本情報技術者 午後 問12-2
2 MUL     START              ; 32ビット×32ビット→32ビット
3         RPUSH
4         PUSH  0,GR3
5         PUSH  0,GR2
6         LD    GR2,1,GR2    ; 乗数下位語を取り出してGR2に設定
7         CALL  MULS         ; 被乗数×乗数下位語→積(A)
8         POP   GR2
9         LD    GR2,0,GR2
10         LAD   GR3,SV       ; 結果の格納先として作業領域を設定
11         CALL  MULS         ; 被乗数×乗数上位語→積(B)
12         LD    GR6,1,GR3
13         POP   GR3
14         ADDL  GR6,0,GR3    ; 積(A)の上位語と積(B)の下位語を加算
15         ST    GR6,0,GR3
16         RPOP
17         RET
18 SV      DS    2
19         END
20 MULS    START              ; 32ビット×16ビット→32ビット
21         RPUSH
22         LAD   GR6,0        ; 積 上位語の初期化
23         LAD   GR7,0        ; 積 下位語の初期化
24         LD    GR4,0,GR1    ; 被乗数 上位語の取出し
25         LD    GR5,1,GR1    ; 被乗数 下位語の取出し
26 LP      SRL   GR2,1        ; 乗数を1ビット右にシフト
27         JOV   ADD32
28         JZE   FIN
29         JUMP  NEXT         ; 加算処理をスキップ
30 ADD32   ADDL  GR6,GR4      ; 32ビット+32ビット→32ビット
31         ADDL  GR7,GR5
32         JOV   ADJ1
33         JUMP  NEXT 
34 ADJ1    ADDL  GR6,=1       ; けた上げ処理
35 NEXT    SLL   GR4,1        ; 被乗数(32ビット)を1ビット左にシフト
36         SLL   GR5,1
37         JOV   ADJ2
38         JUMP  LP
39 ADJ2    OR    GR4,=1
40         JUMP  LP
41 FIN     ST    GR6,0,GR3    ; 乗算結果の格納
42         ST    GR7,1,GR3
43         RPOP
44         RET
45         END