はりぼて日記
2007 | 01 | 02 | 03 | 04 | 05 | 07 | 08 | 10
2006 | 11 | 12
12月 29 (金曜日) 2006
16:03
八日目2
 
八日目 [5]。

ふむふむ。ここで積み残しの解説である「32bitモードに移行」が説明されているのか。なるほど。いろいろと細かい説明があるが、32bitへの切り替えは、まず

 ・全ての割り込みを一旦禁止する。
 ・KBCのおまけ回路(A20GATE)に命令し、1MB以上使えないようにしてあった関所に、「開門〜」をさせると。
 ・さらにCR0レジスタに値をセットすると、保護付き32bitに切り替わる

簡単に言えば、こういうことだね。
で、単に切り替えただけだとセグメントレジスタの使い方が変化してしまうので、これのつじつまを合わせるための処理をすると。

で、最後の処理。これまでは16bitなので、0x0000 〜 0xffff までしかメモリを使えなかったと。(当然これまでは、この範囲内であれこれやり繰りしてた)
しかしこのほど、めでたく32bitになったので、こんな狭い範囲よりもっと大きな範囲が使えるようになったので、そこにメモリの内容をコピーしちゃうわけね。


ここで四日目に生じた私の疑問は解けた。(っというか、確認できた。)
i386CPUは、16bitから32bitに切り替わっても、それまでのメモリの内容は破壊されずにそのまま残っているのか!。つまり、

 ・起動初期。まだ16bit。メモリは0x0000〜0xffffまでしか使えない
 ・この時に、仮に0x1000番地に「20」を代入しておいたとする。
 ・上記いろいろをやって、32bitに移行完了!
 ・メモリは一気に 0x00000000〜0xffffffffまで使えるようになる。(搭載されていれば)
 ・で、このとき 0x00001000番地の値を見ると、やっぱりちゃんと「20」であると!

こういうことでOKのようだ。なるほどねぇ〜。

PS:
こうして見ると、下位互換が宿命とはいえ、インテルのCPUはほんとに複雑でややこしい作りになっているんだなぁと生意気な感想が。
歴史にifは禁物だけど、もしインテルが8086との互換を無視して最初から32bitのCPUを設計し、それが当たっていたら、もっとずっと解りやすくて整合性がとれたものになっていたんだろうなぁ・・・

 
30日を過ぎたBlogにはコメントできません。

Referer  (1)
(1) 2 3 4 5 6 7 8 9 10 » 

PopnupBlog V3 Denali created by Bluemoon inc.