コンピュータ・アーキテクチャ 第8回


電子計算機とマイクロコンピュータ

電子計算機は以下の要素から構成されています(図8.1参照)

処理装置の基本的構成

一度に取り扱うデータの単位は、4, 8, 16, 32, 64 bit などがあります。 今回の例では 8bit のものを示します(図8.2参照)。


アドレスバッファ (address buffer) からアドレスを与えると、 記憶装置はそのアドレスで指定された番地(記憶位置)から 8ビットのデータを取り出し、データバッファ (data buffer) に入れます。

アドレスバッファの容量を 16 bit とすると、最大で 64Kbyte (= 216)のデータを記憶することができます。 記憶装置にデータを書き込むときは、データバッファにデータを 与え、アドレスバッファからアドレスを与えます。

直接アドレス指定命令

直接アドレス指定 (direct addressing) 命令では、メモリのアドレスを 1つ指定して、そのアドレス位置に記憶されているデータ(1byte)を操作 (たとえばAレジスタにコピー)します。

直接アドレス指定命令は3バイトで表現され、 第1バイトが命令の種類、第2,3バイトがアドレスを 表しています(図8.3参照)。


[例題] 50番地と51番地のデータをそれぞれ1000番地と1001番地へ移動する プログラムを作りなさい。
[解答]

    LDA     50        ← 50番地の内容をAレジスタにコピーします
    STA   1000        ← Aレジスタの内容を1000番地にコピーします
    LDA     51        ← 51番地の内容をAレジスタにコピーします
    STA   1001        ← Aレジスタの内容を1001番地にコピーします

LDA命令を実行するときの内部動作 (図8.4参照)
LDA命令は3バイト(命令の種類を表すのに1バイト、アドレスを表すのに2バイト) の大きさで、たとえばメモリ中の 2000〜2002番地に格納されています。 プログラム・カウンタがこの2000番地を指した時に命令が実行されます。

  1. プログラムカウンタの内容がアドレスバッファに与えられます。
  2. これにより LDA を示す命令情報がデータバッファを通して
  3. 命令レジスタに与えられます。 命令レジスタはこれを解読し、続く2バイトを必要とする命令で あることを知ります。
  4. (PCは既に1加算されているので)PCの内容をアドレスバッファに送り
  5. 第2バイトを取り出します。
  6. このバイトは W レジスタに入れられます。
  7. (PCはさらに1加算されているので)再びアドレスバッファを通して 記憶装置に与え
  8. データバッファを通して第3バイトが取り出され
  9. Zレジスタに入れられます。
  10. WZレジスタの内容をアドレスバッファに送れば LDA 命令の アドレス部で指定された記憶装置の内容が取り出され、
  11. データバッファに入ります。
  12. 次にIRの制御によりこのデータはAレジスタに入れられます。

命令は、各レジスタの間で適切なタイミングで適切なバスを通して データを転送することで実行されます。各レジスタの間にはゲート回路 が設けられていて、IRの内容を解読することによってこの転送用ゲート が開閉されます。 計算機はレジスタ間の情報の転送を制御することで動作します。


8080 マイクロプロセッサ

インテルの8bitマイクロプロセッサ。 比較的初期のもので、構造がシンプルで理解しやすいプロセッサです。

レジスタ構成(図8.5参照)


Aレジスタ (アキュムレータ)以外に 8 個 (B, C, D, E, H, L, W, Z) の レジスタを持ちます。 Aレジスタと関連したフラグレジスタ(5bit)の意味は次の通りです。

BC, DE, HL, WZ のレジスタ対をまとめて1つの 16ビットレジスタとして 扱うこともあります。 他のレジスタとしては、命令レジスタ(IR)、プログラムカウンタ (PC)、 スタックポインタ (SP) があります。

Tレジスタは演算するデータを一時的に記憶しておくレジスタで、 外部から命令で直接指定することはできません(W,Zレジスタも同様です)。

アドレスやデータを指定する方法としては、以下のものがあります。

命令

命令の詳細に関しては 表8.1参照。

    HLT   コード 0x76  ... 割込みかリセットがかかるまでCUPの実行を停止する。

8080命令説明書


8080マイクロプロセッサにおける命令の実行

マイクロプロセッサの命令は、命令のバイト数もいろいろで、 アドレス方式も多岐に渡ります。 これらの命令がどのように実行されるかを説明します。

マイクロプロセッサは記憶装置、入出力装置などと組合されて コンピュータを構成する(図8.8参照)。


マイクロプロセッサの制御バスには ~MEMR, ~MEMW, ~IOR, ~IOW の4本があり、 CPU ←→ 記憶装置、 CPU ←→ 入出力装置 の間の 読み出し(R) / 書き込み(W) を制御します(図8.5参照)。

クロック周波数を 2MHz とし、記憶装置の読み出し、書き込みに それぞれ3クロックが必要であるとします。 この3クロックの期間をサイクルと呼びます(図8.9参照)。

読み出しの場合:
    T: アドレスバスにアドレスを与えます。
    T2: ~MEMR に信号を与えます。
    T3: データを得ます。
書き込みの場合:
    T1: アドレスバスにアドレスを与えます。
    T2: ~MEMW に信号を与えつつ、データバスにデータを与えます。
    T3:    々


いろいろな命令を実行するときの動作タイミングを示します。 8080では命令の実行に要する時間は命令毎に異なっていて、 それぞれの命令毎に製造会社から提供されているマニュアルに 記載されています。

上記のように、命令の実行に必要な時間(クロック数)は命令により 異なります。各命令の取り得るアドレス指定、実行に必要なクロック数は CPUのマニュアルに記載されています。

マイクロプロセッサのプログラミング

表8.1に示される機械語のビットパターンを直接人間が書くことは通常なく、

  1. 機械語に対応する記号命令(アセンブリ言語)によってプログラムを書く
  2. CやC++などの高級言語によってプログラムを書く
という方法を取ります。

アセンブリ言語では、表8.1のような記号命令を使い、命令や変数を 記憶するアドレスを記号(ラベル)で参照できます。