雑記帳
ここはhideyosiの雑記帳です。テケトーに書き散らしてるだけなので間違っていたりとは普通にしてます。信用度は相当低いことをあらかじめご了承を。またご覧のようにWikiを使ってますが、hideyosi意外は書き込めません。
1: 2007-03-25 (日) 16:52:25 ソース バックアップ No.1 を復元して編集 2: 2007-03-25 (日) 19:50:36 ソース バックアップ No.2 を復元して編集
Line 3: Line 3:
ここは難しくはありませんが、とても煩雑でややこしい部分。 ここは難しくはありませんが、とても煩雑でややこしい部分。
-初めて読む方でもしうまく理解できなかったら、''「とにもかくにも64ビットくらいある設定用の値を、むりやり48ビットに押し込んでいる」''程度に理解して、先に進んじゃうのがいいかも。(それで後でもう一回よく読んでみれば意外とスルスルっと解ることも多いので)+初めて読む方でもしうまく理解できなかったら、''「とにもかくにも合計80ビット分くらい必要なデータを、むりやり64ビットに押し込んでいる」''程度に理解して、先に進んじゃうのがいいかも。(それで後でもう一回よく読んでみれば意外とスルスルっと解ることも多いので)
・・・まあでも、これじゃちょっとあんまりなので、オイラなりの解説〜♪ ・・・まあでも、これじゃちょっとあんまりなので、オイラなりの解説〜♪
Line 17: Line 17:
||C大きさ|C開始番地|C属性|h ||C大きさ|C開始番地|C属性|h
-|h範囲|0x0〜0xFFFFFFFF|0x0〜0xFFFFFFFF|0x0〜0xFFFF| +|~範囲|0x0〜0xFFFFFFFF|0x0〜0xFFFFFFFF|0x0〜0xFFFF| 
-|h必要ビット数|32|32|16| +|~必要ビット数|32|32|16| 
-|h例|0x00230000|0x0000C000|0xA4FD|+|~例|0x00230000|0x0000C000|0xA4FD| 
 + 
 +さて、これを見ると、一つのセグメントに設定しなくちゃいけないパラメータの合計は32+32+16で、合計80ビットが必要になるわけです。 
 + 
 +''しかし!!'' 
 + 
 +これを設定するためのLGDTというレジスタが、なんと48ビットしかないんですよ!!!。 
 +~(これはインテルがそう設計したんだからどうしようもありません) 
 + 
 +そのため、上記の表の「例」の部分みたいに素直に設定できないんです。そのために、値を押し込む(一種の圧縮?)必要があるのです。 
 + 
 +LGDTの48ビット。48ビットってことは、2進数だと0x000000000000000000000000000000000000000000000000とこうなります。(48桁ですね) 
 + 
 +この48桁に上記のデータを分解・圧縮して収めるわけです。こういうふうになります。 
 + 
 +#ref(ldtr1.jpg)