2012-06-28
12ステップで作る組込みOS自作入門はじっくりと進めています。じっくり進めすぎてあまり進んでませんがまぁいいでしょう。どうやらちまたでは「12ステップ本」と呼ぶらしいので私もこれからはそれで。
さて、2ステップ目でよくわからなかった部分について理解を深めてみました。 これを実行すると、以下のように出力されます。
10
ffff
上記のコードは理解のために切り貼りしているもので、しかもprintfを使っているので意味が無いコードになってしまってます。12ステップ本の中では標準ライブラリ関数も自作していて、printfは複雑なので実装せずに数値を16進表示する関数を作成しています。特に上記の中の
*(p--) = "0123456789abcdef"[value & 0xf];
の部分が何をしているのかよくわかりませんでした。結局ここでは固定で文字列を記述しておくとそれがメモリ上に確保され、そこに対して配列でアクセスする……ということをしているのだと思います。そして0xfとアンド演算をする事で一桁分ずつ処理している…と。
以下のようにコードを改造して意図した通り動いたので解釈は間違っていないと思います。きっと…。 実行するとこうなります。
0123456789abcdef0123456789abcdef
と、ここまではわかったつもりなのですが、以下のコードが動かないのがなんでだかよくわかりません。 実行するとSegmentation fault: 11となってしまいます。
0123456789abcdef123456789abcdef23456789abcdef3456789abcdef456789abcdef56789abcdef6789abcdef789abcdef89abcdef9abcdefabcdefbcdefcdefdefeff
って出ていいんじゃないかと思うんですけどね?やっぱりよくわかっていないようです……。そのうちわかるようになるかな……。
posted with amazlet at 12.06.28
坂井 弘亮
カットシステム
売り上げランキング: 52862
