X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=as%2FFUNC%2Fmull1.casl;fp=as%2FFUNC%2Fmull1.casl;h=916f386eda39717f82a8170b0c838c9125d43493;hb=fb54b1c9d2fbc3d4a62c6b4d38ff68e9d3b25c26;hp=0000000000000000000000000000000000000000;hpb=b4e48008c95b35c692827326191698c22b06124f;p=YACASL2.git diff --git a/as/FUNC/mull1.casl b/as/FUNC/mull1.casl new file mode 100644 index 0000000..916f386 --- /dev/null +++ b/as/FUNC/mull1.casl @@ -0,0 +1,22 @@ +;GR1の値とGR2の値の積をGR0に格納 +MULL START + RPUSH + XOR GR0,GR0 ; 積 + LAD GR3,1 ; 対象ビット +MLOOP PUSH 0,GR3 ; ループ先頭。GR2の、GR3が示したビットが0の場合、MNEXTへジャンプ + AND GR3,GR2 ; ↓ + POP GR3 ; ↓ + JZE MNEXT ; ↓ + ADDL GR0,GR1 ; GR0 <- GR0 + GR1 + JOV MFIN ; オーバーフローした場合、ループ脱出 +MNEXT SLL GR3,1 ; GR3を1回左シフト + AND GR3,GR3 ; (GR3 = 0)の場合、ループ脱出 + JZE MFIN ; ↓ + CPL GR3,GR2 ; (GR3 > GR2)の場合、ループ脱出 + JPL MFIN ; ↓ + SLL GR1,1 ; GR1を1回左シフト + JOV MFIN ; オーバーフローした場合、ループ脱出 + JUMP MLOOP ; ループ終端 +MFIN RPOP + RET + END