YACAL2: CASL2処理系
[YACASL2.git] / as / muls_out.casl
1 ; Xの2語とYの1語の積をAの2語に格納し、表示
2 MAIN    START
3         LAD     GR1,X
4         LD      GR2,Y
5     LAD GR3,A
6     CALL MULS
7     LAD GR2,A
8     LD GR1,0,GR2
9     CALL OUTI
10     LD GR1,1,GR2
11     CALL OUTI
12         RET
13 X       DC      1000,10000
14 Y       DC      8
15 A   DS  2
16         END
17 MULS    START              ; 32ビット×16ビット→32ビット
18         RPUSH
19         LAD   GR6,0        ; 積 上位語の初期化
20         LAD   GR7,0        ; 積 下位語の初期化
21         LD    GR4,0,GR1    ; 被乗数 上位語の取出し
22         LD    GR5,1,GR1    ; 被乗数 下位語の取出し
23 LP      SRL   GR2,1        ; 乗数を1ビット右にシフト
24         JOV   ADD32
25         JZE   FIN
26         JUMP  NEXT         ; 加算処理をスキップ
27 ADD32   ADDL  GR6,GR4      ; 32ビット+32ビット→32ビット
28         ADDL  GR7,GR5
29         JOV   ADJ1
30         JUMP  NEXT 
31 ADJ1    ADDL  GR6,=1       ; けた上げ処理
32 NEXT    SLL   GR4,1        ; 被乗数(32ビット)を1ビット左にシフト
33         SLL   GR5,1
34         JOV   ADJ2
35         JUMP  LP
36 ADJ2    OR    GR4,=1
37         JUMP  LP
38 FIN     ST    GR6,0,GR3    ; 乗算結果の格納
39         ST    GR7,1,GR3
40         RPOP
41         RET
42         END