2012-04-29 12 views
0

私はユーザーから(syscall 5を使用して)整数を入力するプログラムを持っています。ユーザーが特殊文字を入力すると! @#$%^ _ - ?)(代わりに私はそれをクラッシュするのではなく、エラーメッセージを表示するようにプログラムを修正することができますどのようにそれがクラッシュした整数のMipsアセンブリ言語エラーチェック

これは私が

la $a0, prompt   # prompt the message ask for the answer n 
li $v0, 4 
syscall 

li $v0, 5   # input the answer 
syscall 

add $t1, $zero, $v0 

       # store the answer in $t1 

blt $t1, $s0, negative  # check for number entered < $s0 
bgt $t1, $s1, exceed  # check for > $s1 number 

la $a0, blank   # blank line 
li $v0, 4 
syscall 

を書かれているコードですサンプル出力:。。。

This is a number guessing game between 0- 100. Let's begin. 
Chances remains: 6 
Enter your guess: 56 

The secret number is higher than : 56 
Chances remains: 5 
Enter your guess: 67 

The secret number is higher than : 67 
Chances remains: 4 
Enter your guess: 75 

The secret number is lower than : 75 
Chances remains: 3 
Enter your guess: 74 

The secret number is lower than : 74 
Chances remains: 2 
Enter your guess: 72 

The secret number is lower than : 72 
Chances remains: 1 
Enter your guess: 70 

The secret number is lower than : 70 
Chances remains: 0 
Sorry...You lost. 
The secret number is: 69 
Do you want to play again? 
1.Yes 
2.No 
Choice: 2 
Your average guess: 3 
-- program is finished running -- 
+0

おそらく、何をしようとしているかについては、より良い方法があります。明確にすることはできますか? – blackcompe

+0

上記のコードは実際には数字推測ゲームの一部ですが、プログラムは(システムコール42を使用して)乱数を選択し、ユーザーは推測を入力します。ユーザーは正解を推測する機会が6回あります。 –

+0

サンプル出力: –

答えて

0

あなたがクラッシュからそれを止めることはできないことは、常に入力から整数を解析しようとしますが、エラーメッセージを表示し、例外ハンドラを使用して回復することができます

MARS exception handling

更新:

上記のコードは、実際にゲームを推測数、(システムコール42を使用して)乱数を選択し、ユーザが自分 推測に入る プログラムの一部です。ユーザーは正解を推測する機会が6回あります。

ハンドラを書くことへの代替はread_charまたはread_stringと抽出を自分で実行してバッファにユーザーの入力を読むことです。 read_charを使用する場合は、改行まで文字を受け入れる必要があります。

バッファを反復処理するときは、各文字の値が48から57の間であることを確認してください(ASCIIチャート参照)。値が範囲外の場合は、エラーを表示します。それ以外の場合は、48からその値を減算して数字を取得し、数字を10の位置に掛けて累積合計に加算します。私は10の場所を計算するのが簡単であるように、バッファを逆方向に反復することを推奨します。

アルゴリズムの疑似コードはCasting in MIPSトピックにあります。

+0

はい、例外ハンドラのコード方法はわかりません。私のテキストブックはその部分をうまくカバーしていません。私はそれをどうやって行うかについての簡単なアイデアを与えることができ、例外についてのドキュメンテーションを持ついくつかのウェブサイトに私を紹介することができれば、それを感謝します。 –

+0

@DaffyDaffy:私の答えにリンクを見ましたか? – blackcompe

+0

申し訳ありませんが、完全にそれを見て、ありがとう、それをチェックアウト! –