12

私はバイナリ変換を実装しており、約 16 オペコードの長さの一連の NOP (0x90) を処理する必要があります。このようなシーケンスの開始時に JMP を (最後まで) 配置した方がパフォーマンスが向上しますか?

4

3 に答える 3

15

インテル アーキテクチャ ソフトウェア デベロッパー ガイド、ボリューム 2B (インストラクション NZ)には、次の表 (pg 4-12) が含まれていNOPます。

表 4-9。NOP 命令の推奨マルチバイト シーケンス

長さ アセンブリ バイト シーケンス
================================================== ===============================
2 バイト 66 NOP 66 90H
3 バイト NOP DWORD ptr [EAX] 0F 1F 00H
4 バイト NOP DWORD ptr [EAX + 00H] 0F 1F 40 00H
5 バイト NOP DWORD ptr [EAX + EAX*1 + 00H] 0F 1F 44 00 00H
6 バイト 66 NOP DWORD ptr [EAX + EAX*1 + 00H] 66 0F 1F 44 00 00H
7 バイト NOP DWORD ptr [EAX + 00000000H] 0F 1F 80 00 00 00 00H
8 バイト NOP DWORD ptr [EAX + EAX*1 + 00000000H] 0F 1F 84 00 00 00 00 00H
9 バイト 66 NOP DWORD ptr [EAX + EAX*1 + 00000000H] 66 0F 1F 84 00 00 00 00 00H

NOPこれにより、特定のサイズの「パディング」を構築できます。それらのうちの2つを使用すると、16バイトをブリッジできますが、aJMPが2つのそのようなNOPs.

于 2011-07-21T14:25:45.160 に答える
4

s がストリームを調整する場合NOP、単に NO OP である以上の価値があります。純粋な速度に関心がある場合は、Agner Fog の Optimization Manuals Vol. 4 .

于 2011-07-21T13:07:53.847 に答える
1

バイナリ変換であるため、翻訳から始めます (ターゲット システムで同等の nop に変換します)。機能するようになったら、デッド コードを最適化します。同時に、この一連の命令が目に留まったので、おそらくハードウェアが何かを行うのを待って、それらが何のためにあるのかを理解しようとし、翻訳されたシステムが同じように機能することを確認してください。

于 2011-07-21T14:25:17.657 に答える