CAP-X

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年)

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。