TOPに戻る
▼Processor
プロセッサの初期化
┣ BISTとは?
┣ CS:IPレジスタの
┃ 用途と初期値
┣ BIOS〜OS起動
┣ マスターブート
┃ レコード1
┗ マスターブート
レコード2
Copyright(C) 2001-2002.ugpop. All rights reserved.
■ CS:IPレジスタの用途と初期値 ■
前回はBIST(Built In Self Test)について解説を行ないました。
プロセッサの電源投入直後は自己診断(BIST)が行なわれ、結果
がEAXというプロセッサ内部のレジスタに格納されるのでした。
今回は、BIST完了後にプロセッサが何を行なうのか解説を行な
います。
BIST完了後には、プロセッサ本来の仕事である命令の実行を開
始します。
命令の実行ってどんな事をするの?
という方の為に、プロセッサが行なう仕事についてちょっと基
本的な事を覚えましょう。
みなさんご存知のように、プロセッサというのは、ある場所に
格納されている命令を実行する為の物です。
命令が無ければプロセッサは何も動作しません。
一般に、命令の集まりの事をプログラムといいます。
プログラムは通常はメモリの中に格納されており、メモリ上の
命令を順番に実行していく事で処理が行われます。
以下に簡単な計算を行って答えを画面に表示するプログラムが
メモリに格納されているイメージを示します。
メモリ
┌──────────┐
│1.1+1を計算 │
│ ̄ │
│ │
│ │
│2.答えを画面に表示│
│ ̄ │
│ │
│ │
│3.2+2を計算 │
│ ̄ │
│ │
│ │
│4.答えを画面に表示│
│ ̄ │
│ │
│ │
└──────────┘
上の例の場合、プロセッサは「1番〜4番」まで順番に処理を
行っていきます。
以下にプロセッサがメモリから命令を読み出して処理を行なっ
ている図を示します。
先ほどの図の右半分にプロセッサの図が追加されただけです。
プロセッサ
メモリ ┌───────────────┐
┌──────────┐ │ 処理開始 │
│1.1+1を計算 ├──┼→1+1を実行 │
│ ̄ │ │ │ │
│ │ │ │ │
│ │ │ ↓ │
│2.答えを画面に表示├──┼→答えを画面に表示 │
│ ̄ │ │ │ │
│ │ │ │ │
│ │ │ ↓ │
│3.2+2を計算 ├──┼→2+2を実行 │
│ ̄ │ │ │ │
│ │ │ │ │
│ │ │ ↓ │
│4.答えを画面に表示├──┼→答えを画面に表示 │
│ ̄ │ │ │
│ │ │ │
│ │ │ │
└──────────┘ └───────────────┘
この時、プロセッサの内部では、「1番目の処理を行なって」
「次に2番目の処理を行なって」・・・というようにメモリ上
の何番目の命令を実行するのかを示す物が使用されています。
これを「PC(Program Counter)」と呼んでいます。
一般的なプロセッサの場合PCと呼ぶのですが、インテルプロセ
ッサの場合はIP(Instruction Pointer)とも呼びます。
このPC(=IP)もプロセッサ内部のレジスタの1つです。
以下にプログラムカウンターの記述を追加した図を示します。
プロセッサ
┌───────────────┐
│ │
│ 処理開始 │
│ │何番目を処理 PC │
│ │するか参照 ┌───┐│
メモリ │ │←─────┤ 1 ││
┌──────────┐ │ ↓ └───┘│
│1.1+1を計算 ├──┼→1+1を実行 │
│ ̄ │ │ │ ┌───┐│
│ │ │ │←─────┤ 2 ││
│ │ │ ↓ └───┘│
│2.答えを画面に表示├──┼→答えを画面に表示 │
│ ̄ │ │ │ ┌───┐│
│ │ │ │←─────┤ 3 ││
│ │ │ ↓ └───┘│
│3.2+2を計算 ├──┼→2+2を実行 │
│ ̄ │ │ │ ┌───┐│
│ │ │ │←─────┤ 4 ││
│ │ │ ↓ └───┘│
│4.答えを画面に表示├──┼→答えを画面に表示 │
│ ̄ │ │ │
│ │ │ │
│ │ │ │
└──────────┘ └───────────────┘
命令を1つ実行する度毎にPC(Program Counter)を参照してい
ます。
PCは1つの命令を実行し終わると、自動的にカウントアップさ
れていきます。
このPCを参照するのと、1つの命令の実行完了毎にカウントア
ップしていくのは、全てプロセッサがハード的に行なってくれ
ます。
これはプロセッサの仕様です。
さて、一般的なプロセッサの場合はこの「PC」を参照してメモ
リ上の何番目の命令を実行すれば良いか分かるのですが、イン
テルプロセッサの場合、もう少し複雑になります。
インテルプロセッサの場合、メモリ上の場所を指し示すのにIP
(Instruction Pointer)ともう1つ「CS」(Code Segment)とい
うレジスタが使用されます。
電源を入れた直後のプロセッサは旧いプロセッサとの互換性を
保つ為に16ビットモードで動作しています。
この場合、メモリ上の何番目かを指し示す為に「CS」は次のよ
うに「IP」と組み合わされます。
┌────┬────┐
│ CS │ IP │
└────┴────┘
例えば、「CS」が1を示していて「IP」が0を示していた場合
は以下のように表されます。
CS IP
┌────┬────┐
│0001│0000│
└────┴────┘
この時、インテルプロセッサはメモリ上の10000番目の命令を
実行しようとします。
ここまでは良いでしょうか?
CS(Code Segment)の値とIP(Instruction Pointer)の値を単純
につなぎ合わせているだけですね。
では電源投入直後のCSとIPを見てみましょう。
電源投入直後のインテルプロセッサのCSとIPの初期値は以下の
ようになっています。
CS IP
┌────┬────┐
│FFFF│FFF0│
└────┴────┘
つまり、プロセッサはFFFFFFF0番目の命令を実行しようとしま
す。
このFFFFFFF0ですが、この表し方は16進数といってコンピュ
ータが処理しやすい表現形式です。
ちょっとこれでは分かりにくいので、人が見て分かりやすいよ
うに10進数に表現し直します。
上のCSとIPの初期値を10進数で表現すると、4294967280とな
ります。
つまり、プロセッサは電源投入直後に42億9496万7280番目の命
令を実行しようとします。
うーん。とてつもなく大きな数字です。
メモリ量を表す単位に直すと約4ギガ番目となります。1ギガは
1メガの1000倍です。
みなさんが使っているパソコンの中でこんなにメモリを搭載し
ているパソコンはまずないでしょう。
物理的に不可能です。
では、この「42億9496万7280番目」というのはどこを表してい
るのでしょうか?
また、こんな所に命令が存在しているのでしょうか?
続きは次回に行ないます。
←前へ戻る ▲このページの上へ 続きを読む→