1 ;;; 0〜65535の範囲にある正数の割算を行う 2 ;;; 入力 GR1:被除数 GR2:除数 3 ;;; 出力 GR0:商 GR3:剰余 4 ;;; GR2が0の場合は、GR0、GR3とも0になり、オーバーフロー 5 DIVL0 START 6 PUSH 0,GR1 7 AND GR2,GR2 ; (GR2 = 0)の場合、DIVZEROへジャンプ 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