問題タブ [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.
string - 文字列内のスペースの削除、MIPS アセンブリ
書こうとしているプログラムに小さな問題があります。基本的に、ユーザーに入力を求めています。次に、文字列内のスペースの数を数え、その数を表示します。また、スペースを削除して元の文字列を出力する必要があります。
私が抱えているバグは、スペースなしで文字列に文字を追加するときに、最初の文字しか追加されないことです。$t2 は、追加する文字を保持しているレジスタです。実行時にレジスタをチェックして、値が変化していることを確認しました。他にどこを見るべきかわかりません。
macos - OS Xにspimをインストールする際の問題
OS X ターミナルで spim を実行しようとしています。QTSpim を使用できますが、spimターミナルのコマンドはまだ存在しません。ターミナルに関しては、私は少し初心者なので(Windowsから切り替えたばかりです)、おそらくこれは明らかです。
まず、spim フォルダーに移動して、make.
戻ってインストールガイドをもう一度読んだところ、試してみるように言われましたmake install:
次に、インストールガイドから別のことを試しましたが、
何が問題で、どうすれば修正できますか?
mips - 4を超える複数のmips引数を使用する
スタックにプッシュすることで、4以外の追加の引数を使用するように関数をプログラムしようとしています(私のバージョンのmipsは$ a0〜 $ a3しかサポートしていないため)が、私のコードは正しくありません。これがメインの私のコードです(スニペット):
これは一時的な値を40に設定し、スタックにスペースを与えて保存します。その後、私の関数が呼び出されます。これが機能するかどうかを確認するためのテストとして、これらの一時引数$ a0〜 $ a3を対応する保存済みレジスタに移動するときの関数内で、次のコードがあります。
...しかし、それは0を出力するだけで、40は出力しないので、何か間違ったことをしています。どんな助けでも大歓迎です(そして賛成)
python - 別のコマンド ライン インタープリターを開いてコマンドを入力する
「spim」エミュレーターを使用して、mips アーキテクチャをエミュレートします。それが機能する方法は、最初に「filename.asm」ファイルが必要です。次に、bash に「spim」と入力して、spim のコマンド ライン インタープリターを開きます。次に、ファイルを読み込んで実行するなどの spim コマンドを使用できます。等..
スピムコマンドラインインタープリターを開き、スピムコマンドの入力を開始するpythonスクリプトを作成しようとしています。これは可能ですか?
ありがとう。
assembly - MIPSアセンブリ-16進数への命令文字列
私はAssemblyで、次のような命令の文字列を必要とするものに取り組んでいます。
命令を16進数で出力します。
文字列を1つずつスキャンし、addが最初に認識されます。Addのオペコードは001000(6ビット)です
t1がスキャンされ、データセクションと比較されます。値は5ビット01001で、t0は01000で、t1は01001です。これらはすべて順番にスキャンされるため、優先順位はそれほど重要ではありません。私が言うことができるように。
それ以来、私はこれらをなんとかしてまとめてから、2進数から16進数に変換する必要があることを知っています。私の問題は、これらのバイナリ値が読み取られるときに、これらのバイナリ値をどのように格納するのかわからないことです。それらをデータセクションに保存するかどうか。ビットサイズが奇数であるために正しくないように思われるか、またはもっと簡単な方法があるかどうか。
正直なところ、私はビットシフトについてあまり知らないので、答えはそこにあるかもしれません。
これが私のコードです。それは非常に仕掛品です
spim - spim で 2 つの float レジスタを乗算する
円の円周の長さを計算し、ユーザーから半径の値を読み取る小さなプログラムをspimで書きたい...そしてここにコードがあります
s0 は、.data セクションの user p float 変数から入力された radius の値です。
プログラムを実行した後、レジスタ f2、f6、f8 にこれらの値があります (s0=3 の場合):
その結果は本当ですか?それが本当なら、なぜ f8 10 の値が 10.2 ではないのですか?
assembly - オフセットの計算
宿題から質問があります。
でBNE指示0x88888888があり、合法的なジャンプ範囲を教えておく必要があります。
私の理論は、オフセットが私に行くことができることを教えてくれるということです:
- 0x8888888から-4*2 15
- 0x88888888 + 4 *(2 15 -1)へ
なぜ、どのように機能するのか本当にわかりません。誰か説明してもらえますか?
mips - MIPS la キーワード
変数 var がアドレス 0x00001000 に格納されていて、その値が 10 であるとします。
la $t2, var を実行した場合
$t2 には、var のアドレスまたは var の値が含まれますか。la はロードアドレスの略であることを考えると、私は本当にアドレスを言いたいのですが、私が見たどこでも例はその明示的なつながりを作りません.
また、これはネイティブの命令で lui ori に分解されることは知っていますが、正確にはどのように見えるでしょうか?
assembly - アセンブリでの 2D 配列との闘い
MIPSで以下を実装しようとしています
X は倍精度浮動小数点数の 2 次元配列 (行列) で、Y は 32 ビット整数の 2 次元配列です。次のコードを書き込もうとしています
MIPS でこれらの配列を宣言する方法がわかりません。
.dataこれまでのところ、メインプログラムのいくつかを作成しましたが、セクションでそれらを実装する方法がわかりません
assembly - QtSpimでlwが「フィールドに対して即時値が大きすぎます:」を返すのはなぜですか?
64 ビット Windows 7 で QtSpim 9.1.7 を実行しています。シミュレーター/設定/ MIPSの下で、すべてのオプションにチェックを入れています (「ベア マシン」、「疑似命令を受け入れる」、「遅延ブランチを有効にする」、「遅延ロードを有効にする」、「マッピングされた IO を有効にする」、「ロード例外ハンドラ」)。
次のようにハードコードされた値を保存すると、基本的なコードを実行して QtSpim に値を追加できoriますori $t0,$0,4。今、メモリからデータを読み込んで保存したいのですが、うまくいきlwません。
上記のファイルを再初期化してロードすると、次のエラー メッセージが表示されます。
次にコードをステップ実行しようとすると、[00400024] 行まで到達します。その行をまたぐと、次のエラー メッセージが表示されます。
参考までに、私のコードは次のように解析されます。
私が最初に思いつくのは、それ0($0)は確かに の住所ではないということですnum1。私のデータ宣言は間違っていますか? もしそうなら、私は何を間違えましたか?
関連しているかどうかはわかりませんが、次のコマンドlaとliコマンドの構文エラーが発生しました(の代替を見つけようとしていたときlw):
la $a0,num1li $t0,4