1
私はMIPSで助けが必要なCコードを持っています。 Cコードは以下の通りです。CからMIPSへの変換。配列のロード・ワード・オフセット?
for (i=0; i<100; i++){
a[i] = b[i] + c[i] - d[i];
}
これをMIPSに変換しましたが、ロード・ワードのオフセットに何を入れるべきかわかりません。
addi $t0, $zero, 0 #i = 0
for_loop:
bgt $t0, 100, for_loop_done #i <100
addi $t0, $t0, 1 #i++ or i = i+1
lw $t4, __($s0) # load a in t4
lw $t1, __($s1) # load b in t1
lw $t2, __($s2) # load c in t2
add $t4, $t2, $t1 # add b with c and store in a
lw $t3, __($s3) # load d in t3
sub $t4, $t3, $t4 # sub contents of a from d
sw $t4, __($s0) # store contents of t4 into a
j for_loop # go to start of loop
for_loop_done:
a、b、c、dはそれぞれs0、s1、s2、s3、s4であると仮定する。コードが必要とするのは、どのようにしてロード・ワードを相殺し、Cコードから常に変化する 'i'でワードを格納できるかということです。なぜなら、私が知っている限り、単語は静的な値しか使わないからです。
あなたは1つの配列項目の各ループの大きさによって、S0、S1、S2、...をインクリメントすることができます。または、それらのコピーを作成し、元の開始アドレスが失われないように増分します。これは、これを含むほとんどの命令セットで機能します。 –