mozyのかきおき

mozyの読書感想文や思考置き場

30日でできるOS自作入門【17日目】

f:id:mozy_ok:20181130220523p:plain

概要

これはMozyの1人アドベントカレンダー 2018 の17日目の記事です。

adventar.org

書こうとした経緯は、こちら

mozy-ok.hatenablog.com

今日の内容

  • ポインタをどんどん応用していく

今日やったこと

  • プログラムをどんどん書き換えていく
    ポインタの知識を応用すると、こんな感じに書き換えもできるし

bootpack.c

p = (char *) 0xa0000; /* 番地を代入 */

for (i = 0; i <= 0xffff; i++) {
    *(p + i) = i & 0x0f;
}

こんな感じにもできるな

p = (char *) 0xa0000; /* 番地を代入 */

for (i = 0; i <= 0xffff; i++) {
    p[i] = i & 0x0f;
}

p[i] って記述は別にpって配列のi番目って意味じゃないことはこうやってアセンブラぽく進めると理解できるよね。
p[i]*(p + i)と同じ意味になるので別に省略する書き方なだけでそれ以上でも以下でもないのだ。
p[0]*pと同じって考えると理解しやすいかもね。
あと、足し算はもちろん順序を変えても問題ないので、p[i]i[p]と同じになります。
こうなると、p[i]は pという配列のi番目って表現が使えないのはわかりますよねぇ。経験が長いエンジニアでも間違えて理解しているところな気がするここら辺。

ハマりポイント

特になし。

知ったこと

アセンブラからたどったことによってどんどんC言語の知識がアップデートして補強されていくぞ!