X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=as%2FFUNC%2Fdivl0.casl;fp=as%2FFUNC%2Fdivl0.casl;h=28357a9045a812f5f5ef8876e9d88a403ae440e3;hb=fb893cf9b40d141a0d66f131dba3e0fef28549ab;hp=c827b9db19250163a2eecbeadcfc99613a9a0f4d;hpb=3daa13d36f562d9c2ff93b4b68643fc88a446335;p=YACASL2.git diff --git a/as/FUNC/divl0.casl b/as/FUNC/divl0.casl index c827b9d..28357a9 100644 --- a/as/FUNC/divl0.casl +++ b/as/FUNC/divl0.casl @@ -1,20 +1,22 @@ -;;; GR1の値とGR2の値の、商をGR0、剰余をGR3に格納する -;;; 0〜65535の範囲の数値を扱う +;;; 0〜65535の範囲にある正数の割算を行う +;;; 入力 GR1:被除数 GR2:除数 +;;; 出力 GR0:商 GR3:剰余 +;;; GR2が0の場合は、GR0、GR3とも0になり、オーバーフロー DIVL START PUSH 0,GR1 AND GR2,GR2 ; (GR2 = 0)の場合、DYZへジャンプ - JZE DYZ ; ↓ + JZE DIVZERO ; ↓ LAD GR0,0 ; GR0を初期化 LD GR3,GR1 ; GR3 <- GR1 -DLOOP CPL GR3,GR2 ; ループ先頭。(GR3 < GR2)の場合、終了 - JMI DFIN ; ↓ +LOOP CPL GR3,GR2 ; ループ先頭。(GR3 < GR2)の場合、終了 + JMI FIN ; ↓ SUBL GR3,GR2 ; GR3 <- GR3 - GR2 - ADDL GR0,DONE ; ↓ - JUMP DLOOP ; ループ終端 -DYZ LAD GR3,#FFFF ; 強制的にオーバーフローを発生させ、GR3 <- 0 - ADDL GR3,=1 ; ↓ - JUMP DFIN ; DFINへジャンプ -DFIN POP GR1 + ADDL GR0,ONE ; ↓ + JUMP LOOP ; ループ終端 +DIVZERO LAD GR3,#8000 ; 強制的にオーバーフローを発生させ、GR3 <- 0 + SLL GR3,1 ; ↓ + JUMP FIN ; FIN へジャンプ +FIN POP GR1 RET -DONE DC 1 +ONE DC 1 END