2016-10-30 12 views

答えて

5

文字FWORDにおける「F」は「遠い」FWORDタイプの主な用途である32ビットfarポインタのような単語を表します。 32ビットfarポインタは、最初の4バイトに32ビットのオフセットを持ち、最後の2バイトに16ビットのセレクタを持っています。

ほとんどの32ビットオペレーティングシステムでは、32ビットの4Gアドレス空間全体がすべてのセレクタからアクセスできるため、通常、32ビット遠方ポインタはあまり使用されません。低レベルのオペレーティングシステムコードでは、CSセレクタがコードが実行する権限レベルと、コードが16ビット、32ビット、または64ビットモードで実行されるかどうかを判断するため、低レベルのオペレーティングシステムコードで使用されることがあります。

+0

おかげで多くのことを意味し、今私は、保護モードとGDTR(グローバル記述子テーブルに実モードから切り替える方法を学んでいますレジスタ)は6バイトです。 'lgdt fword ptr gdtr' –

+2

@HrantCharchyanこの場合、LGDT命令のメモリオペランドは6バイトですが、遠いポインタではありません。代わりに、下位2バイトでは16ビットの制限があり、上位4バイトでは32ビットのベースです。 –

+0

@HrantCharchyan C構造体を使用している場合は、不揃いに注意してください。 16ビットの長さは 'lgdt'オペランドの32ビットの前に来ます。慎重でない場合、コンパイラは長さの後に2つのパディングバイトを追加して、ベースフィールドを32ビット境界に揃えます。ベースに「低」/「高」の16ビット値のペアを使用するか、コンパイラに構造体がパックされていることを伝えます。 – doug65536

関連する問題