アセンブラ命令 - K8_NOPx
概要
K8アーキテクチャのCPUで使用可能なNOP命令
詳細
各数値が実行命令のバイト数を表しており、以下の命令が使用できる
- K8_NOP1
- K8_NOP2
- K8_NOP3
- K8_NOP4
- K8_NOP5
- K8_NOP6
- K8_NOP7
- K8_NOP8
- K8_NOP5_ATOMIC
それぞれの命令は以下に示すアセンブラ命令と同等である
1 : nop; 2 : osp; nop; 3 : osp; osp; nop; 4 : osp; osp; osp; nop; 5 : osp; osp; nop; osp; nop; 6 : osp; osp; nop; osp; osp; nop; 7 : osp; osp; osp; nop; osp; osp; nop; 8 : osp; osp; osp; nop; osp; osp; osp; nop; 5 atomic : dsp; osp; nop; osp; nop;
5byte以上のNOP命令は2つの命令で形成されているためatomicに実行されない、そこで5byteのNOP命令を生成するにあたりDSセグメントへのオーバーライドプリフィックス(0x3e)を付加することで5byteの単一命令のnopを実現している
これは、jmp命令が5byteの命令になるため自己修正コードでNOP命令を関数呼び出しに書き換える際に頻繁に利用されるため、実効速度をあげるための施策であると思います
同様な用途としてGENERIC_NOPx、K7_NOPx、P6_NOPxが定義されています