-1

このプログラムは、答えの数値を足したり、引いたり、否定したりする基本的な小さな電卓です。加算、減算、および終了オプションは正常に機能しますが、NI を使用するたびに、その後に何も入力できません。私はelseif2に何か問題があると思っていますが、それをいじった後、頭を包むことができません。問題全体を間違って設定したのでしょうか、それともそのまま修正可能ですか?

Pep/8 コードへのリンク

4

1 に答える 1

1

この問題は、pep8 レジスタとほとんどの操作が 16 ビットであるにもかかわらずLDBYTE、下位 8 ビットのみを変更するという事実によって引き起こされます。これは、Aget の上位 8 ビットがゼロ以外に設定されている場合、次の入力を下位ビットにロードした後、どの文字比較も一致しないことを意味します。正の値を否定すると、通常の 2 の補数演算に従って最上位ビットが 1 に設定されるため、これがトリガーされます。

解決策は、上位ビットが確実にクリアされるようにすることです。たとえば、Aの前にゼロにするか、後でLDBYTEを使用してマスクします。AND

pep8 シミュレーターのトレース機能を使用していれば、この問題を自分で確認できたはずです。

0072  LDBYTEA  0003,d    D10003   FF51   00CE    FBCF    1 0 0 0   5100

FF51アキュムレータがありQ、下位 8 ビットに入力された IのASCII コードを保持しFFますが、前の否定からの上位 8 ビットに格納されます。

また、改行が消費されていない場合に備えて、ユーザー入力の最後に改行も返すことに注意してCHARIください。そのため、そのチェックも追加することをお勧めします。

于 2014-11-01T01:55:54.493 に答える