問題タブ [spim]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
32168 参照

assembly - MIPS の HI および LO レジスタに値を格納する

私は MIPS で特定のコードを書いていますが、結果を一時的に特殊レジスター (どちらも 4 バイト幅) に格納する必要があるところまで来ましHILO。これらの指示は自由に使用できます。

したがって、divu除算の結果を に格納しLO、剰余をHImultu格納し、乗算の結果をLO(下位 4 バイト) とHI(上位 4 バイト) に格納します。

HI後で、登録から結果を取得するLOには、次のことができます。

計算結果を に保存する方法はすでにわかっていますLO

  • 除算の結果は LOにdivu格納されるので、結果を 1 で除算して取得します。

ただし、格納HIはより複雑です。multu1 つの方法は、値を 32 ビット (4 バイト) シフトする命令を強制することです。

しかし、その結果、 の値はHI本来あるべき場所の 1 ビット右になります (したがって、値が の場合は0100 1000HI含まれます0010 0100)。

HI何かをレジスタに保存する方法を知っている人はいますか?

0 投票する
2 に答える
8995 参照

c - C から MIPS への変換

この c コードを MIPS に変換し、SPIM で実行しようとしています。

これまでのところ、これは私が持っているものです。

SPIM で実行すると、次のエラーが発生します。

何らかの方向性がいいでしょう。ありがとう

0 投票する
2 に答える
38706 参照

c - MIPS(またはSPIM):浮動小数点数のロード

ここでいくつかのMIPSを学習しようとしている間、私は小さなミニコンパイラに取り組んでいます。これが私の問題です:

MIPSには、次のように機能する命令li(即時ロード)があります。

これにより、100がレジスタ5にロードされます。

しかし、私は今フロートをレジスタにロードする必要があり、それを行う方法を見つけるのに苦労しています... li$5,2.5は機能しないためです。

誰かアドバイスはありますか?

私はCで作業していますが、作業しているfloatの整数表現を取得して(つまり、floatバイナリ表現== intsバイナリ表現)、「整数」をレジスタにロードして、次のように処理できると考えていました。それ以降はフロート。

多分手遅れですが、イムは今立ち往生しています。

0 投票する
1 に答える
880 参照

arrays - 複数のSPIM配列を宣言すると、構文エラーが発生します

以下は、SPIMコードのチャンクの始まりです。

残念ながら、私が宣言する2番目の配列('b')により、SPIMインタープリターが吐き出されます。

同様のコードは、配列が1つしかない場合でも機能します。それを台無しにするのは、2番目のようです。私はそれを躊躇しましたが、それを破るのはそのステートメントについて何であるかを理解することはできません。何かご意見は?洞察をありがとう。

0 投票する
2 に答える
6138 参照

input - 16進文字列を2進数に変換するにはどうすればよいですか?

私の問題は、ユーザーから64ビットキーを取得することです。このために、16進文字(123456789ABCDEF)を含む文字列として16文字を取得する必要があります。ユーザーから文字列を取得し、以下のコードで文字に到達しました。しかし、文字を4ビットのバイナリに変換する方法がわかりません

0 投票する
3 に答える
6164 参照

c++ - ELF ファイル形式

g++ を使用してコンパイルした elf ファイルの 16 進ダンプを、設計したプロセッサ シミュレーションに手動でロードしようとしています。標準の elf ファイルには 30 のセクションがあり、適切なメモリ位置のオフセットを考慮して 30 のセグメントすべてをロードしています。.text次に、セクションの先頭 (00400130)でプログラム カウンターを開始しますが、プログラムが正しく実行されていないようです。SPIM をゴールド スタンダードとして使用して、プロセッサの設計を比較的徹底的に検証しました。奇妙なことに、アセンブリ ファイルを SPIM にロードし、ソフトウェアによって生成された逆アセンブルさ.text.dataたセクションをプロセッサのメモリにロードすると、プログラムが動作します。これは、私がやりたいこととは異なります。

  • C++ プログラムを書く
  • mipseb-linux-g++ (クロス コンパイラ) を使用してコンパイルします。
  • すべてのセクションを独自のファイルに16進数でダンプします
  • ファイルを読み取り、コンテンツをプロセッサの「メモリ」にロードする
  • プログラムを実行する

ELF ファイルのどこにプログラム カウンターを最初に配置する必要がありますか? .text私は今の初めにそれを持っています。また、プログラムが正しく動作するためには、 .textandを含めるだけでよいのでしょうか? .dataここで何が間違っていますか?

0 投票する
1 に答える
1984 参照

c++ - C++コードをSPIM用のアセンブリに変換する

コンパイルしたアセンブリファイルをSPIMで動作させるのに多くの問題があります。基本的には、c ++ファイルを作成してから、エラーなしでSPIMで開くことができる.sファイルを生成します。これは、アセンブリがMIPS I命令(一部のMIPS II)を使用してMIPS32ABIにある必要があることを意味します。どうすればよいですか?現在、g ++を使用していますが、SPIMでファイルを実行しようとすると、大きなエラーが発生します。私はMACOSx10.6.3で作業しており、Linuxマシンでリモートでコンパイルしています。これを簡単にするために使用できる特別なコンパイラはありますか?

0 投票する
1 に答える
1076 参照

assembly - MIPS のアルゴリズムの問​​題

MIPS アセンブリで Project Euler の質問に対する回答を書き直していますが、これで正しい回答を出力できません。私は過去1時間コードを調べましたが、私のアプローチの何が問題なのかわかりません(答えがそれより200,00以上高いクールなときに33165を取得しているため)、問題を理解します構文に対する私の不安定さに違いありません。予約済みレジスタを使用するなど、私がここで行っている愚かなことはありますか?

編集:投稿されてから調整されたコード。修正が提案されましたが、それでも約 100,000 の回答が得られます。:(

0 投票する
1 に答える
12935 参照

assembly - 10進数を2進数に変換し、MIPSで印刷する

割り当て用の簡単なコードスニペットを書いていますが、10進数を2進数、8進数、16進数に変換する必要があります。私はそれを機能させていますが、使用しているアルゴリズムのために、2進数を逆方向に出力していることに後で気付きました。私が使用していた戦略は、一度に1桁ずつ印刷することでした。私はまだ初心者なので、これがより中間的な問題を回避する簡単な方法になると思いました。残念ながら、私はそれをずっと考えていませんでした。

各桁をラベル付きの文字列に格納し、その後各桁を連結してから、文字列を逆方向に読み取る方法はありますか?たぶん、あなたが私に指摘できるかもしれないより良い提案があるかもしれません。

この時点で、コードは一度に1桁の2進数を出力することで機能しますが、必要な順序とは逆であることに注意してください。このプログラムは大きな数(20桁の2進数など)を処理できるはずなので、各桁を独自のレジスタに格納することはできません。皆さんありがとう!

0 投票する
1 に答える
5102 参照

mips - Mips出力システムコール

なぜシステムアウトはスピムで(ヌル)ですか?