はりぼて日記
2007 | 01 | 02 | 03 | 04 | 05 | 07 | 08 | 10
2006 | 11 | 12
3月 24 (土曜日) 2007
23:48
4日目4
 
P89。



むむ? 一瞬、



「え〜? なんで eflags=io_loadeflags(); なんて処理してんだよぉ。イジるのは第9ビットだけじゃん。そんなの、andやorでやればいいのにわざわざ変数に丸ごと記憶なんてさぁ。ふっ!Kもヤキが回ったかな?」



なーんて生意気なこと思ったのですが・・・



''あ〜〜〜〜!''オイラ馬鹿だ!そうだよ!そもそもCにはレジスタそのものを、しかもレジスタ内に読み込む命令なんてねーーーじゃん!!」



・・・と、こういうお恥ずかしいことに気がつきました・・・



ちなみにこういうの、オイラのお仕事の業界では「知ってるボケ」と言います。



人間、まったくの素人の時は、まずそもそも「発想」をするほど知識がありませんし、また解らないことが恥ずかしいとも考えています。さらに、解らないんだからよく勉強しなきゃ!とも考えます。



・・・しかし、少し解ってくると、やたら「ちょっと知っている」ことがカッコイイこと、エライことだと錯覚を起こし始めます。さらに、なまじっか知識が身についてくると「発想」を行う材料がそろって来るためか、「発想・判断」をしようしようと考えるようになります。(これが落とし穴!!)



自動車の運転なんかでもありますよね?「免許取って一年間は、コスるアテるはあっても事故は起こさない。一番事故を起こすのは、1年目以降だ!」みたいな。



変に手馴れるをしないようにしてかないと。勉強なんですから。
 
name: @Guest  Comment:
23:14
4日目3
 
・・・ふむ!



しかし、多くのCの教科書では、やっぱり char a[10] は配列だとしているなぁ。



こんなことしてみた。



int a[10];



a[0] = 1;

a[12] = 30;



これがおかしいのはよーく理解できるけど、なんと、これ、まったくエラーなく通ってしまったんだよねコンパイル・・・



こういう整理でいいのかな??



  • char a[10]は配列でもなんでもない。

  • char *p;p + 1、p + 2 ・・・と同じ意味でしかない。

  • 但し、こうすると、少なくとも p+0〜p+9までのメモリへは、誰も書かなくなる





この理屈だと、上記のヘンテコなくせにエラーが出ないのも解る。





  • char a[10] は、この範囲を他に使わせないというだけ

  • a[12]への代入はおかしな結果を招くだろう

  • しかし、別に char *p;p = p+11;というのは、やってはいけない処理ではない

  • よってエラーにはならない。(もちろん動作はおかしくなるだろうが)





はっはぁ・・・・これなら筋は通るんじゃないかな???

 
name: @Guest  Comment:
22:54
4日目2
 
・・・うおぉぉぉ・・・・・



P82に出てくるポインタの応用の例。これがツルツルっと理解できる!!!

自分でも信じられない。なぜそう書かれているのかがみんな解る!!!



P83の、 p[i]なんて配列でもなんでもないってのも、解る!理解できる!



ポインタ型キャストを自分なりにまとめておいた成果か!? はたまたこれがKマジックか!?



・・・いやここは素直に一発、hideyosiさんは天才である!つーことにして悦にはいることにしましょ〜か!!!!



  orz     ←我に帰った

 
name: @Guest  Comment:
22:00
4日目
 
4日目〜。



うーん。P71のforの解説のところ。ループ変数の初期化(i=0xa000)の部分だけど、「ここだけはいかなる場合も実行されると・・・

で、forの内部( {}の中 )は、条件次第では一度も実行されないこともあると。



これちょっとおもしろいな。ほんとかどうかためしてみよう!(あ〜・・・また脇道にそれてしまった・・・こういうのが好きなのかなオイラは・・・)



たとえばこんな関数を妄想。





#include

int main(void){

int i;

int ii;



i = 123;

ii = 0;





for(i = 0;i < 5;i=i++){

ii = ii + 1;

}



printf("data is %d\n",ii);

printf("Loop is %d\n",i);

}





実行すると、「date is 5、Loop is 5」と表示される。つまり、{}の内部は5回繰り返されているよね?

これを意地悪して、for(i = 0;i = 0;i=i++) なんてしちゃう。

これだと、一回もループしないで終わっちゃうはず。結果は・・・



「date is 0、Loop is 0」



なあるほど!。iiが一回もループしてないから0のまま。でも、iはこの時点で0になってるよね。(初期値の123からちゃんと書き換えられている)

 
name: @Guest  Comment:
21:03
3日目
 
3日目まで終了〜。



しっかしそれにしても、この3日目の最後。アセンブラで関数を作っちゃってそれをCから呼ぶ。なんたってこれがすごい!。

(これをこういうふうに説明することにどれほどの価値があるのか理解できる人は少ないんじゃないかな・・・)





 
name: @Guest  Comment:
16:05
2日目
 
あっれぇぇ????

P36界隈の「桁指定」の理解と整理がどうもオイラあやしいぞ・・・

(うはー。なんて初期な部分で・・・なっさけね〜)



そんなわけでもう一度ここで整理・・・



あークソ。やっぱオイラの理解はちょっとおかしい!(これじゃ間尺に合わん!)
 
name: @Guest  Comment:
16:02
1日目
 
おっしゃ。ここはトントン〜と進んで・・・
 
name: @Guest  Comment:
14:02
0日目
 
0日目〜。

さすがにここはサラリと流すつもりだったけど、いざ読んでみると改めて「なるほど!」と思うことも実に多いですねぇ〜。



たとえばP8。「最適化がアダとなることもあります」。これ、もちろん最初の時も読んでたはずなんだけど、たぶん意味がわからなかったので頭に残ってなかったんだろうなぁ。(そう!概念や抽象論ではなく、「実際に」アダになった例を一度見てますからねぇ。コッチは。)(^^
 
name: @Guest  Comment:
3月 21 (水曜日) 2007
22:29
Ζ はりぼて日記
 
新日記!その名も

ゼータ はりぼて日記




えーっと。いやまあその・・・(^^;

2巡目スタートってーことで。



OSCも終わったみたいだし、はやくFDアクセスを実現したい。だからこその、「急がば廻れ」ということで。



前回棚上げしていた部分や、理解していたつもりだけど的外れだったことがけっこう出てきてしまったので。
 
name: @Guest  Comment:
14:42
他OSでもはりぼてが楽しめる!
 
チャットによくいらっしゃるエラリーさん。聞けばメイン機種はMacだとか。



当然だけど、黒猫本の想定はWin32環境。無理だよね・・・・



なーんて思ってたけど、よーく考えると、今のMacの頭はインテル。またMacOS Xは事実上BSD系すなわちUNIX系。こりゃ可能性はないもんか??。さらにあっきぃーさんがMacのノートブックを入手したとのこと。こりゃやってみるっぺ〜!!!!



そんなわけでFreeBSDを導入し、ヘコヘコとtolsetの移植開始。



途中何度も挫折しかかったけど、あっきぃさんやbaysideさん、そしてKタンの手により、ほぼ90%の移植が完了。FreeBSD・Linuxはもとより、MacOS X上でもコンパイルが可能になりました。



肝心のはりぼてOSですが、Makefileの変更のみ(これは重要。ソースを改変したら学習の意味がない!)で、1日目〜30日目の全てのコンパイル&動作の確認ができました。



もうすぐ全てのパッチ等をまとめて一気に公開が出来そう。



特にあっきぃさんによる、MaxOS X上での動作はとても大きな意味がありますよね。おそらくこれからさらに、あっきぃさん、エラリーさんによってデータが出てくることでしょう。こりゃ楽しみ!



マック使いのハリボティスト、カモ〜ン!! 
 
name: @Guest  Comment:
1 2 3 4 5 (6) 7 8 9 10 11 12 13 14 » 

PopnupBlog V3 Denali created by Bluemoon inc.