問題タブ [mips]
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 アセンブリでアドレスをインクリメントする方法は?
MIPS アセンブリを学習し始めたばかりで、単純なwhile
ループを作成しようとしています。これは、C コードと同等になります。
int A[5];
for(i=0;i<5;i++) A[i]=i;
したがって、ループbeq
を作成するために使用できることwhile
はわかっていますが、次のレジスタに移動するたびにメモリアドレスをインクリメントする方法がわかりません。オペランドが役立つかもしれないと思いますslt
が、わかりません。
math - 試験成績の合否判定を行うMIPSプログラム
15 のテスト スコアのリストを調べる MiPS プログラムを作成しています。そしてターミナルから入力していきます。合格基準は 50 点です。端末への出力には、各カテゴリの得点と、合格者と不合格者の数が含まれます。入力プロンプトと出力ステートメントを使用する必要があります。助けが必要です。どうすればよいかアドバイスが必要です。
私はループを持っています:
gcc - GCC MIPS-32 呼び出し規約 / スタック フレーム定義
MIPS-32 プロセッサ アーキテクチャ用の決定的な標準化されたスタック フレームと C 言語の呼び出し規則 (レジスタの使用法など) はないようです。つまり、独自のスタック フレームと呼び出し規則を定義するのは、完全にアセンブラー/コンパイラー ツール チェーンに任されているようです。私は、GCC コンパイラが MIPS-32 命令セットに使用する規則についての決定的なリファレンスを見つけるのに苦労しました。私は特に、eCos オープン ソース カーネルの組み込み環境で使用されている MIPS-32 コアをターゲットとする Cygwin で GCC クロス コンパイラを使用しています。
この分野での MIPS-32 の GCC に関する決定的なドキュメントへの参照を歓迎します。
mips - Mips syscall + eof = ファイル全体を読み取れませんか?
ループの反復ごとに ~4kb を読み取る mips コードをいくつか書いています。問題は、私が読んでいる mp3 ファイルに 1A の複数のインスタンスが含まれているため、syscall 14 が停止し、ファイルの実際の末尾に到達するまで読み取れなくなることです。これを回避する方法はありますか?また、syscall 13 に追加できるフラグの完全なリストを持っている人はいますか?
ありがとう
hex - MIPSで16進文字を同等の10進文字に変換します
単一のASCII文字を取得し、それをMIPで10進数に変換するにはどうすればよいですか?
ASCIIコードから特定の量を減算して10進表現にするために、いくつかの条件が必要ですか?
list - MIPS: テスト スコアのリストが合格か不合格かを判断する
15 のテスト スコアのリストを調べる MiPS プログラムを作成しています。そして、ターミナルから入力していきます。まあ、合格基準は50点です。ターミナルへの出力には、各カテゴリのスコアと、合格者と不合格者の数が含まれます。入力プロンプトと出力ステートメントを使用して...以下は私が書いたプログラムですが、動作しませんでした....必要があります....間違っているかどうかわかりません..
main: li $t0, 0 #合格点のカウンター la $t1, pass #合格配列のポインター
li $t2, 0 #不合格点のカウンター la $t3, fail #合格配列のポインター li $t4, 0 #全体のカウンター李 $t5, 0 李 $t6, 0
loop: li $v0, 4 #文字列を表示するためのシステムコール la $a0, prompt #文字列を読み込む syscall
else: sw $v0, 0($t3) #単語をフェイル配列に格納 addi $t3, $t3, 4 #t3 = t3 + 4 (フェイル ポインタをインクリメント) addi $t2, $t2, 1 #t1 = t1 + 1 (インクリメント失敗カウンター)
l_end: addi $t4, $t4, 1 #インクリメント 全体カウンタ bltu $t4, 15, loop #if t4 <= 15 ループへ分岐
出力カウント
合格点を出力する
loop_a: bleu $t0, $t5, lp_a_end #if t0 <= t5 lp_a_end syscall に分岐 #単一スコアを出力
lp_a_end:
失敗スコアを出力する
loop_b: bleu $t2, $t5, lp_b_end #if t2 <= t5 lp_a_end syscall に分岐 #単一スコアを出力
lp_b_end:
終わり
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
何かをレジスタに保存する方法を知っている人はいますか?
assembly - MIPSアセンブリの割り当て-ロードワードの問題
命令を実装するために使用される次のコード
これは、レジスタ$ s2の値の最下位5ビットを使用して、レジスタ$s1を左にシフトする量を指定します。
私はそれらの指示のほとんどが何をしているのか知っています。
しかし、2番目のロードワードが、それ自体が命令であり、ワードではないシフターから何かをロードしている方法がわかりません。
また、バイナリに変換されたときの16進数のマスクの値は、質問にあるように、少なくとも5つの重要な場所にゼロがないため、少なくとも5つのsigの場所をどのようにマスクするかわかりません。
mips - MIPS 逆コンパイラ
MIPS マシン コードを C コードに変換できる逆コンパイラを探しています。助言がありますか?