CASLファイルのフォルダを変更
[YACASL2.git] / as / casl2lib / rev.casl
diff --git a/as/casl2lib/rev.casl b/as/casl2lib/rev.casl
new file mode 100644 (file)
index 0000000..8674381
--- /dev/null
@@ -0,0 +1,25 @@
+;; アドレスがGR1、長さがGR2の文字列を逆順に並べ替える
+;; 例: 12345 -> 54321、54321- -> -12345
+REV     START
+        RPUSH
+        LAD     GR3,0           ; GR3の初期化
+PU      CPL     GR3,GR2         ; ループ先頭。(GR3 = GR2)の場合、ループ脱出
+        JZE     NEXT            ; ↓
+        LD      GR4,GR1         ; GR4にGR1の値をコピー
+        ADDL    GR4,GR3         ; GR4 <- GR4 + GR3
+        LD      GR5,0,GR4       ; GR5にアドレスGR4の値を格納
+        PUSH    0,GR5           ; GR5をプッシュ
+        LAD     GR3,1,GR3       ; GR3 <- GR3 + 1
+        JUMP    PU              ; ループ終端
+NEXT    LAD     GR3,0           ; GR3の初期化
+PO      CPL     GR3,GR2         ; ループ先頭。(GR3 = GR2)の場合、ループ脱出
+        JZE     FIN             ; ↓
+        POP     GR5             ; GR5にポップ
+        LD      GR4,GR1         ; GR4にGR1の値をコピー
+        ADDL    GR4,GR3         ; GR4 <- GR4 + GR3
+        ST      GR5,0,GR4       ; アドレスGR4にGR5の値を格納
+        LAD     GR3,1,GR3       ; GR3 <- GR3 + 1
+        JUMP    PO              ; ループ終端
+FIN     RPOP
+        RET
+        END