comet2コマンド実行時のリセット位置を変更
[YACASL2.git] / as / FUNC / divl0.casl
1 ;;; 0〜65535の範囲にある正数の割算を行う
2 ;;; 入力 GR1:被除数 GR2:除数
3 ;;; 出力 GR0:商 GR3:剰余
4 ;;; GR2が0の場合は、GR0、GR3とも0になり、オーバーフロー
5 DIVL    START
6         PUSH    0,GR1
7         AND     GR2,GR2         ; (GR2 = 0)の場合、DYZへジャンプ
8         JZE     DIVZERO         ; ↓
9         LAD     GR0,0           ; GR0を初期化
10         LD      GR3,GR1         ; GR3 <- GR1
11 LOOP    CPL     GR3,GR2         ; ループ先頭。(GR3 < GR2)の場合、終了
12         JMI     FIN             ; ↓
13         SUBL    GR3,GR2         ; GR3 <- GR3 - GR2
14         ADDL    GR0,ONE         ; ↓
15         JUMP    LOOP            ; ループ終端
16 DIVZERO LAD     GR3,#8000       ; 強制的にオーバーフローを発生させ、GR3 <- 0
17         SLL     GR3,1           ; ↓
18         JUMP    FIN             ; FIN へジャンプ
19 FIN     POP     GR1
20         RET
21 ONE     DC      1
22         END