バージョンアップ
[YACASL2.git] / as / misc / mull0.casl
1 ;;; 0〜65535の範囲にある正数のかけ算(筆算方式)を行う
2 ;;; 入力 GR1:被乗数 GR2:乗数
3 ;;; 出力 GR3:積
4 ;;; 積が65535より大きい場合は、オーバーフロー
5 MULL    START
6         PUSH    0,GR4
7         XOR     GR3,GR3         ; 積
8         XOR     GR4,GR4         ; インデックス
9 LOOP    CPL     GR2,GR4         ; ループ先頭。GR2 = GR4 の場合、FINへジャンプ
10         JZE     FIN             ; ↓
11         ADDL    GR3,GR1         ; GR3 <- GR3 + GR1
12         JOV     FIN             ; オーバーフローした場合、FINへジャンプ
13         LAD     GR4,1,GR4       ; GR4 <- GR4 + 1
14         JUMP    LOOP            ; ループ終端
15 FIN     POP     GR4
16         RET
17         END