[解決済み] この状況でのlwとbneは何を意味するのか?
2022-03-04 22:40:24
質問
私はプログラミングの初心者なのですが、この問題でlw (both times)とbneは具体的に何をしているのでしょうか?英語に翻訳したため、質問に間違いがあったらすみません。
ここからが問題です。
データメモリの一部には、以下の値が含まれています。
アドレス値
100-1
104-2
108-4
112-8
116-16
以下のコードが与えられたとき、このコードを実行した後のレジスタ r1 の値はどうなりますか?
addi r2,r0,104
lw r1,-4(r2)
addi r3,r0,116
label: addi r2,r2,4
lw r4,-4(r2)
add r4,r4,r4
add r1,r4,r1
bne r2,r3,label
解決方法は?
マイケルが言ったように、命令の内容を読み、各行の後にコメントを付けると、コードを理解するのに役立ちます。
addi r2,r0,104 ;r2 = 0d104
lw r1,-4(r2) ;r1 = (0d100)
addi r3,r0,116 ;r3 = 0d116
label:addi r2,r2,4 ;r2 += 4
lw r4,-4(r2) ;r4 = (r2-4)
add r4,r4,r4 ;r4 *= 2
add r1,r4,r1 ;r1 += r4
bne r2,r3,label ;if(r2 ≠ r3), branch to label
nop
LW というのは ロードワード . 指定されたアドレスからレジスタにワードをロードします。
ビーエヌイー というのは 非等価で分岐 . これは、その後に続く命令を遅延なく実行し(これがあなたのコードの後にnopを付けた理由です)、パラメータとして提出された2つのレジスタが等しくない場合に指定されたアドレスに分岐します。
つまり、r1が(0d100)の値、つまり1で初期化され、r3が0d116に設定されるわけです。
r2は4インクリメントされ、r4は(0d104)の値に等しく、2倍された後、r1に加算されます。そして、r2 = 0d116になるまでループします。つまり、0d116の値は決して読み込まれないということです。
r1 = 1 + 2×2 + 4×2 + 8×2 = 29
関連
-
[解決済み】なぜMIPS用のsubiオペコードは存在しないのですか?
-
[解決済み】単純なforループのためのMIPSアセンブリ
-
[解決済み】x86アセンブリ。AT&Tの構文で「subl」コマンドはどのように動作するのか
-
[解決済み】MARIEアセンブリ言語で`Skipcond`はどのように動作しますか?
-
[解決済み] ARMのアセンブリ言語でbx lrは何をするのですか?
-
[解決済み] アセンブリ言語 - Moduloはどのように行うのですか?
-
[解決済み] MIPSのコードのこの部分で、oriはどのように使われているのですか?
-
[解決済み] アセンブリ言語で数字をプリントアウトする?
-
[解決済み] アセンブリで文字列の長さを表示する方法
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
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 実装 サイバーパンク風ボタン