6

私は x86-64 のアセンブリにしっかりと取り組んでいますが (専門家ではないかもしれません)、多くの側面はあるプラットフォームのアセンブラーから次のプラットフォームに似ているため、実際には私の知識の範囲外の質問にも答えようとしています。 MIPS アセンブリに関するいくつかの質問に出くわしました。

これが私の詳細への興味を呼び起こしたので、詳細な情報についていくつかのオンライン リソースをチェックしました。mips.comには読むべきものがたくさんありますが、私の簡単な情報だけを示します。

レジスタは単なる従来のゼロですか$zero、それともハードウェアのゼロですか?

慣例的にゼロであると言う情報源もあれば、常にゼロであると主張する情報源もあります。それとも、後者は単にゼロであると想定しているのでしょうか。

事前に説明していただきありがとうございます(および/またはMIPSのサイトから特定のドキュメントへのポインタがあるため、実際には必要のない情報をクロールする必要はありません)。

4

2 に答える 2

9

これに対する決定的な答えは、 mips.comで入手可能なMIPS32®Architecturefor Programmers Volume I:Introduction toMIPS32®Architecture(pdf)にあります(登録が必要です)。その文書のセクション2.4.8.1によると:

CPU汎用レジスタの2つには、次の機能が割り当てられています。

  • r0はゼロの値に配線されており、結果が破棄される命令のターゲットレジスタとして使用できます。r0は、ゼロ値が必要な場合のソースとしても使用できます。

  • r31は、命令ワードで明示的に指定されることなく、JAL、BLTZAL、BLTZALL、BGEZAL、およびBGEZALLによって使用されるデスティネーションレジスタです。それ以外の場合、r31は通常のレジスタとして使用されます。

残りのレジスタは、汎用で使用できます。

于 2012-09-22T21:55:19.353 に答える
6

上位 5 件の参考文献は、それが hardw(are|ired) zero であると述べています。

そして、驚くべきことかもしれませんが、MIPS だけがこのような奇妙なレジスターを持っているわけではありません。

比較のために、TI の MSP430 には、R2 (ステータス レジスタ) と R3 (定数ジェネレータ)の 2 つの特殊レジスタがあります。それらを介してメモリ オペランドを読み取る (または R3 を直接読み取る) 場合、次の定義済み定数のいずれかをフェッチします: -1、0、1、2、4、8。定数は、レジスタ番号とアクセスの種類によって異なります。 (直接、インデックス付き、間接、間接 + 自動インクリメント)。これにより、コードサイズと (AFAIR) 実行時間が削減されます。そうしないと、即値定数が 16 ビットを占有し、フェッチする必要があるためです。

于 2012-09-22T07:08:19.703 に答える