[解決済み] MIPSアセンブリの論理シフトを使用した2の累乗の乗算
2022-03-09 12:27:32
質問
MIPSアセンブリでシフトを使った乗算のコードを作るにはどうしたらいいか、どなたかご指南ください。私は数2^nを持っていることが、奇数の乗算子を使用して乗算するのに役立つのか理解できない。
私は現在このようなコードを持っています。
.text
li $v0, 4
la $a0, ask_1
syscall
li $v0,5
syscall
move $s1, $v0
li $v0, 4
la $a0, ask_2
syscall
li $v0,5
syscall
move $s2, $v0
#sll $s2, $s2, 3 #$s2 * $s2^3 = result
srl $s2, $s2, 1
li $v0, 1
la $a0, ($s2)
syscall
.data
ask_1: .asciiz "Enter Multiplier\n"
ask_2: .asciiz "Enter Multiplicand\n"
result: .asciiz "The Answer is:\n"
解決方法は?
数値をnビット左にシフトする
を2倍する
n
. 例えば
n << 3 = n*2³ = n*8
. 対応する命令は
SLL $s1, $s2, 1
任意の数を掛けるには、その数を2の累乗の和に分割することができます。たとえば
-
n*10 = n*8 + n*2 = (n << 3) + (n << 1)
SLL $t1, $s2, 1 SLL $t2, $s2, 3 ADD $s2, $t1, $t2
より高速な場合は、引き算を使用することもできます
-
n*15 = n*16 - n = (n << 4) - n
SLL $t1, $s2, 4 SUB $s1, $t1, $s2
関連
-
[解決済み】テスト %eax %eax のポイント【重複あり
-
[解決済み】単純なforループのためのMIPSアセンブリ
-
[解決済み] Lc3分割のしくみ
-
[解決済み] DOSBox - このプログラムはDOSモードでは実行できません (アセンブリ)
-
[解決済み] x86 8086 アセンブリで 0-9 の範囲の乱数を生成する。
-
[解決済み] cmovlオペコードの中で何と何が比較されるのですか?
-
[解決済み] x86アセンブリの角括弧の意味は何ですか?
-
[解決済み] MIPSの擬似命令 "move "の "addi "と "add "の違い?
-
[解決済み】1回の乗算でビットを抽出する方法
-
[解決済み】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 実装 サイバーパンク風ボタン