はりぼて日記
2007 | 01 | 02 | 03 | 04 | 05 | 07 | 08 | 10
2006 | 11 | 12
3月 25 (日曜日) 2007
16:31
6日目
 
6日目〜。



ふむ。makeの説明はトントンと進んで・・・



P124のdsctbl.cの部分。なんと!中ボスだ!!!



(デェ〜ン・・デデデッテッテッテ♪デンドリレンレリレ〜ン♪)by 杉山こういち





ここは、難しくはないんですよねぇ。ややこしくて煩雑なだけ。なので、初めて読まれる人は、「とにもかくにもいくつかあるGDT設定用のパラメータ(10バイト必要)を、むりやり8バイトに押し込んでいるだけ」っていう理解にして進めちゃうのがいいかも。(意外と、後でもう一回読んだりするとツルツルっと解るものですよ(^^ )



 
name: @Guest  Comment:
16:16
5日目3
 
5日目終了〜



・・・さてここで、ちょっとした疑問。

P116で、セグメント1とセグメント2の設定をしてる。で、セグメント1は、0x0〜0xffffffffまで。すなわち、i386がアクセスできる全てのメモリを設定してるよね?



・・・ということは、たとえばそれ以降、どんなセグメントを宣言しても、それは「セグメント1と重複している」わけだけど、これはいいのかな???



セグメントはメモリを好きな大きさに仕切り、先頭を0番地扱いできる便利な機能だけど、これがなんのためにあるのかって言えば、それは「メモリのダブルブッキング」を起こしてシステムがおかしくならないようにするため。



たとえばその後は、セグメント3は0x0100〜0x0200、セグメント4は0x0201〜0x0300という設定をしたとする。プログラムAをセグメント3で。プログラムBをセグメント4で実行させれば、AとBがメモリの重複を起こすことはない。



で、ここで、プログラムしているオイラがバカなので、セグメント5を、うっかり0x0150〜0x0250に設定しちゃった。さらにそこを使って、プログラムCを動かしちゃった!



結果は当然のごとく、システムすっ飛び。まあ、それはいい。<良くないが・・・



その場合、たとえば設定時に、CPUから「バカたれ!重複してるぞ!」というようなエラーや警告が出ることはないって理解でいいのかな?(そうなんだろうなぁ。現に重複しているわけだし)



つまり、

・セグメントでちゃんと分けておけば、重複は起きない!

・「ちゃんと分ける」のはプログラマの仕事

・「ちゃんと分け」をミスれば32bitだろうとプロテクトモードだろうと逝ってしまう!



ってことでOKなのかな????

 
name: @Guest  Comment:
15:37
5日目2
 
わーい。あった!これこれ!



P102。下のソース。これが面白いよね。p[3]とかやってるけど、このソース内には、どっこにもp[7]なんて宣言はない!。でも使える。使えるだけじゃなくて、ちゃんと問題なく動作もしちゃう!!



これがなによりも、p[x]は配列でもなんでもないっていう証拠。

また、p[3]なんてのは、単に char *p;p=p+3;*p を、面倒なので短く書いただけに過ぎないってことが解る!





おぉ〜っと!これ重要。メモメモ・・・



 externはソース以外で準備したデータだという宣言



(これ利用して、ボタンだのタイトルバーだののデータを一まとめにしたら見た目のカスタムやりやすそうだな・・・)





むむむ!セグメンテーション!

これ、幸いオイラは1巡目で理屈の理解だけはできたんだけど、確かに今みてもむずかしいよね?

自分の理解というより、「人に説明する・教える場合、なんて言えばいいんだろう?」って考え込んじゃう。
 
name: @Guest  Comment:
13:55
5日目
 
5日目〜。



P100の付近。うんうん。思い出すなぁ。この、「構造体をポインタ化しちゃえばまるでデータベースのごとくメモリ内部を参照できる」という手法。(まさかこれが後にFDのFATの読み込み処理に活躍するとは)



おっと!。ここ重要だね。(ちょっと忘れてたのでメモメモ・・・)



・構造体をポインタ化すると当然参照は*が必要(*pが値になるのと同じ)

・ポインタ化していない構造体の内部を覗くには、構造体名.内部変数 となると。

・で、今回はポインタ化したので構造体名に*が付いて、*構造体名.内部変数の形になると。(たーんじゅん!)

・でもC言語ってバカだから、これだと勘違いするらしい

・なので、(*構造体名).変数名って書いてやらないといけない(オバカな言語だ〜)

・基本的には、これだけ知ってればじゅーぶん!!!!

・・・・ただし、この*を使うパターンは書くのが面倒なので

・なので、構造体名->変数名という、「省略書き」がある



と・・・







 
name: @Guest  Comment:
04:18
4日目番外1
 
積み残しの「桁指定」。だいたいまとめることができた。



たぶんこれで合っているはず!



 
name: @Guest  Comment:
00:03
4日目5
 
4日目終了〜!



・・・しかしこうして改めて見ると、4日目、なかなかのボリュームだなぁ。(重要な基礎やテクニックもかなり入っていると思う)



逆に言えば、「たかだか画面に四角を三つ書く」ことがどれほど大変なことなのかってことだよね?



 
name: @Guest  Comment:
(1) 

PopnupBlog V3 Denali created by Bluemoon inc.