0

こんにちは、よろしくお願いします。

私の質問は、あるレジスタ($ t0)にポインタを置き、別のレジスタ($ t1)にポインタを移動するようなレジスタを通過できるかどうかです。

私が実際にやりたいのは、1つのループで8つの整数を読み取り、それらを($ s0- $ s7)に格納することです。

4

3 に答える 3

0

レジスタ番号を可変にしたいですか?私は MIPS の内外を知りませんが、それが可能であるとは思えません。私が知っている唯一のISAは、SPARC(レジスタウィンドウ、必要なものには使用できません)とIA64(「回転レジスタ」、必要なものに使用できますが、浮動小数点でのみ使用できます)です。

于 2011-02-25T16:30:48.470 に答える
0

オペコードのビットを変更swしてレジスタの増加を指すようにすることもできますが、それはひどい考えです。あなたの最善の策は、展開されたループを自分で書くことだと思います:

lw $s0, $t0
addi $t0, $t0, 4
lw $s1, $t0
...

失速を最小限に抑えるために物事を再配置しますが、それはあなたが得ようとしているのと同じくらい良いです.

于 2011-02-25T16:27:33.877 に答える
0

レジスタの内容によるレジスタの参照をサポートする既存の MIPS アーキテクチャを認識していません。これにより、次のような提案が可能になります。

move  $t0, $zero
mover $t0, $s0    # $s0 = register($t0) = register(0)
addi  $t0, 1
mover $t0, $s1    # $s1 = register($t0) = register(1)
addi  $t0, 1
...

いずれにせよ、私の意見では、いくつかの理由から、それは良い考えではありません。まず、とにかく非常に少数のレジスタを扱っているため、いずれにせよループに小さな上限があり、直接的なアプローチの柔軟性がそれほど低下しません。

さらに重要なことに、そのようなループは恐ろしく非効率的です。反復ごとに、初期化、インクリメント、moveおよび分岐チェック(少なくとも)を実行します。ブランチ ストールを考慮に入れなくても、単純な場合よりも少なくとも 3 倍遅くなります。

move $t0, $s0
move $t1, $s1
...
move $t8, $s8
于 2011-02-25T16:35:49.750 に答える