Global Descriptor Tableと保護モードでのセグメントレジスタ


セグメントレジスタに値を入れる
e.g)

mov bx, SysDataSelector
mov ds, bx

保護モードでは16bitのセレクトレジスタと64bitのディスクリプタレジスタがあるが
ds内の数字をOffsetとしてGDTからLimitとBase Address等を取得。それをそのまま、ディスクリプタレジスタに入れる。
また

lea esi, [ds:msgPMode] (msgPModeは0x65)
とすれば、
0x65 + (dsのディスクリプタレジスタに保存されたBaseAddress = GDTのx番目のBaseAddressField)の計算となる。
ここで、BaseAddressが0x10000とすると、
リニアアドレスは0x65 + 0x10000 = 0x10065となる。


Global Descriptor Table http://wiki.osdev.org/Global_Descriptor_Table
Segmentation http://wiki.osdev.org/Segmentation