[解決済み] MIPs Assemblyでsllなどを使ってビットをずらすのはなぜですか?
2022-01-29 10:55:39
質問内容
を読んで、sllというコマンドが何をやっているのか、なんとなく理解できました。 これ というのは、すべてのビットを1ずつ左にシフトしているだけだからです。
授業で出た課題で、その例があるのですが・・・。 s6と$s7は配列のベースアドレスで、$s1/$s2は単なる変数です。
sll $t0, $s0, 2
add $t0, $s6, $t0
sll $t1, $s1, 2
add $t1, $s7, $t1
...
なぜビットをずらすのか?簡単に言うと何をしているのでしょうか?最初に考えたのは、配列内の変数のインデックス付けと関係があるのでは...ということです。
どのように解決するのですか?
<ブロッククオートすべてのビットを1ずつ左にシフトしていくだけです。
見せられた例は、1ビットずつシフトするものでした。その
sll
命令は1ビットずつシフトするだけでなく、0〜31の範囲でシフト量を指定することができます(0ずつのシフトは無駄と思われるかもしれませんが
SLL $zero, $zero, 0
をエンコードするために使用されます。
NOP
MIPSの場合)。
論理的な左シフト
によって
N
ビットを乗算する高速な方法として使用できます。
2^N
(2のN乗)である。そのため、命令
sll $t0, $s0, 2
を乗算しています。
$s0
を 4 (2^2) で割って書き戻すと
$t0
. これは,ワード配列にアクセスする際にオフセットをスケーリングする場合などに便利です.
関連
-
[解決済み】MIPSで整数の絶対値?
-
[解決済み] ビットシフト演算子を使って10進数を2進数で表示するMIPS
-
[解決済み] error: invalid effective address エラー:有効なアドレスがありません。
-
[解決済み] cmovlオペコードの中で何と何が比較されるのですか?
-
[解決済み] アセンブリで文字列の長さを表示する方法
-
[解決済み] ループ内で配列の個々の要素にアクセスするにはどうしたらよいですか?
-
[解決済み] ARMv8でリテラル0ではなく、xzrレジスタを使用するのはなぜですか?
-
[解決済み] MIPSプログラムにおける`lw`と`sw`の実際の働きを理解する。
-
[解決済み] MIPSの擬似命令 "move "の "addi "と "add "の違い?
-
[解決済み] Collatz予想の検証を行うC++のコードは、なぜ手書きのアセンブリよりも高速に動作するのでしょうか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】JNZとCMPのアセンブリ命令
-
[解決済み】MIPSで整数の絶対値?
-
[解決済み] cmplとcmpの違いについて
-
[解決済み] error A2022: 命令オペランドは同じサイズでなければなりません。
-
[解決済み] NASMでscanfを使うには?
-
[解決済み] アセンブリ言語で数字をプリントアウトする?
-
[解決済み] ループ内で配列の個々の要素にアクセスするにはどうしたらよいですか?
-
[解決済み] エラー: `push' の命令サフィックスが無効です [重複].
-
[解決済み] アセンブリ言語 - sarqはコードの中で何をするのですか?
-
[解決済み] objdumpの出力にあるdata16とはどういう意味ですか?