0

関数にビットの 2 つの文字列を追加しようとしていますが、それを機能させることができません...何か提案はありますか? ここに私のコードがあります:

$a0, "11111111111100000001111111111110"    #= -4064

$a1, "00000000001000111000000000000010"   # = 9088

$a2, resultSpace 
$a3, representation                #one's or two's complement

li $t4, 0 #carry flag 

lb $t0, 32($a0)
lb $t1, 32($a1)

move $t5, $a0

loop: 
lb $t0, 32($a0)
lb $t1, 32($a1)


add $t3, $t0, $t1


sb $t3, 32($a2)

sub $a2, $a2, 1 
sub $a0, $a0, 1
sub $a1, $a1, 1 


addi $t4, $t4, 1 # increments 
bne $t4, 32, loop 
4

1 に答える 1

1

ここにいくつかのポインタがあります。

  1. ビットASCII文字「0」および「1」と混同しています。「0」と「1」を追加すると、「1」ではなく「a」が得られます(「0」は文字48、「1」は文字49、「a」は文字97であるため)。

  2. まず、各文字列のオフセット32を確認します。ただし、文字列の長さは32文字であるため、文字列への有効なオフセットは0..31です。したがって、最初に行うことは、入力データの最後を読み取ることです。

  3. さらに、キャリーフラグを使用していません。また、ビットを追加するときにキャリーをチェックするために何もしていません。

  4. ただし、ループカウンターとしてキャリーフラグであると主張するレジスターを使用しています。

私はMIPSアセンブラーの専門家になるにはほど遠いので、次の2つは間違っている可能性があります。

  1. コードの先頭にいくつかの指示がありませんか?つまり、あなたは本当にちょうど言うことができますか、$a2, resultSpaceそれともあなたは何かが必要ですla $a2, resultSpaceか、それともそのようなものですか?

  2. bne-immediate疑似命令はありますか?実際のbne-immediate命令はないと確信しているからです。MIPS命令セットのbne命令は、レジスタと即値ではなく、2つのレジスタが与えられることを想定しています。

于 2011-03-15T00:00:11.657 に答える