2016-09-23 2 views
0

私はCの式y = 1 - XをMIPSコンパイル言語にしたいと思っています。 は= $ S0 xとy = $ s1の1 - Xを実行する別の方法は?

addi $s1, 1, -$s0 

は別の方法があることを想定しますか?

+0

'常にある - 〜-X'。 – YoYoYonnY

+2

@YoYoYonnY:2の補数アーキテクチャで。しかし、C標準はこの表現を強制しません。 – Olaf

+0

'addi $ s1,1、 - $ s0'は有効なmips命令ではないので、(つまり、_any_)有効な普通のシーケンスを探しているだけですか? –

答えて

2

はい。

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 
3

li $s1, 1 
subu $s1, $s1, $s0 
+1

式は 'y = 1-x'なので、' y'の古い値は_replaced_になります。だから、 '$ t0'を使う必要はありません。 '$ s1'と置き換えることができます –

+0

そうです。それは同様にできるでしょう li $ s1、1; subu $ s1、$ s0 – fastman92

+0

編集した場合、私はこれが答えであると思うのでアップアップします(私の一番上のコメントを見てください)。 –

関連する問題