hra1129 / msx_basic_compiler

MSX-BASICコンパイラ
MIT License
22 stars 2 forks source link

特定条件において、FOR文のループ処理が正しく行われない #6

Closed NasubiKT closed 7 months ago

NasubiKT commented 7 months ago

下記条件をすべて満たすとき、FOR文のループ処理が正しく行われません。 (1) FOR文の変数が整数型である (2) FOR文のSTEPが-1である (3) FOR文の終了条件が0以下である

サンプルコード

10 SCREEN1,0,0:COLOR15,4,7:WIDTH32
20 FOR I%=15 TO 0 STEP -1:PRINT "I=";I%:NEXT I%

終了条件が0の場合、変数がマイナス値に突入し、ループが終了しません。 終了条件が-1の場合、ループ1回で終了します。 終了条件が1の場合、正常にループ処理が行われます。

hra1129 commented 7 months ago

終了判定処理に RST 20h (符号無し HL,DE比較)使ってました。SBC HL,DE に差し換えて、Sフラグ見るようにして対応しました。

NasubiKT commented 7 months ago

サンプルコードを実行してみましたところ、ループが1回で終了しました。 画面上にはI= 0のみ表示されました。

hra1129 commented 7 months ago

失礼しました。 今度こそなおりました。 下記のコードで確認しています。

110 SCREEN1,0,0:COLOR15,4,7:WIDTH32 120 PRINT "FOR I=15 TO 0 STEP -1" 130 FOR I%=15 TO 0 STEP -1:PRINT "I=";I%:NEXT I% 140 I$=INPUT$(1) 150 PRINT "FOR I=15 TO -1 STEP -1" 160 FOR I%=15 TO -1 STEP -1:PRINT "I=";I%:NEXT I% 170 I$=INPUT$(1) 180 PRINT "FOR I=15 TO 1 STEP -1" 190 FOR I%=15 TO 1 STEP -1:PRINT "I=";I%:NEXT I% 200 I$=INPUT$(1) 210 PRINT "FOR I=15 TO -2 STEP -1" 220 FOR I%=15 TO -2 STEP -1:PRINT "I=";I%:NEXT I% 230 I$=INPUT$(1) 240 PRINT "FOR I=15 TO 2 STEP -1" 250 FOR I%=15 TO 2 STEP -1:PRINT "I=";I%:NEXT I% 260 I$=INPUT$(1) 270 PRINT "FOR I=0 TO 15 STEP 1" 280 FOR I%=0 TO 15 STEP 1:PRINT "I=";I%:NEXT I% 290 I$=INPUT$(1) 300 PRINT "FOR I=-1 TO 15 STEP 1" 310 FOR I%=-1 TO 15 STEP 1:PRINT "I=";I%:NEXT I% 320 I$=INPUT$(1) 330 PRINT "FOR I=1 TO 15 STEP 1" 340 FOR I%=1 TO 15 STEP 1:PRINT "I=";I%:NEXT I% 350 I$=INPUT$(1) 360 PRINT "FOR I=-2 TO 15 STEP 1" 370 FOR I%=-2 TO 15 STEP 1:PRINT "I=";I%:NEXT I% 380 I$=INPUT$(1) 390 PRINT "FOR I=2 TO 15 STEP 1" 400 FOR I%=2 TO 15 STEP 1:PRINT "I=";I%:NEXT I%

NasubiKT commented 7 months ago

ありがとうございます。 動作を確認できました。 このISSUEはCLOSEいたします。