はりぼて日記
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年目以降だ!」みたいな。

変に手馴れるをしないようにしてかないと。勉強なんですから。
 
30日を過ぎたBlogにはコメントできません。
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;というのは、やってはいけない処理ではない
  • よってエラーにはならない。(もちろん動作はおかしくなるだろうが)


はっはぁ・・・・これなら筋は通るんじゃないかな???
 
30日を過ぎたBlogにはコメントできません。
22:54
4日目2
 
・・・うおぉぉぉ・・・・・

P82に出てくるポインタの応用の例。これがツルツルっと理解できる!!!
自分でも信じられない。なぜそう書かれているのかがみんな解る!!!

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

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

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

  orz     ←我に帰った
 
30日を過ぎたBlogにはコメントできません。
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からちゃんと書き換えられている)
 
30日を過ぎたBlogにはコメントできません。
21:03
3日目
 
3日目まで終了〜。

しっかしそれにしても、この3日目の最後。アセンブラで関数を作っちゃってそれをCから呼ぶ。なんたってこれがすごい!。
(これをこういうふうに説明することにどれほどの価値があるのか理解できる人は少ないんじゃないかな・・・)


 
30日を過ぎたBlogにはコメントできません。
16:05
2日目
 
あっれぇぇ????
P36界隈の「桁指定」の理解と整理がどうもオイラあやしいぞ・・・
(うはー。なんて初期な部分で・・・なっさけね〜)

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

あークソ。やっぱオイラの理解はちょっとおかしい!(これじゃ間尺に合わん!)
 
30日を過ぎたBlogにはコメントできません。
16:02
1日目
 
おっしゃ。ここはトントン〜と進んで・・・
 
30日を過ぎたBlogにはコメントできません。
14:02
0日目
 
0日目〜。
さすがにここはサラリと流すつもりだったけど、いざ読んでみると改めて「なるほど!」と思うことも実に多いですねぇ〜。

たとえばP8。「最適化がアダとなることもあります」。これ、もちろん最初の時も読んでたはずなんだけど、たぶん意味がわからなかったので頭に残ってなかったんだろうなぁ。(そう!概念や抽象論ではなく、「実際に」アダになった例を一度見てますからねぇ。コッチは。)(^^
 
30日を過ぎたBlogにはコメントできません。
(1) 

PopnupBlog V3 Denali created by Bluemoon inc.