0

直接変換を使用して mips に変換する必要がある C++ コードのセグメントがあります。私はそれのほとんどを完了しました。それは do while ループです。MIPS のこの 1 行がわかりません。

x[i] = y[i];

これをミップに変換する方法がわかりません。オンラインで延々と検索しています。助けてもらえますか?

編集

これは私が持っていたものですが、間違っていると言われました:

la $6, y
Li $7, $1
Add $7, $7, $7
Add $7, $7, $7
Add $8, $6, $7
Lw $6, 0($8)
La $7, x
Li $8, $1
Add $8, $8, $8
Add $8, $8, $8
Add $7, $7, $8
Sw $6, 0($7)

このオンライン サイトを参考にしました。

http://www.cs.pitt.edu/~xujie/cs447/AccessingArray.htm

2回目の編集

C++ コーディング

i=0;
do {
    x[i]=y[i];
    i++;
}
while (i!=j);

MIPS直訳

Addi $1, $1, 0
Loop:   la $6, y
    Li $7, $1
    Add $7, $7, $7
    Add $7, $7, $7
    Add $8, $6, $7
    Lw $6, 0($8)
    La $7, x
    Li $8, $1
    Add $8, $8, $8
    Add $8, $8, $8
    Add $7, $7, $8
    Sw $6, 0($7)
    Addi $1, $1, 1
    Bne $1, $2, loop 

そして、混乱を避けるために使用できるすべてのレジスタを次に示します。

Variables   i   j   x   y   4 (constant)    Free
Registers   $1  $2   $3   $4    $5               $6, $7, $8
4

1 に答える 1

0

これにより、正しい方向に進むはずです。これは宿題の質問なので、完全な解決策を提供するつもりはありません。

クイック リファレンス (MIPS 命令、呼び出し規約など):

http://www.mips.com/media/files/MD00565-2B-MIPS32-QRC-01.01.pdf

リトルエンディアン環境で 32 ビットと 16 ビットのベクトルの内積を計算するアセンブリ関数の例:

http://code.google.com/p/mips32-asm/source/browse/dot32x16.S

ここでは、配列の要素にアクセスする方法を確認できます。

「.set reorder」は、アセンブラが命令を並べ替えたり、いわゆる遅延スロットを処理するために NOP を組み込んだりすることに注意してください。あなたが遅延スロットの問題を理解していることを教授が確認したい場合は、自分で命令を適切に並べるか、分岐/ジャンプの後に独自の NOP を記述する必要があります。

于 2012-11-03T17:54:13.587 に答える