X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=as%2FFUNC%2Fmula0.casl;fp=as%2FFUNC%2Fmula0.casl;h=0000000000000000000000000000000000000000;hb=58ee37be62a5e359d0f6eb603cc86b5692f74b90;hp=e21184cce0569d589588d4e866c1737c337491bc;hpb=85744703060a90c21ee325d3a692f80233bc281f;p=YACASL2.git diff --git a/as/FUNC/mula0.casl b/as/FUNC/mula0.casl deleted file mode 100644 index e21184c..0000000 --- a/as/FUNC/mula0.casl +++ /dev/null @@ -1,53 +0,0 @@ -;GR1の値とGR2の値の積をGR0に格納 -MULA START - RPUSH - LAD GR3,0 ; インデックス - LAD GR4,0 ; マイナスフラグ -CHK1 CALL CHKVAL ; (GR1 < 0)の場合は正負を反転させ、GR0 <- 1 - JOV MFIN - LD GR4,GR0 ; マイナスフラグをオン -CHK2 PUSH 0,GR1 ; GR1を退避 - LD GR1,GR2 ; GR2をGR1へロード - CALL CHKVAL ; (GR1 < 0)の場合は正負を反転させ、GR0 <- 1 - JOV C2OV - LD GR2,GR1 ; GR1をGR2へロード - XOR GR4,GR0 ; マイナスフラグを反転 - POP GR1 ; GR1を復元 - LAD GR0,0 ; 積 - JUMP MLOOP -C2OV POP GR1 ; - JUMP MFIN -MLOOP CPA GR2,GR3 ; ループ先頭。(GR2 = GR3)の場合、ループ脱出 - JZE MMIN ; ↓ - ADDA GR0,GR1 ; GR0 <- GR0 + GR1 - JOV MFIN ; オーバーフローした場合、ループ脱出 - LAD GR3,1,GR3 ; GR3 <- GR3 + 1 - JUMP MLOOP ; ループ終端 -MMIN AND GR4,GR4 ; マイナスフラグがオフの場合、MFINへジャンプ - JZE MFIN ; ↓ - PUSH 0,GR1 ; GR1を退避 - LD GR1,GR0 ; GR1にGR0をロード - CALL MABS ; GR1を絶対値に変換 - JOV MMF ; オーバーフロー(GR1 = -32768)の場合、MMFへジャンプ - LD GR0,GR1 ; GR0にGR1をロード -MMF POP GR1 ; GR1を復元 -MFIN RPOP - RET - END -;;; GR1が0未満の場合は、絶対値に変換し、GR0に1を設定 -CHKVAL START - LAD GR0,0 - AND GR1,GR1 ; (GR1 >= 0)の場合は、CFINへジャンプ - JPL CFIN ; ↓ - JZE CFIN ; ↓ - LAD GR0,1 ; GR0に1をロード - CALL MABS ; GR1を絶対値に変換 -CFIN RET - END -;;; GR1の値の正負を反転させる。 -;;; 例: -10 -> 10、10 -> -10 -MABS START - XOR GR1,=#FFFF ; GR1のビット値を反転 - ADDA GR1,=1 ; GR1 <- GR1 + 1 - RET - END