2017-03-13 20 views
1

プログラムは、ユーザ入力キーを取り、そのキーから右端の5ビットを抽出し、次いで、これは私が試したものである請求ビット操作MIPSアセンブリ

に2ビットの間にそれらのビットを置き換えます。

lw $s1, 0($s0)    # extracts the first word in the array 
beq $s1, $zero, done   # at the end of the array is a zero => 0 


move $t1, $s2     #s2 has the input key 
move $t0, $s1     # put the word in a temporary register 
andi $t2, $t1, 0x0000001f  # use the input mask to return the rightmost 5 bits 

sll $t3, $t2, 2    # move the bits over to align with bits 2-6 

andi $t0, $t3, 0xffffff83 

だから私の考えは、アンディ$ t2のは、$ t1,0x0000001fと5ビットを抽出、入力キーを取ることです、そして6

にビット2で抽出された5ビットを整列するために論理的に2ビットの左シフト

これは私が立ち往生している場所です。私が取ったビットをユーザー入力キーから置き換え、ビット位置2から6に入れるにはどうしたらいいですか? 2番目のANDIの入力マスクは正しいと思いますが、適切なレジスタを使用しているとは思われません。

編集:返信いただきありがとうございます。私は提供された提案で解決策を見つけました。同様の問題を抱えている人:

そして、完全な答えを提供することを避けるために、データワードで置き換える必要のあるビットは入力マスクで修正する必要があります。これは異なるandi命令で行うことができます。いくつかのステップがありますが、これは少なくとも、誰かが正しい方向を向いていることを将来的に指すべきです。

+0

最後の行では、明らかに入力をマスクしたいので、 '$ t3'はそこではビジネスがありません。いったんあなたがそれを修正したら、それらを一緒に「または」。追加もあまりにも。 – Jester

+0

"私はインターネットから宿題を盗んで捕まえたくない"以外の質問を削除したいという正当な理由がある場合は、 "私たちに連絡"リンクを介して管理者に連絡してみてください。彼らはあなたを助けるかもしれない、彼らはそれを拒否するかもしれない。質問の「削除編集」はここでは受け入れられません。 –

答えて

1

"置き換え"ビットは、2つの値を1つに合成することによって行われます。これは、and/or/xorを使用することができますが、共通の原則は、最終的な組成が望ましい結果を生み出すような方法でソース/ターゲット値を準備することです。 4ビット値に

例として、宛先dにソースsからB1〜B3のビットをコピーする:

or/xor/addバリアント(最終ビットは保存、他はクリア):

s = 0101 => and 0xE => 0100 => `or/xor/add` to `d` 
d = 1100 => and 0x1 => 0000  => 0100 

andバリアント(最終ビット、他の人が設定し)、保存:

s = 0101 => or 0x1 => 0101 => `and` to `d` 
d = 1100 => or 0xE => 1110  => 0100 

ノートから0xE =〜0x1の(レジスタのクリアビットがにしているので、もう一方は保存され、逆も同様)。