ランダムなプレフィックスを乱暴に組み合わせた場合に何を期待すべきかについての仕様を見た覚えがないので、CPU の動作は「未定義」であり、おそらく CPU 固有である可能性があると思います。(明らかに、インテルのドキュメントなどで指定されているものもありますが、多くの場合はカバーされていません)。また、一部の組み合わせは、将来の使用のために予約されている場合があります。
私の素朴な仮定は、通常、追加のプレフィックスはノーオペレーションであるというものでしたが、保証はありません。たとえば、一部の最適化マニュアルでは、接頭辞を付けてマルチバイトをNOP(標準的90hに)推奨していることを考えると、それは合理的と思われます66h。
db 66h, 90h; 2-byte NOP
db 66h, 66h, 90h; 3-byte NOP
db 66h, 66h, 66h, 90h; 4-byte NOP
CSただし、セグメント オーバーライド プレフィックスは、条件付きジャンプ命令に適用するとDS、SSE2 分岐ヒント プレフィックス (分岐の実行を予測 = 3Eh=DSオーバーライド、分岐の実行を予測 = 2Eh=オーバーライド) として新しい機能を獲得したことも知っています。CS
とにかく、私は上記の例を見て、常にすべてに設定しXMM1、すべて0にXMM70FFh
pxor xmm1, xmm1 ; xmm1 <- 0s
pcmpeqw xmm7, xmm7 ; xmm7 <- FFs
次に、問題のコードとxmm1, xmm7引数を指定します。私が観察したこと (Win64 システムおよび Intel T7300 Core 2 Duo の 32 ビット コード) は次のとおりです。
1)プレフィックスaddsdを追加しても変化なし66h
db 66h
addsd xmm1, xmm7 ;total sequence = 66 F2 0F 58 CF
2)プレフィックスaddssを追加しても変化なし0F2h
db 0f2h
addss xmm1,xmm7 ;total sequence = F2 F3 0F 58 CF
3) ただし、次のように接頭辞を付けることで変化を観察しaddpdました0F2h。
db 0f2h
addpd xmm1, xmm7 ;total sequence = F2 66 0F 58 CF
この場合、XMM1 の結果は0000000000000000FFFFFFFFFFFFFFFFhではなく でしFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFhた。
したがって、私の結論は、仮定を立てて「未定義」の動作を期待するべきではないということです。しかし、アグナー フォグのマニュアルに手がかりが見つかったとしても、私は驚かないでしょう。