現在Youtubeに注力してますので是非チャンネル登録お願いします!

胡田昌彦のコンピューター系チャンネル

この記事は約2分で読めます。

12ステップで作る組込みOS自作入門はじっくりと進めています。じっくり進めすぎてあまり進んでませんがまぁいいでしょう。どうやらちまたでは「12ステップ本」と呼ぶらしいので私もこれからはそれで。

さて、2ステップ目でよくわからなかった部分について理解を深めてみました。
{{gist ‘3011644’}}
これを実行すると、以下のように出力されます。

10
ffff

上記のコードは理解のために切り貼りしているもので、しかもprintfを使っているので意味が無いコードになってしまってます。12ステップ本の中では標準ライブラリ関数も自作していて、printfは複雑なので実装せずに数値を16進表示する関数を作成しています。特に上記の中の

*(p--) = "0123456789abcdef"[value & 0xf];

の部分が何をしているのかよくわかりませんでした。結局ここでは固定で文字列を記述しておくとそれがメモリ上に確保され、そこに対して配列でアクセスする……ということをしているのだと思います。そして0xfとアンド演算をする事で一桁分ずつ処理している…と。

以下のようにコードを改造して意図した通り動いたので解釈は間違っていないと思います。きっと…。
{{gist ‘3011880’}}
実行するとこうなります。

0123456789abcdef0123456789abcdef

と、ここまではわかったつもりなのですが、以下のコードが動かないのがなんでだかよくわかりません。
{{gist ‘3011909’}}
実行するとSegmentation fault: 11となってしまいます。

0123456789abcdef123456789abcdef23456789abcdef3456789abcdef456789abcdef56789abcdef6789abcdef789abcdef89abcdef9abcdefabcdefbcdefcdefdefeff

って出ていいんじゃないかと思うんですけどね?やっぱりよくわかっていないようです……。そのうちわかるようになるかな……。

12ステップで作る組込みOS自作入門
坂井 弘亮
カットシステム
売り上げランキング: 52862

コメント