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