はりぼて日記
2007 | 01 | 02 | 03 | 04 | 05 | 07 | 08 | 10
2006 | 11 | 12
12月 23 (土曜日) 2006
17:18
五日目4
 
五日目 9〜。

セグメンテーションか。えとえと???
これがややこしいんだよなぁ。元来は便利な機能なんだけど。P112の上のほう。
 MOV AL,[DS:EBX]
えーっと。この場合、[]内が示す番地のデータをALにコピーしろと。
で、「DS:EBX」と書かれている場合。32bitになっている現在は、DSレジスタがあらわすアドレス+EBXの値ってことでいいのかな?
たとえばDSが 0x1000。EBXが0x0200だとすると、ALレジスタには0x1200番地の内容がコピーされるって理解でいいのかな。

えーっと。P112の真ん中らへん。わかんね〜なぁ・・・

まてよ? パレットとそっくりだと・・・

こういう意味なのかな?。「セグメントレジスタ」に設定するのは、セグメント番号。このセグメント番号っていうのは単なる番号。つまり、1番・2番・・・・8000番までありと。で、さらに、この1番や2番という番号(数値)はなんにもアドレスとかとは関係ない。単に「何番目か?」っていうだけ。じゃ、セグメントレジスタに、3を設定したとする。その場合、実際には何番地を読み込むのか?。
  「いや〜。3番は0x0100からだよ。あと、4番は0x8000だよ」
って感じで、勝手に好きに設定できるっていう意味なのかな??

あ〜! わかった。そういうことか!!!。つまり、これは単なる表なんだ!。メモリのどこかに、ズラーっと8191個分の表を確保し、そこに実際の開始番地や大きさ等の情報を設定しておくと。なるほどねぇ。

そうなると、たとえばセグメントレジスタに4を設定する。そして0x0100番地を読み出そうとしたとする。その場合、CPUは本当のホントの0x0100番地を読むのではなく、GDT表の4番目を調べる。たとえばここに0x2000が設定されていれば、実際には0x2100番地が読み出されると。そんな感じかな??
たとえばだけど、メモリが1GBあるパソコンだとしよう。GDT表の一番目に、開始番地0x0000・大きさ512MBを設定し、二番目に開始番地0x8000・大きさ512MBを設定すると、このOSではセグメントが2個しか使えない!なんて理屈になると。(実際はシステムで使っている部分とかがあるからそんな単純じゃないんだろうけどね。理屈としてはこんな感じでそ?)

なるほど。この感覚とほぼ同じ感じでIDTがあると。IDTも表って考えていいかな。こっちは「割り込み番号と実際に実行されるプログラムが書いてある番地」ってことね。
ここも、たとえばだけど、全てのIDTに0x5000って書いたとすると、キーボードだろうがマウスだろうがどんな割り込みが起こっても全て同じ動作をするなんていうおかしな状態にすることもできると。

なーるほどねぇ。つまり、GDT(セグメント設定用の表)と、IDT(割り込み時の実行プログラム位置の表)を設置しなくてはならない。で、この二つの表は、空いていれば好きな場所に設定できるわけですな?。

・・・あれれ???
ここでとりあえず終了??
ほ・・・よかった〜。つーわけで、とりあえず五日目終了〜。
 
30日を過ぎたBlogにはコメントできません。

Referer  (1)
15:03
五日目3
 
五日目 〜8 まで終了〜。

ふむ! ここは幸いあまり難しくなかったなぁ。
(とはいっても例によってすこしあやしいんですけどね。(^^; )

・・・嗚呼!それにしても、グラフィックがだんだん出来上がっていくのを見るとつらいなぁ・・・

フォントやマウスや画面デザインをいじりて〜!
 
30日を過ぎたBlogにはコメントできません。
(1) 

PopnupBlog V3 Denali created by Bluemoon inc.