CASL2LIBの作成、修正、整理
[YACASL2.git] / as / casl2lib / src / mull0.casl
diff --git a/as/casl2lib/src/mull0.casl b/as/casl2lib/src/mull0.casl
new file mode 100644 (file)
index 0000000..83cac02
--- /dev/null
@@ -0,0 +1,25 @@
+; 符号なし乗算
+; 入力
+;   GR0 = 被乗数
+;   GR1 = 乗数
+; 出力
+;   GR3 = 結果
+MULL     START
+; レジスタを退避
+         PUSH   0,GR1
+         PUSH   0,GR2
+; 初期化
+         XOR    GR3,GR3 ; GR3 = 積
+; 被乗数をシフトしながら加算していく
+LOOP     SRL    GR2,1   ; 最下位ビットが
+         JOV    ONE     ; 1なら加算
+         JUMP   ZERO    ; 0なら加算しない
+ONE      ADDL   GR3,GR1 ;
+ZERO     SLL    GR1,1   ; 被乗数をシフト
+         AND    GR2,GR2 ; 乗数に1のビットが
+         JNZ    LOOP    ; あれば続行
+; レジスタを復元
+         POP    GR2
+         POP    GR1
+         RET
+         END