9

セマンティクスの違いはありますか? それらの 1 つは、特定の状況下でより高速になる可能性がありますか?

4

3 に答える 3

14

-x事前に計算した場合、sub smth, xadd smth, -xは同じように高速に実行されます。

意味的には、フラグの状態に違いがあります。

8 ビットの加算と減算を行うことを検討してください。

0x01 - 0x01 = 0x00, CF = 0
0x01 + 0xFF = 0x00, CF = 1
于 2013-01-19T16:56:12.863 に答える
5

フラグが異なることに加えて、xが定数の場合、どちらかを選択すると、エンコードが短くなる可能性があります(まれに)。

加算と減算はどちらもop r/m32, imm8、イミディエートオペランドがバイトである形式ですが、そのバイトは符号拡張されています。したがってadd edx, 128、dword即時でエンコードする必要がありますがsub edx, -128、符号拡張バイト(3バイトを節約)でエンコードすることもできます。

于 2013-01-19T17:10:17.250 に答える
3

Alexey Frunzeが指摘しているように、旗国には違いがあります。さらに、表現可能な値の数にも違いがあります。2の補数法では、正の値よりも負の値が1つ多くなります。負の数を加算するとこれを利用できますが、正の数を減算しても利用できません。

編集:

根本的な問題は、私たちが通常「整数」と考えるものは実際には整数ではないということです。数学的には、それらは抽象代数の概念である商環のメンバーです。これは、32ビットの「整数」ごとに、のようなa別の32ビットの「整数」があることを意味します。これらの数値が「正」または「負」と見なされるかどうかは、単なる解釈です。これは、私の主張が正しいことと間違っていることの両方を意味します。商環に関しては正しくありませんが、通常の解釈に関しては正しいです。-2147483248を加算した場合と同じ結果を減算して取得できる数値が必要です。ただし、その数は2147483248ではなく、直感に反しているようです。ba + b = 0

于 2013-01-19T17:02:44.243 に答える