29

私は MIPS の除算について読んでいて、その div を見つけました

$s を $t で割り、商を $LO に、余りを $HI に格納します。

https://web.archive.org/web/20201111203150/http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html

そしてウィキペディアによると

HI および LO は、mfhi (上位からの移動) および mflo コマンドによってアクセスされる乗算器/除算器の結果にアクセスするために使用されます。

http://en.wikipedia.org/wiki/MIPS_architecture

HIとLOレジスタですか?それらは何番目のレジスタですか?

4

3 に答える 3

31

これらは、乗算と除算の結果を格納するために使用される特別なレジスタです。$0 .. $31これらは汎用レジスタとは別のもので、直接アドレス指定できません。それらの内容には、特別な命令mfhimflo(Move From HI/LO) を使用してアクセスします。

これらは乗算ユニットにあり、それぞれ 32 ビットです。詳細はこちら。ペアとして、32x32 ビット整数の 64 ビット完全な結果を保持しますmult


Raymond Chen のブログ記事The MIPS R4000, part 3: Multiplication, Division, and the Tempamental HI and LO registerには、以前の/を(それぞれ)無効にするmtlo/を含む、初期の MIPS の非直感的な動作に関する非常に良い情報があります。mtlohilo

初期の MIPS の不完全な整数命令セットのリファレンス (質問にリンクされています) にも詳細があります。 http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html、または MIPS の公式 PDF を参照してください。マニュアル、または従来の MIPS CPU のマニュアルの PDF。

于 2010-02-23T17:24:04.193 に答える
11

HI と LO は番号付きレジスタではありません (IIRC)。これらは、1 つのレジスタに収まらない演算の結果を格納するためにのみ使用されます (たとえば、2 つの 32 ビット整数を乗算すると 64 ビット整数になる可能性があるため、オーバーフローは HI に入ります)。

編集:このクラスの説明によると、それらは実際には特殊なレジスタであるため、番号が付けられておらず、特殊なコマンドを使用してのみアクセスできます。

于 2010-02-23T17:22:19.687 に答える