83cac026e500aa268f7e017db20ff0925d920257
[YACASL2.git] / as / casl2lib / src / mull0.casl
1 ; 符号なし乗算
2 ; 入力
3 ;   GR0 = 被乗数
4 ;   GR1 = 乗数
5 ; 出力
6 ;   GR3 = 結果
7 MULL     START
8 ; レジスタを退避
9          PUSH   0,GR1
10          PUSH   0,GR2
11 ; 初期化
12          XOR    GR3,GR3 ; GR3 = 積
13 ; 被乗数をシフトしながら加算していく
14 LOOP     SRL    GR2,1   ; 最下位ビットが
15          JOV    ONE     ; 1なら加算
16          JUMP   ZERO    ; 0なら加算しない
17 ONE      ADDL   GR3,GR1 ;
18 ZERO     SLL    GR1,1   ; 被乗数をシフト
19          AND    GR2,GR2 ; 乗数に1のビットが
20          JNZ    LOOP    ; あれば続行
21 ; レジスタを復元
22          POP    GR2
23          POP    GR1
24          RET
25          END