;; アドレスがGR1、長さがGR2の文字列を逆順に並べ替える
-;; 例: 12345 => 54321、54321- => -12345
+;; 例: 12345 -> 54321、54321- -> -12345
REV START
RPUSH
LAD GR3,0 ; GR3の初期化
-RPU CPL GR3,GR2 ; ループ開始。(GR3 = GR2)の場合、ループ脱出
- JZE RNEXT ; ↓
+PU CPL GR3,GR2 ; ループ先頭。(GR3 = GR2)の場合、ループ脱出
+ JZE NEXT ; ↓
LD GR4,GR1 ; GR4にGR1の値をコピー
- ADDL GR4,GR3 ; GR4 <= GR4 + GR3
+ ADDL GR4,GR3 ; GR4 <- GR4 + GR3
LD GR5,0,GR4 ; GR5にアドレスGR4の値を格納
PUSH 0,GR5 ; GR5をプッシュ
- LAD GR3,1,GR3 ; GR3 <= GR3 + 1
- JUMP RPU ; ループ終了
-RNEXT LAD GR3,0 ; GR3の初期化
-RPO CPL GR3,GR2 ; ループ開始。(GR3 = GR2)の場合、ループ脱出
- JZE RFIN ; ↓
+ 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
+ ADDL GR4,GR3 ; GR4 <- GR4 + GR3
ST GR5,0,GR4 ; アドレスGR4にGR5の値を格納
- LAD GR3,1,GR3 ; GR3 <= GR3 + 1
- JUMP RPO ; ループ終了
-RFIN RPOP
+ LAD GR3,1,GR3 ; GR3 <- GR3 + 1
+ JUMP PO ; ループ終端
+FIN RPOP
RET
END