1

SPARC アセンブリには、cmp2 つの数値を比較する命令があります (私の理解が正しければ、減算を使用します)。subccaddcc、 、 などもandccあります。cmp計算の実行後に条件コードを使用して設定する場合と、2 つの数値を比較する場合の違いは何ですか? コンセプトを理解するのに苦労しています。

4

1 に答える 1

2

cmpを使用して2つの数値を比較することと、計算を実行した後に条件コードを設定することの違いは何ですか?

一般に(たとえば、x86または68000タイプのプロセッサの場合)cmpオペランドを変更したり、結果をどこにも保存したりせずに、ステータスフラグのみを設定します。

subなども宛先オペランドを変更しています(結果をどこかに格納する必要があります)。これは、比較操作を行う場合には必要ありません。

本質的にcmpsub、結果が単純に破棄される操作です(おそらく命令サイクルを節約します)。比較を行うときは、結果は必要ありません。結果がゼロかどうか、および結果が負かどうかを知るだけで済みます。

特にSPARCでは、読みcmpやすさを向上させるために提供される「合成命令」であり、最終的にはアセンブラによってsubcc命令に変換されます。http://moss.csc.ncsu.edu/~mueller/codeopt/codeopt00/notes/sparc.htmlの「合成手順」を参照してください。

したがって、アセンブラによってにcmp %reg1,%reg2変換されます。subcc %reg1,%reg2,%g0これにより、2つのレジスタが減算され、結果がレジスタに格納されるため、結果が事実上破棄され%g0ます。%g0は、読み取り時に常に戻り、書き込み0時に変更されないレジスタです。したがって、命令レベルでは、との間にまったく違いはありcmpませsubccん(つまり、SPARCには個別のcmp命令はありませんが、subcc比較のために特別な宛先レジスタで使用されます)。

于 2013-03-20T14:49:56.080 に答える