4

MIPS (QtSpim) を使用して、32 ビット ワードをビッグ エンディアンからリトル エンディアンに変換しています。以下に示すものは、チェック済みで正しいものです。ただし、他の方法で変換できることを知りたいです。私は回転とシフトを使用するだけでしたが、論理演算なしではそれを行うことができませんでした.

私の質問は、論理演算なしで実行できますか?

ここに画像の説明を入力

li $t0,0x12345678     # number to be converted supposed to be in $t0
rol $t1,$t0,8         
li $t2,0x00FF00FF     # $t2 contains mask 0x00FF00FF
and $t3,$t1,$t2     # byte 0 and 2 valid
ror $t1,$t0,8       
not $t2,$t2        # $t2 contains mask 0xFF00FF00
and $t1,$t1,$t2     # byte 1 and 3 valid
or $t3,$t3,$t1      # little endian-number in $t3
4

1 に答える 1

1

論理演算子を使用しないソリューションを次に示します。ただし、これは単なるハックです。

  li $t0,0x12345678   # number to be converted supposed to be in $t0

  swl $t0, scratch+3
  lwl $t1, scratch    # Load MSB in LSB
  lwr $t1, scratch+3  # Load LSB in MSB


  swl $t0, scratch+2
  lwr $t2, scratch    # Swap second and
  lwl $t2, scratch+1  # third bytes

  sw $zero, scratch 
  lwl $t2, scratch    # Leave MSB and LSB in zero
  lwr $t2, scratch+3
  addu $t3, $t1, $t2  # Add partial results to get final result

 .data 0x2000  # Where to locate scratch space (4 bytes)
scratch:
 .space 4

入力は$t0、部分的な結果はで$t1$t2最終結果はであり$t3ます。また、4バイトのメモリ(にありますscratch)を使用します

于 2012-06-22T16:46:09.297 に答える