自作OS入門(6日目→2日目)
6日目のLGDTレジスタ操作でつまづいた。
LGDTレジスタに6バイトのデータ(2バイト-リミット、4バイト-アドレス)
をセットしなきゃダメってのは理解したけども。
具体的にはp123のアセンブラ記述がしっくり来なかった(2日目の内容忘れた)
ので、もう一度レジスタ関連をまとめてみる。
BYTE - 1バイト
WORD - 2バイト
DWORD ー 4バイト
16ビット(2バイト)レジスタ
AX - アキュムレータ
CX - カウンタ
DX - データ
BX - ベース
SP - スタックポインタ
「[ESP+6]から読み込めば、ちょうどうまく行く」って言うのが理解出来てない。
アセンブラで書いてみたら、「そういうものか!」で納得出来る?
まぁ、ここでのポイントはセグメントのテーブル領域を0x00270000~0x0027ffffに設定したよってことがわかれば8割OKなのかも。
次、セグメントの構造:
セグメント構造体は大別すると3つにカテゴリされる。
セグメントの大きさ:low-2byte, mid-1byte, high-1byte
リミット:20ビット(4GBを表すためにページビットがある)
セグメント属性:12ビット(書き込み禁止・実行禁止なんかを指定する)
セグメントとページの概念と言うか使いかたが「おぼろげ」だけど見えてきた感じ。
時間が出来たら、この辺まとめたいなー