まず、はっきりさせておきたいのは、これはマイクロ最適化に関するものではないということです。
しかし、パーティション上のブートローダでは、コーディングが多数使用されていることは知っていますjmp short; nop
。しかし、私の理解では、jmp の「ジャンプ」量が少ないほど、プロセッサが完了するまでのサイクル数が少なくなり、プロセッサによっては、 を見つけて0x90
、評価せずにスキップするだけなのです。
答え1
ぜひご覧になってみてくださいIntel 64 および IA-32 アーキテクチャ ソフトウェア開発者マニュアルこれらは、プログラマーの観点から x86 アーキテクチャを理解するための優れたリソースです (アセンブリ言語にすでに慣れていることを前提としています)。
[...] 私の理解では、jmp の「ジャンプ」量が少ないほど、プロセッサが完了するのにかかるサイクルが少なくなります。
ニアジャンプとファージャンプを区別する必要があります。ニアジャンプは、命令ポインタ (IP) にオフセットを追加する (または 2 の補数計算で減算する) か、現在のコードセグメント (CS) から IP オフセットを再ロードするだけです。ニアジャンプは、多くの場合、オフセットを命令ワード自体またはレジスタに格納できるため、ジャンプ命令全体を 1 サイクルでフェッチできます。
ファージャンプは命令ポインタの実際の新しいアドレスを次ワードまたはメモリ位置にあるため、追加のフェッチが必要になり、時間がかかります。x86およびx86-64では、ないレジスタに保持されている場所へのファージャンプ (次の命令ワードまたはメモリ内の場所である必要があります)。
一部のプロセッサは 0x90 を認識し、評価せずにスキップします。
NOP
はい、それが命令が行うことの定義です。CPU は依然として0x90
オペコードを取得する必要がありますが、評価は本質的には何も行いません。