root/as/misc/mull0.casl

/* [<][>][^][v][top][bottom][index][help] */
   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

/* [<][>][^][v][top][bottom][index][help] */