X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=as%2Fcasl2lib%2Frev.casl;h=397c5c4bab2cd2968b772339c84c074aba4484ba;hp=86743816878108adc21edd4dbfb4bad9e592b4e8;hb=bf31ea99380e3ee2198f61f6510ebe6e4a3961f5;hpb=58ee37be62a5e359d0f6eb603cc86b5692f74b90 diff --git a/as/casl2lib/rev.casl b/as/casl2lib/rev.casl index 8674381..397c5c4 100644 --- a/as/casl2lib/rev.casl +++ b/as/casl2lib/rev.casl @@ -1,13 +1,15 @@ -;; アドレスがGR1、長さがGR2の文字列を逆順に並べ替える -;; 例: 12345 -> 54321、54321- -> -12345 +;;; メモリー上にある指定されたアドレス、長さの文字列を逆順に並べ替える +;;; 例: 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の値をコピー + LD GR4,GR1 ; GR4 <- GR1 ADDL GR4,GR3 ; GR4 <- GR4 + GR3 - LD GR5,0,GR4 ; GR5にアドレスGR4の値を格納 + LD GR5,0,GR4 ; GR5 <- GR4アドレスの値 PUSH 0,GR5 ; GR5をプッシュ LAD GR3,1,GR3 ; GR3 <- GR3 + 1 JUMP PU ; ループ終端 @@ -17,7 +19,7 @@ PO CPL GR3,GR2 ; ループ先頭。(GR3 = GR2)の場合、ル POP GR5 ; GR5にポップ LD GR4,GR1 ; GR4にGR1の値をコピー ADDL GR4,GR3 ; GR4 <- GR4 + GR3 - ST GR5,0,GR4 ; アドレスGR4にGR5の値を格納 + ST GR5,0,GR4 ; GR4のアドレス <- GR5の値 LAD GR3,1,GR3 ; GR3 <- GR3 + 1 JUMP PO ; ループ終端 FIN RPOP