X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=casl%2Fcasl2lib%2Frev.casl;fp=casl%2Fcasl2lib%2Frev.casl;h=397c5c4bab2cd2968b772339c84c074aba4484ba;hb=9512a8c8cb11ec985f9802307a4bd227917814ec;hp=0000000000000000000000000000000000000000;hpb=e3f04e84859b5d5a0351ae7acaa222056ff04ef7;p=fizzbuzz.git diff --git a/casl/casl2lib/rev.casl b/casl/casl2lib/rev.casl new file mode 100644 index 0000000..397c5c4 --- /dev/null +++ b/casl/casl2lib/rev.casl @@ -0,0 +1,27 @@ +;;; メモリー上にある指定されたアドレス、長さの文字列を逆順に並べ替える +;;; 例: 12345 -> 54321、54321- -> -12345 +;;; 入力 GR1:文字列のアドレス GR2:文字列の長さ +;;; 出力 (同上) +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