2

私はこの割り当てを持っています、そして私はコードの間に立ち往生しています。1年に1日と1か月のユーザー入力を収集するように求められます。たとえば、5月30日で、「1年の日は140日」と同等の値を表示します。

これは、私が理解していない、またはその方法を知らないプログラムの一部にすぎません。私はこの答えをグーグルで検索してきましたが、運がありません。ASCIIに変換する必要があると聞きましたが、int + springを保存または識別し、1月から12月の入力を検証し、2月が28であると仮定して、365日で同等のものを決定する方法がわかりません。

4

1 に答える 1

1

「日と月」を MIPS の年間日数に変換する方法。

(このチュートリアルでは、文字列から int への変換について説明します。)

最初に理解しておくべきことは、入力が文字列であり、int として扱われないことです。そしてストリング。したがって、最初の 2 文字を int に変換する必要があります。残りを文字列として扱います。月の文字列を検証し、プログラムがその時点から実行を継続できるように、元の場所に戻る関数が必要になります。

整数への変換。文字列の例: 1 月 31 日

変数を 1 番目と 2 番目の文字に割り当て、変数を 1 番目と 2 番目の文字に向けます。

次のように、それぞれ $t4 と $t5 を使用します。

lbu $t4,0($a0) # 次の文字を取得 lbu $t5,1($a0) # 2 番目の文字を取得

Ok。これで、変数が指定され、3 と 1 の変数ができました。これから説明する必要があるのは、マシンで文字列がどのように表現されるかを理解して、文字列をどう処理するかを理解することです。

マシンでのデータの 表現例として、1月31日を16進コードで表現すると以下のようになります。このトピックでは、文字がバイナリでどのように表現されるかについては説明しません。このトピックの別のチュートリアルを確認してください。

3  1  space J   a  n   u   a  r   y  00     characters
51 49       74   97  110  117  97  114  121  00 ASCII representation of strings

ASCIIコード表参照

0 で始まり、null である 00 で終わります。

整数の 0 の 16 進コードは 48 です

整数の 1 の 16 進コードは 49 整数の 2 の 16 進コードは 50 整数の 3 の 16 進コードは 51

そして、それが私たちが必要としているものです。

次に、整数に戻すために、48 個の ASCII コード 51 – 48 = 3 および 49 – 48 = 1 を減算する必要があります。

次に、最初の文字を 10 倍し、それを 2 番目の文字の結果に追加します。これにより、変換の結果が得られ、int になります。

3 * 10 + 1 = 31

ユーザーが挿入したのとまったく同じ図であることがわかりますか? しかし、彼/彼女が数値の後に月を追加すると文字列になり、read_int 5 を使用できません。最も一般的な間違いは、入力を文字列ではなく整数と文字列として扱うことです。

このメソッドの表現は、MIPS で以下に示されています

    addi   $t4,-48       # minus first by 48 
mul    $t4,$t4,10    # multiply by 10
addi   $t5,-48       # minus second by 48
add    $t7, $t4, $t5     # sum the two into $t7

これで、プログラムで $t7 を使用して、結果またはブランドを等号で表示することができます。整数になったので機能します。

年を取得する方法は上記のとおりです。プログラムでどのように機能するかを確認するには、3 週間以内に www.computersciencegigs.com の私の Web サイトに表示されます。

残っているのは、残りの月のラベルを作成し、前月の合計を最後の 2 行目に追加することだけです。1 月は 0、2 月は 31、3 月は 59 などとなります。

于 2012-09-30T14:04:31.577 に答える