CAP-Xとは
CAP-Xは、かつて
情報処理技術者試験、特に第二種
情報処理技術者試験(現在の
基本情報技術者試験)の
プログラミング能力試験で用いられていた
アセンブリ言語です。受験者が得意な言語を選択できる制度のもと、特定の言語に精通した
プログラマが有利になる状況を避けるために、この言語が採用されました。
概要
CAP-Xは、実在しない仮想計算機アーキテクチャであるCOMP-X上で動作する
アセンブリ言語として設計されました。これにより、特定の
コンピュータアーキテクチャに精通している受験者が有利になることを防ぐ意図がありました。1977年以降、第一種
情報処理技術者試験ではCAP-Xを使用した問題が必須となり、その重要性が増しました。しかし、1986年には後継のCASLにその役割を譲り、CAP-Xは過去のものとなりました。
CASLへの移行では、
ワード長などの基本的なアーキテクチャは変更されませんでしたが、レジスタ間の演算が可能になるなど、命令の種類が増え、より高度な
プログラミングが可能になりました。
COMP-Xの仕様
COMP-Xは、データ
ワード長が16
ビット、
メモリアドレス長も16
ビットの
コンピュータです。特徴的なのは、アドレスがバイト単位ではなく
ワード単位で付与される点です。
ビットの番号付けは最上位
ビットを0番、最下位
ビットを15番としています。バイト単位の処理の概念がないため、
エンディアンは規定されていません。また、入出力の概念がなく、プログラムとデータはメモリに格納され、実行結果はメモリから読み取ることで確認します。このため、入出力命令は存在しません。
扱う数値は整数のみで、2の補数表現を採用しています。
レジスタ構成
COMP-Xには以下のレジスタがあります。
汎用レジスタ(GR0, GR1, GR2, GR3): 16
ビットで、算術演算や論理演算に使用。GR1、GR2、GR3はインデックスレジスタとしても使用可能。
基底レジスタ(BR): 実効アドレスの上位8
ビットを格納。下位8
ビットは常に0。
制御カウンタ(SC): 次に実行する命令のアドレスを格納(プログラムカウンタ)。
条件コードレジスタ(CC): 演算結果に応じて1または0がセットされる1
ビットレジスタ。
命令語の構成
命令語は1
ワード(16
ビット)で構成され、OPフィールド(4
ビット)、GRフィールド(2
ビット)、XRフィールド(2
ビット)、ADフィールド(8
ビット)からなります。OPフィールドは命令の種類を表し、GRフィールドは演算で使用するGRの番号を指定します。XRフィールドはアドレス修飾に使用するGRの番号を指定し、ADフィールドはアドレスの下位8
ビットを指定します。
実効アドレスは、BRの上位8
ビットとADフィールドの下位8
ビットで構成されます。XRフィールドが0以外の場合は、指定されたGRの下位8
ビットとADフィールドの値が加算され、結果の下位8
ビットが実効アドレスの下位8
ビットとして使用されます。
命令コード一覧
HJ (0x0): halt and jump
SCに実効アドレスを入れ、プログラムを停止。再開時にはそのアドレスから実行。GRフィールドは無視。
JNZ (0x1): jump if GR is not zero
GRフィールドで指定されたGRの内容が0でなければ、実効アドレスへジャンプ。
JC (0x2): jump on condition
GRフィールドの値に応じて条件分岐。00なら無条件、01ならCC=1のとき、10ならCC=0のとき、11なら常にジャンプ。
JSR (0x3): jump to subroutine
GRフィールドで指定したGRに現在のSC+1を格納し、実効アドレスが指す
ワードの内容をSCとBRに格納(サブルーチン呼び出し)。
SFT (0x4): shift
GRフィールドで指定されたGRの内容をシフト。XRフィールドでシフト方向、ADフィールドでシフト
ビット数を指定。算術シフト。
LAI (0x8): load address immediate
実効アドレスの下位8
ビットを、指定GRの下位8
ビットに格納。
ADD (0xA): add
指定されたGRの内容とメモリの内容を加算。結果をGRに格納。CCレジスタに演算結果の符号を格納。
SUB (0xB): subtract
指定されたGRの内容からメモリの内容を減算。結果をGRに格納。CCレジスタに演算結果の符号を格納。
LD (0xC): load
メモリの内容を指定されたGRに格納。
ST (0xD): store
GRの内容をメモリに格納。
AND (0xE): and
指定されたGRの内容とメモリの内容の論理積を計算し、GRに格納。
EOR (0xF): exclusive or
指定されたGRの内容とメモリの内容の排他的論理和を計算し、GRに格納。
CAP-Xの記述形式
CAP-Xは1行にラベル、命令コード、オペランドを記述します。ラベルは省略可能で、3文字以内の英大文字と数字の組み合わせです。オペランドは「g, n, x」の順に記述され、それぞれGRフィールド、ADフィールド、XRフィールドに対応します。xフィールドは省略可能です。
擬似命令
CAP-Xには以下の擬似命令があります。
START n: プログラムの開始アドレスを指定。
END n: プログラムの終了と実行開始アドレスを指定。
CONST h: 16進数hをメモリに格納。
RESV n: n
ワードの領域を確保。
ADCON n: アドレス定数を定義。
CAP-Xの学習
CAP-Xは、その登場初期には参考書がほとんどなく、試験で配布される仕様書が唯一の情報源でした。COMP-Xが仮想的な
コンピュータであるため、実際の実行環境がなく、学習者は紙と鉛筆でシミュレーションを行う必要がありました。
このような状況下で、明石ミニコン研究会は雑誌「I/O」で解説記事を連載し、読者が提出したプログラムをミニ
コンピュータOKITAC-4300上で動作するCAP-Xシミュレータで実行し、結果を返送するというサービスを提供しました。このシミュレータでは、CAP-Xにはない入出力命令(READとWRITE)が追加されていました。
まとめ
CAP-Xは、
情報処理技術者試験における
プログラミング能力を測るために開発された
アセンブリ言語であり、仮想計算機COMP-X上で動作しました。特定のアーキテクチャに偏らない公平な試験を実現するための工夫が凝らされていましたが、時代とともにCASLへとその役割を引き継ぎました。
参考文献
赤松徹(著)、『CAP-X入門』工学社(1980年)