分かりやす〜い
コンピュータ技術情報

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番目」というのはどこを表してい
るのでしょうか?
また、こんな所に命令が存在しているのでしょうか?

続きは次回に行ないます。



←前へ戻る    ▲このページの上へ    続きを読む→