2017-09-29 32 views
-2

私は0xF3進接頭辞は次のように使用されている気づいてきたように:
1)の繰り返しとINS0に等しいecxOUTSMOVSLODSまでecxを下げ、 STOS命令およびrep
2)反復と呼ばれCMPSSCAS命令でecx等しい0またはZFセットまでecxを減少させ呼ばrepz又はrepeアセンブリのx86 REP、REPZ、REPNZ、XACQUIREとXRELEASE命令

0xF3バイナリ接頭辞として使用される:
1)リピート及びCMPSSCAS命令に設定されていない0に等しいecx又はZFまでecxを減少させ、最近repnz又は

repneと呼ばは気づいたXACQUIRE/XRELEASE接頭辞も同じバイナリ値(0xF2,0xF3)を持っています

なのでXACQUIRE/XRELEASE(私はメモリアドレスのロックについて何かを読んだが、彼らは作業ラインではないlock(私は信じている))?

また、0xF3 mov byte ptr [ecx],0x0はどうなりますか? (ZFの設定が\設定されていないか、ecx0と同じになります)
0xF2 mov byte ptr [ecx],0x0は何を行いますか?インテルソフトウェア開発マニュアル2を引用

+2

命令セットリファレンスを参照してください。次のようなものが表示されます:_ "F3H接頭辞は次の命令に定義され、rest_"と_ "には未定義です。XACQUIRE接頭辞ヒントは、次の命令" _のみで使用できます。セットは重複せず、 'mov'を含まない。それは未定義です。 'XACQUIRE' /' XRELEASE'が行っていることについては、_Intel®64とIA-32アーキテクチャーソフトウェア開発者マニュアル第1巻:基本アーキテクチャ_の_HLEソフトウェアインターフェース_ – Jester

答えて

5

、2.1.1項

は専用の文字列とI/O命令(MOVS, CMPS, SCAS, LODS, STOS, INS、およびOUTS)でこれらのプレフィックス を使用してください。繰り返し接頭辞 および/または未定義のオペコードを他のインテル64またはIA-32命令と組み合わせて使用​​することは予約されています。このような使用は予測不可能な の動作を引き起こす可能性があります。
いくつかの指示では、別個の機能を表現するために接頭辞としてF2H,F3Hを使用することがあります。

は非文字列非IO命令とリピートプレフィックスの使用はあなただけの発見の理由で正確に未定義の動作です:Intelは同じ「命令」のさまざまな味を表現するためにそれを再利用するか、新しい拡張機能を実装します。

HLE命令の場合(xacquireなど)、それらは特定の命令セットに対してのみ有効です。
たとえば、xacquireADD, ADC, AND, BTC, BTR, BTS, CMPXCHG, CMPXCHG8B, DEC, INC, NEG, NOT, OR, SBB, SUB, XOR, XADDXCHGとしか使用できません。これらの手順ではプレフィックスを繰り返すことができないため、あいまいさはありません。

一般に、関連性のないプレフィックスは無視されるため、命令に接頭辞を追加すると将来のプロセッサで未定義の動作が発生する可能性がありますが、古いプロセッサでは無視されます。

HLEのサポートが明示的にチェックする必要はありません理由です:HLEサポートなし

ハードウェアはXACQUIREXRELEASEプレフィックスヒントを無視し、これらのプレフィックスはREPNE/REPEに対応しているのでどんな エリジオンを実行することはありません命令で無視されるIA-32接頭辞 XACQUIREおよびXRELEASEが有効です。接頭辞が無視されるため

0xF3 mov byte ptr [ecx],0x0のような命令は、今日ようmov byte ptr [ecx],0x0として行います。

明示的に繰り返します。繰り返しプレフィックスを使用して、命令の別のセマンティクスを選択します。

時には命令は明示的な名前を持っており、代替セマンティクスが(例えばmovsrepe movsrepne movsまたはtzcnt0xf3 bsfであるという事実)接近していると、時々命令は明示的な名前を持っていないと選択肢が少ない明白です(例えば、mulsd0xf2 mulpsmulss0xf3 mulpsmulpd0x66 mulps)である。

xacquire命令の詳細は、「インテルソフトウェア開発者マニュアル」またはthis postに記載されています。

関連する問題