[解決済み] MIPSのネストされたForループと配列の使用
質問
これは宿題です。私は自分ですべてのプログラムを書き、デバッガで実行し、すべてが私の意図したとおりに実行されましたが、この行を除いて。
sw $t1, counter($a3)
課題は、このCコードの断片をMIPSに変換することです。
for(i = 0; i < a; i++) {
for(j = 0; j < b; j++) {
C[2 * i] = i – j; } }
私のプログラムでは、$a3以外のすべてのレジスタは、値を変更する必要があります - それは決して変更されません。
変更点 配列の宣言とレジスタによるポインティングが必要で、ラベルをオフセットに使用することはできません。
EDIT: これが完成した、動作するコードです。
解決方法は?
コメントから回答を再確認
で定義された配列のアドレスがロードされるはずです。
.data
セクションで定義されています。
あなたのコードの大きな問題のひとつは、ループの組み立て方です。一番良い方法は、ループを段階的に、一度に1つのループに翻訳することです。また、次のことを忘れないでください。
for( i = 0; i < a; i++ )
{
loop_content;
}
と同等です。
i = 0;
while( i < a )
{
loop_content;
i++;
}
これはアセンブリで翻訳するのが簡単です。条件は否定されるだけで、quot;exit" が必要で、quot;continue" のような条件は必要ないのです。
while
ループを使用します。あなたのコードは、より明確で理解しやすくなるでしょう(そして、エラーの可能性も低くなるでしょう)。
あなたの "out of range" エラーはここから来ています。
sw $t1, counter($a3)
. ここで
counter
はラベルであり、したがってアドレスである。したがって
counter($a3)
は "$a3 (=0x10010008) + カウンタのアドレス (=0x100100f8)" となり、0x20020100 となりますが、これは明らかにあなたの望むものではありません(そして無意味です)。
あ、あと
sw $r, offset($a)
MIPSの命令です。
offset
は16ビットのCONSTANTでなければなりません。ここでは32ビットのアドレスを使用していますが、これはアセンブラが親切に変換してくれるからです。
sw $t1, counter($a3)
を
$x = $a3 + counter; sw $t1, 0($x)
が表示されることがあるのはそのためです。
sw
をオフセットとして0とする。
関連
-
_CRT_SECURE_NO_WARNINGS エラーメッセージ、解決方法
-
C++の配列コピー
-
C - 添え字の値が配列でもポインタでもベクトルでもないエラー
-
[解決済み] PTHREAD_MUTEX_INITIALIZER vs pthread_mutex_init ( &mutex, param )
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] Javaで配列を宣言し、初期化する方法は?
-
[解決済み] 配列の反復処理に "for...in "を使用するのは、なぜ良くないのでしょうか?
-
[解決済み] "お知らせ 未定義変数"、"Notice: Notice: 未定義のインデックス", "Notice:未定義のインデックス", "Notice."。PHPを使用した「未定義のオフセット
-
[解決済み] JavaScriptの配列宣言で「Array()」と「[]」はどう違うのですか?
-
[解決済み] なぜ16進数には0xがつくのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
構造体の配列--[エラー] '['トークンの前に一次式があることが予想される
-
[C] レポートエラー 代入の左オペランドとしてlvalueが必要
-
Cエラー [エラー] 代入_Ashesの左オペランドにlvalueが必要です-プログラマーズ・シークレット
-
警告:代入がキャストなしで整数からポインタを作成する場合の修正方法に関する警告
-
[解決済み] 初期化でポインタ対象の型から修飾語を捨てる
-
[解決済み] Xcode - 警告。C99 では関数の暗黙の宣言は無効です。
-
[解決済み] C言語でchar配列をコピーする方法は?
-
[解決済み] char *とchar[]の違い [重複]
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] アセンブリがCより速いのはどんなとき?[クローズド]