私はCの式y = 1 - XをMIPSコンパイル言語にしたいと思っています。 は= $ S0 xとy = $ s1の1 - Xを実行する別の方法は?
addi $s1, 1, -$s0
は別の方法があることを想定しますか?
私はCの式y = 1 - XをMIPSコンパイル言語にしたいと思っています。 は= $ S0 xとy = $ s1の1 - Xを実行する別の方法は?
addi $s1, 1, -$s0
は別の方法があることを想定しますか?
はい。
nor $t0, $s0, $zero # flip bits of X, store in $t0
addi $t0, $t0, 1 # add one to $t0
addi $s1, $t0, 1 # now, add 1 to -X, store result in $s1
あなたはまた、一つに2つのステップを組み合わせて、一つ少ないレジスタを使用することができます。最初の2の補数数として$s0
を否定。これは、しかし、少し明確である:多分この
nor $s1, $s0, $zero
addi $s1, $s1, 2
:
li $s1, 1
subu $s1, $s1, $s0
式は 'y = 1-x'なので、' y'の古い値は_replaced_になります。だから、 '$ t0'を使う必要はありません。 '$ s1'と置き換えることができます –
そうです。それは同様にできるでしょう li $ s1、1; subu $ s1、$ s0 – fastman92
編集した場合、私はこれが答えであると思うのでアップアップします(私の一番上のコメントを見てください)。 –
'常にある - 〜-X'。 – YoYoYonnY
@YoYoYonnY:2の補数アーキテクチャで。しかし、C標準はこの表現を強制しません。 – Olaf
'addi $ s1,1、 - $ s0'は有効なmips命令ではないので、(つまり、_any_)有効な普通のシーケンスを探しているだけですか? –