第1章 マイクロコンピュータの命令

マイクロコンピュータの命令

 制御用コンピュータを扱ううえで,アセンブラによるプログラムは必須項目です.

 「アセンブラは難しい」というイメージが先行していますが,ハードウェアさえ理解していればほかの言語と比較し,

(1)文法がシンプルである

(2)異なるCPUでも命令の内容は同じで,また覚え なければならない命令数が少なくて済む

(3)異なるCPUに合わせたイニシャライズ(初期化)が容易に記述できる

(4)処理速度が絶対に速い
のようなメリットがあります.

 逆にデメリットもあり,

(a)関数計算が不得意

(b)整然とした記述を怠ると,製作者本人でもメンテナンスのできないプログラムになる
などあげられます.

 CPUの選定もしかりですが,開発言語の選定もその目的に合ったもの,例えばI/O制御が主体となる制御システムであればアセンブラ,演算が主体となるシステムであれば高級言語とすべきです.

 しかし,演算が主体となるシステムを制御用組み込み型CPUで製作することは,あまり得策とはいえません.その場合は,図1-15のような分散型制御システムを提案します.
 

<図1-15>分散型制御システム

(約4Kバイト)

制御用CPUの命令

 少し話がそれましたが,ここでは制御用CPUがもっている命令を種類別に説明します.説明では,Z80のニーモニックを主に使用します.

 表1-3に,マイクロコンピュータの命令大別表を示します.
 

<表1-3>マイクロコンピュータの命令大別表

(約37Kバイト)

 マクロコンピュータの命令形式とアドレッシング

命令コードとオペランド

 図1-16のように,マイクロコンピュータの命令は,命令コードとオペランドから構成されます.

 
 

<図1-16>命令コードとOPランド

(約8Kバイト)

 

 なお,インテル系(Z80,8086,TLCS-900など)とモトローラ系(68000,H8など)では,ソースとディスティネーションの並びが逆になりますので,注意が必要です.

アドレッシングの方法

 アドレッシングとは,オペランドで指定するデータまたはデータのある場所を示す方法のことです.

 アドレッシング方法は,CPUにより若干異なりますが,次の5種類に大別され,その組み合わせでプログラムを記述します

レジスタ・モードの例

 LD  A,B

 レジスタA,レジスタBなどのように,直接レジスタ名を指定します.アドレッシングに要するクロック数が一番少ない,もっとも効率の良いモードです.

イミディエイト・モードの例

 LD  A,12H

 イミディエイト・データ12Hが直接コードになります.

 この例の第1オペランドはレジスタ・モードで,第2オペランドがイミディエイト・モードです.

直接番地指定モードの例

(1) LD  (1000H),A

(2) JR  mn   ;mnは通常ラベルを使用する

(3) JP  2000H

 操作対象となるアドレスを直接,絶対値または相対値で指定します.

レジスタ間接モードの例

  LD HL,1000H   ;HLレジスタに1000H

               ;をロード

  LD (HL),12H    ;HLレジスタの内容で

               ;間接指定される1000H

               ;番地へ12Hをストア

 1行目はレジスタ・モードとイミディエイト・モード,2行目の(HL)が間接モードです.

インデックス間接モードの例

  LD  (IX34H),A

 レジスタ間接モードとよく似ていますが,インデックス間接モードの場合,ベース指定されたインデックス・レジスタの内容に,ディスプレースメント値が加算された値のメモリ番地が操作対象となります.

命令とアドレッシングの組み合わせ例

 いろいろな命令とアドレッシング・モードがソース,ディスティネーションを問わずに自由に組み合わせ可能なCPUが使いやすいCPUです.

 しかし,Z80の命令体系はAレジスタ,HLレジスタを中心に構成していますから,あまり使いやすいCPUとはいえません.

 リスト1-1は,Z80の各種命令とアドレッシングの組み合わせ例です.
<リスト1-1>Z80の命令とアドレッシング例

(約44Kバイト)


Copyright 2000 武下 博彦

新刊のご案内


Copyright 1997-2001 CQ Publishing Co.,Ltd.