問題タブ [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.
assembly - MIPS の HI および LO レジスタに値を格納する
私は MIPS で特定のコードを書いていますが、結果を一時的に特殊レジスター (どちらも 4 バイト幅) に格納する必要があるところまで来ましHI
たLO
。これらの指示は自由に使用できます。
したがって、divu
除算の結果を に格納しLO
、剰余をHI
にmultu
格納し、乗算の結果をLO
(下位 4 バイト) とHI
(上位 4 バイト) に格納します。
HI
後で、登録から結果を取得するLO
には、次のことができます。
計算結果を に保存する方法はすでにわかっていますLO
。
- 除算の結果は LOに
divu
格納されるので、結果を 1 で除算して取得します。
ただし、格納HI
はより複雑です。multu
1 つの方法は、値を 32 ビット (4 バイト) シフトする命令を強制することです。
しかし、その結果、 の値はHI
本来あるべき場所の 1 ビット右になります (したがって、値が の場合は0100 1000
がHI
含まれます0010 0100
)。
HI
何かをレジスタに保存する方法を知っている人はいますか?
c - C から MIPS への変換
この c コードを MIPS に変換し、SPIM で実行しようとしています。
これまでのところ、これは私が持っているものです。
SPIM で実行すると、次のエラーが発生します。
何らかの方向性がいいでしょう。ありがとう
c - MIPS(またはSPIM):浮動小数点数のロード
ここでいくつかのMIPSを学習しようとしている間、私は小さなミニコンパイラに取り組んでいます。これが私の問題です:
MIPSには、次のように機能する命令li(即時ロード)があります。
これにより、100がレジスタ5にロードされます。
しかし、私は今フロートをレジスタにロードする必要があり、それを行う方法を見つけるのに苦労しています... li$5,2.5は機能しないためです。
誰かアドバイスはありますか?
私はCで作業していますが、作業しているfloatの整数表現を取得して(つまり、floatバイナリ表現== intsバイナリ表現)、「整数」をレジスタにロードして、次のように処理できると考えていました。それ以降はフロート。
多分手遅れですが、イムは今立ち往生しています。
arrays - 複数のSPIM配列を宣言すると、構文エラーが発生します
以下は、SPIMコードのチャンクの始まりです。
残念ながら、私が宣言する2番目の配列('b')により、SPIMインタープリターが吐き出されます。
同様のコードは、配列が1つしかない場合でも機能します。それを台無しにするのは、2番目のようです。私はそれを躊躇しましたが、それを破るのはそのステートメントについて何であるかを理解することはできません。何かご意見は?洞察をありがとう。
input - 16進文字列を2進数に変換するにはどうすればよいですか?
私の問題は、ユーザーから64ビットキーを取得することです。このために、16進文字(123456789ABCDEF)を含む文字列として16文字を取得する必要があります。ユーザーから文字列を取得し、以下のコードで文字に到達しました。しかし、文字を4ビットのバイナリに変換する方法がわかりません
c++ - ELF ファイル形式
g++ を使用してコンパイルした elf ファイルの 16 進ダンプを、設計したプロセッサ シミュレーションに手動でロードしようとしています。標準の elf ファイルには 30 のセクションがあり、適切なメモリ位置のオフセットを考慮して 30 のセグメントすべてをロードしています。.text
次に、セクションの先頭 (00400130)でプログラム カウンターを開始しますが、プログラムが正しく実行されていないようです。SPIM をゴールド スタンダードとして使用して、プロセッサの設計を比較的徹底的に検証しました。奇妙なことに、アセンブリ ファイルを SPIM にロードし、ソフトウェアによって生成された逆アセンブルさ.text
れ.data
たセクションをプロセッサのメモリにロードすると、プログラムが動作します。これは、私がやりたいこととは異なります。
- C++ プログラムを書く
- mipseb-linux-g++ (クロス コンパイラ) を使用してコンパイルします。
- すべてのセクションを独自のファイルに16進数でダンプします
- ファイルを読み取り、コンテンツをプロセッサの「メモリ」にロードする
- プログラムを実行する
ELF ファイルのどこにプログラム カウンターを最初に配置する必要がありますか? .text
私は今の初めにそれを持っています。また、プログラムが正しく動作するためには、 .text
andを含めるだけでよいのでしょうか? .data
ここで何が間違っていますか?
c++ - C++コードをSPIM用のアセンブリに変換する
コンパイルしたアセンブリファイルをSPIMで動作させるのに多くの問題があります。基本的には、c ++ファイルを作成してから、エラーなしでSPIMで開くことができる.sファイルを生成します。これは、アセンブリがMIPS I命令(一部のMIPS II)を使用してMIPS32ABIにある必要があることを意味します。どうすればよいですか?現在、g ++を使用していますが、SPIMでファイルを実行しようとすると、大きなエラーが発生します。私はMACOSx10.6.3で作業しており、Linuxマシンでリモートでコンパイルしています。これを簡単にするために使用できる特別なコンパイラはありますか?
assembly - MIPS のアルゴリズムの問題
MIPS アセンブリで Project Euler の質問に対する回答を書き直していますが、これで正しい回答を出力できません。私は過去1時間コードを調べましたが、私のアプローチの何が問題なのかわかりません(答えがそれより200,00以上高いクールなときに33165を取得しているため)、問題を理解します構文に対する私の不安定さに違いありません。予約済みレジスタを使用するなど、私がここで行っている愚かなことはありますか?
編集:投稿されてから調整されたコード。修正が提案されましたが、それでも約 100,000 の回答が得られます。:(
assembly - 10進数を2進数に変換し、MIPSで印刷する
割り当て用の簡単なコードスニペットを書いていますが、10進数を2進数、8進数、16進数に変換する必要があります。私はそれを機能させていますが、使用しているアルゴリズムのために、2進数を逆方向に出力していることに後で気付きました。私が使用していた戦略は、一度に1桁ずつ印刷することでした。私はまだ初心者なので、これがより中間的な問題を回避する簡単な方法になると思いました。残念ながら、私はそれをずっと考えていませんでした。
各桁をラベル付きの文字列に格納し、その後各桁を連結してから、文字列を逆方向に読み取る方法はありますか?たぶん、あなたが私に指摘できるかもしれないより良い提案があるかもしれません。
この時点で、コードは一度に1桁の2進数を出力することで機能しますが、必要な順序とは逆であることに注意してください。このプログラムは大きな数(20桁の2進数など)を処理できるはずなので、各桁を独自のレジスタに格納することはできません。皆さんありがとう!
mips - Mips出力システムコール
なぜシステムアウトはスピムで(ヌル)ですか?