X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=as%2Fmisc%2Fmull0.casl;h=1760859381dc0d45620b8391bf199a1f3b9d9560;hb=86e559d164166966a797a1e5855871d48e087ddd;hp=20168d6ea635f7c2b15855935cb4a5ae7aba4fc9;hpb=24f3ed4394bc3d9bfe2f387f91e0b7f41ec8555e;p=YACASL2.git diff --git a/as/misc/mull0.casl b/as/misc/mull0.casl index 20168d6..1760859 100644 --- a/as/misc/mull0.casl +++ b/as/misc/mull0.casl @@ -1,14 +1,17 @@ -;GR1の値とGR2の値の積をGR0に格納 +;;; 0〜65535の範囲にある正数のかけ算(筆算方式)を行う +;;; 入力 GR1:被乗数 GR2:乗数 +;;; 出力 GR3:積 +;;; 積が65535より大きい場合は、オーバーフロー MULL START - RPUSH - LAD GR3,0 ; インデックス - LAD GR0,0 ; 積 -MLOOP CPA GR2,GR3 ; ループ先頭。(GR2 = GR3)の場合、ループ脱出 - JZE MFIN ; ↓ - ADDL GR0,GR1 ; GR0 <- GR0 + GR1 - JOV MFIN ; オーバーフローした場合、ループ脱出 - LAD GR3,1,GR3 ; GR3 <- GR3 + 1 - JUMP MLOOP ; ループ終端 -MFIN RPOP + PUSH 0,GR4 + XOR GR3,GR3 ; 積 + XOR GR4,GR4 ; インデックス +LOOP CPL GR2,GR4 ; ループ先頭。GR2 = GR4 の場合、FINへジャンプ + JZE FIN ; ↓ + ADDL GR3,GR1 ; GR3 <- GR3 + GR1 + JOV FIN ; オーバーフローした場合、FINへジャンプ + LAD GR4,1,GR4 ; GR4 <- GR4 + 1 + JUMP LOOP ; ループ終端 +FIN POP GR4 RET END