32ビットx86プロセッサアーキテクチャプログラム

基本的な実行環境1. IA-32アーキテクチャー

1.1拡張レジスタ

  後にアセンブリ言語プログラムで使用するための拡張(拡張)レジスタ:
ここに画像を挿入説明
  32ビット・モードでは、32ビットの物理アドレスを生成するために、プロセッサは、32ビット命令ポインタレジスタの使用を必要とします。フラグレジスタは、32ビット、16ビットおよび第元一貫性に拡張されます。
ここに画像を挿入説明
  プロセッサ32は依然としてセグメントの、すなわち、点のみ、グレードのメモリユニットにアクセスする必要があり、アドレスは0x00000000の基礎セグメントであり、セグメントの長さ(サイズ)は4GBです。この場合には、すなわち、非セグメント化とみなすことができる平らなパターン(フラットモード)

  セグメント従来の32ビット・モードでレジスタ、16ビットのセグメントアドレスが、セグメント・セレクタを保存し、2つの追加のセグメントレジスタのFSとGSを追加していない、各セグメントをさらに含むに非可視部分をレジスタ呼ばれる記述子キャッシュ

1.2リニア・アドレス

  セグメントは、プロセッサによって実行セグメントによって管理する責任があり、区間部材セグメントアドレスとオフセットアドレスは、メモリアドレスへのアクセスを得るために添加されます。一般に、セクション部材を生成するアドレスである物理アドレス

  ページング論理ページに機能物理メモリ空間を。ページサイズが固定され、通常は4キロバイトでは、ページを使用することによって、あなたは、メモリ管理、タスクに割り当てられた小さなメモリ空間を簡素化することができます。

  ページがオンされると、アドレス生成部部材は、もはや物理アドレスではなく、されていないリニアアドレス(リニアアドレス)、線形ページアドレスも変換部材によって、物理アドレスです。
ここに画像を挿入説明
  リニアアドレスは、タスクのアドレス空間の概念を記述するために使用されます。各タスクにIA-32プロセッサは、いわゆるほんの一部直線状空間の長いフラット4ギガバイト、仮想メモリ空間4GBの有する線形アドレス空間をしたがって、線形アドレス空間上の各点に対応するセグメント部材によって生成されたアドレス、線形アドレス

2.構造と最新のプロセッサの特性

2.1パイプライン

  プロセッサの効率と速度を向上させるために、命令の実行は、小さなステップ数に分解することができ、対応するセルは、完全であると割り当てられています。各実行ユニットは、並列に独立しています。時間に実行される各種のステップが積まれますしたがって、命令を実行するこの方法をされて(パイプライン)のパイプライン技術。
ここに画像を挿入説明

2.2キャッシュ

  製造の原理のための帰還回路に格納されているトリガの使用、動作速度があるため、最速の速度を登録ナノ秒(ns)でレベル。メモリ(DRAMダイナミックメモリ)チップ材料コンデンサはナノ秒の通常数十、彼のアクセス速度が非常に遅くなるように、定期的なリフレッシュを必要とするので、典型的には単一のトランジスタとキャパシタです。最後に、通常ではハードディスク、機械的および電気機器、ミリ秒(MS)

  この場合は、メモリやハードディスク、プロセッサなどの低速デバイスを待つ必要解決するために、メモリ(DRAM)のSRAMとの間の速度一致させることができますキャッシュ(キャッシュ)されて入ってきました。

  地域プログラムの原則が実行されている使用すると、メモリブロックがキャッシュに転送されようとしているから、プロセッサが利用可能とアクセス命令とデータをある置くことができます。だから、プロセッサがメモリにアクセスするたび、最初のキャッシュを取得します。コンテンツにアクセスする必要がある場合、次に、呼び出されたキャッシュに大きな速度でキャッシュから直接取得することができるヒット(HIT) そうでない場合、と称する(ミス)ではありませんプロセッサなしでコンテンツを取得するために必要なコンテンツを取得する前に、だけでなく、直接メモリにキャッシュをリロードする必要があります。キャッシュは、隣接するコンテンツの所望のデータを含むブロック単位でロードされます。これは、キャッシュ・ブロックがプロセスで失われた時間が呼ばれ、メモリからロードされるのを待つために余分な時間を必要とペナルティ(MissPenalty)なし

オーダーのうち2.3

  パイプライン化を達成するために、命令は、より小さな部分に分割、すなわち、に分割、独立して実行することができることが必要であるマイクロオペレーション(マイクロオペレーション)、と略記マイクロOPS
いくつかの簡単な手順だけ1つのマイクロオペレーション:

add eax,ebx

  いくつかの命令は、2つのマイクロ演算に分割することができる、データがメモリから読み出されて一時レジスタに格納され、EAXレジスタの値と一時レジスタのための1つが追加されています。

add eax,[mem]

  これは、加算演算、メモリに書き戻す第三の加算結果を行う、メモリからデータを読み出すために3つのマイクロ演算に分割することができます。分割するとは、必要プロセッサは、動作命令であるため(アウトオブオーダー実行)のうちプログラム:

mov eax,[mem1]
shl eax,5
add eax,[mem2]
mov [mem3],eax

  論理左シフト命令を実行するようにしながらここで、命令MOV [MEM2]は、EAXは、データがキャッシュにない場合、プロセッサは、典型的には、メモリから前方MEM2コンテンツを読み取ることができる、2つのマイクロ演算に分割することができ、その後、プロセッサコンテンツMEM1を取得した後、それはすぐにコンテンツMEM2を取得を開始します、そして同時に、SHL命令が実装され始めています。同様に、注文の実行速度のうち大幅ようなのようなプッシュ、コール命令、及びとして加速させることができます。

2.4レジスタリネーミング

mov eax,[mem1]
shl eax,3
mov [mem2],eax
mov eax,[mem3]
add eax,2
mov [mem4],eax

  コードは、2つのことを行うために、1は、3つのユニットを残したコンテンツMEM1で、名前の3つの操作の名前の後ろに別のレジスタ名は、この操作でもあるので、場合は、他のは、MEM3内容+2であります影響されない、プロセッサは、最後の3つの命令に別の一時レジスタを使用し、したがって、左することができ、並列加算器。

mov eax,[mem1]
mov ebx,[mem2]
add ebx,eax
shl eax,3
mov [mem3],eax
mov [mem4],ebx

  我々は左のための新しい一時レジスタを設定して、算術左シフトは、追加する前に行われますされ、キャッシュのMEM1内容がすぐに達成できることを今仮定ではなく、キャッシュ内のコンテンツMEM2 、そのようなコンテンツが前に知ってEAX、EBX彼は準備の内容まで、この値を保存し、その後、追加でそれを行うされていたであろう。左シフト演算からのレジスタ・リネーム・メカニズムは、MEM2のEBXレジスタの内容を読み取るために待つ必要がない、と加算演算からなります。

  すべての操作が完了した後、最終的な結果を表す一時レジスタの内容が真の登録レジスタEAX EAXに書かれている、プロセスが呼び出される退職(退職)すべての汎用レジスタ、スタックポインタ、フラグは、浮動小数点レジスタ、セグメントレジスタであっても名前を変更する可能性があります。

2.5分岐ターゲット予測

  パイプラインではない百パーセント完璧なソリューション。分岐命令に遭遇した場合は、入力した命令パイプラインの裏には無効です。したがって、導入の分岐予測技術(分岐予測)プロセッサは、分岐命令を実行する際には、転送する予測は、それが呼び出され、プロセッサ内部小容量のキャッシュとなり発生分岐先バッファ(分岐目標バッファ、BTB)現在の命令に記録しますアドレス、分岐先のアドレス、およびこの分岐予測構造。次回は、分岐命令の実行の実際の作品の前に、BTBのためのプロセッサのルックスは、最近の転送レコードかどうかを確認します。あなたは、対応するエントリは、投機的実行、および同じ枝に、パイプラインへの分岐命令を見つけることができます。

  命令が実際に実行されると予測が失敗の場合はBTBの記録を更新しながら、その後、パイプラインを空にします。価格も大きいです。

3.32命令モード

3.1 32ビット・アドレッシング・プロセッサ

   16ビット・モードでは、プロセッサは、命令はは0x66プレフィックスでない場合は0x66がある場合、命令は従来の16ビット・アドレッシング・モードでは、命令プレフィックスと見なされ、32ビット・アドレッシング・モードは、32ビット・モードでは、何の命令プレフィックスは0x66がありません、命令は、従来の32ビット・アドレッシング・モードであると考えられる、命令プレフィックスは0x66がある場合、それは16ビット・アドレッシング・モードです。デフォルト命令は、メモリアドレス指定がある場合、オフセットが32ビット、32ビット幅、32ビットの即値データを登録します。

  32ビット・モードアドレッシングメモリの全ては、汎用32ビットESPインデックス・レジスタとしてレジスタに加えて添加してもよく、ベースレジスタ等の汎用32ビットレジスタを使用することができ、インデックスレジスタは、2で乗算を可能にすることができます比例因子として4,8。最後に、8ビットまたは32ビットプラスオフセット。ここに画像を挿入説明

3.2オペランドサイズプリフィックス命令

  各プロセッサは、繰り返しプレフィックス(REP / REPE / REPNE)として、セグメントの接頭辞(例えば、ES :)、バスプレフィックスブロック(LOCK)を超えなど、プレフィックス命令を有することができます。プリフィックスは、各命令は、1から4のプレフィックス、又は全くプレフィックスに持つことができ、各プレフィックス長は1バイトであり、任意です。
ここに画像を挿入説明
  プログラムのデフォルトの動作環境を示すために、コンパイラディレクティブは、後続の命令を示すため、ビットを提供するには、16ビットまたは32ビットにコンパイルされなければなりません。

拡張一般的な指示3.3

  プロセッサは、32ビット・レジスタと32ビットの算術論理ユニットを備え、メモリチップとの間のデータ・パスが非常に少なくとも32ビットであると、レジスタまたはメモリのオペランド部にすべての命令をに展開されているので32ビットの適応算術論理演算。これらの動作は、16ビットモード(16ビットリアルモードとプロテクトモード)に延長されていてもまた、それはまた、有用です。

  プロセッサ32は、スタック内に押し込まれるツイン操作の数を可能にします。特に、それは今すぐにプッシュ操作をサポートしています。汎用レジスタではなく、キーワードバイト、ワード、ダブルワードの変更、メモリセルは、キーワード、単語、修正DWORD、即時の圧力の行動や振る舞いに押し込まれ、プロセッサメモリ操作は同じバイトである必要がありますすることができます。

  • バイトを修正するためにバイトにプレスを使用しなければならない場合は、しかし、彼が実行された、何があっ時点で、プロセッサは実際にバイトをプッシュしていない、操作が24高に符号ビットのバイトを拡張します、使用プッシュESP、ESPと最初のコンテンツマイナス4を登録します。
  • ワードに押された場合は、高16、および第一のコンテンツESPマイナス4にプッシュ展開し、変更するために単語を使用する必要があります。
  • ダブルワードは直ちに番号をプッシュする場合、32ビットモードまたは16ビットモードでは、DWORDを使用しなければならないのいずれか、及びスタック・ポインタ・レジスタ(SPまたはESP)とマイナス4。
  • 16ビット・モードでは、特別な操作を登録するセグメントに押し付け、第一SPマイナス2の内容物は、次いで、直接セグメントレジスタの内容に、32ビット・モードでは、最初のセグメントの内容はゼロ32に拡張レジスタビット、上位16ビットすべてゼロ。そして、その後、ESP 4の内容を減算し、そしてにより膨張後の32ビット値に押し込みます。

おすすめ

転載: www.cnblogs.com/chengmf/p/12561282.html