masterブランチをマージ
[YACASL2.git] / as / casl2lib / rev.casl
1 ;; アドレスがGR1、長さがGR2の文字列を逆順に並べ替える
2 ;; 例: 12345 -> 54321、54321- -> -12345
3 REV     START
4         RPUSH
5         LAD     GR3,0           ; GR3の初期化
6 PU      CPL     GR3,GR2         ; ループ先頭。(GR3 = GR2)の場合、ループ脱出
7         JZE     NEXT            ; ↓
8         LD      GR4,GR1         ; GR4にGR1の値をコピー
9         ADDL    GR4,GR3         ; GR4 <- GR4 + GR3
10         LD      GR5,0,GR4       ; GR5にアドレスGR4の値を格納
11         PUSH    0,GR5           ; GR5をプッシュ
12         LAD     GR3,1,GR3       ; GR3 <- GR3 + 1
13         JUMP    PU              ; ループ終端
14 NEXT    LAD     GR3,0           ; GR3の初期化
15 PO      CPL     GR3,GR2         ; ループ先頭。(GR3 = GR2)の場合、ループ脱出
16         JZE     FIN             ; ↓
17         POP     GR5             ; GR5にポップ
18         LD      GR4,GR1         ; GR4にGR1の値をコピー
19         ADDL    GR4,GR3         ; GR4 <- GR4 + GR3
20         ST      GR5,0,GR4       ; アドレスGR4にGR5の値を格納
21         LAD     GR3,1,GR3       ; GR3 <- GR3 + 1
22         JUMP    PO              ; ループ終端
23 FIN     RPOP
24         RET
25         END