CASLとは、2000年までの情報処理技術者試験において使用されていたアセンブリ言語の名称である。2001年からは後継となるCASL IIが利用されている。
CASLは、情報処理技術者試験の試験課題として独自に開発された言語であり、COMETと呼ばれる架空の演算装置に対応している。一般的に、アセンブリ言語は機械語とほぼ1対1で対応しており、ハードウェアの設計に対する依存性が強い。このため、実在するハードウェアやアセンブリ言語を試験の題材とするならば、試験の公平を期することができないという問題が生じる。CASLやCOMETは、既製品に依拠せず完全に独自に開発されたため、公平さの維持を実現している。
2001年の試験からCASLはCASL IIへと改定されている。同じくCOMETも仕様変更を経てCOMET IIとなっている。ちなみに、試験の実施元であるIPA(情報処理推進機構)のWebサイトでは、CASL IIのシミュレータを無償でダウンロード提供している。
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2026/03/05 03:20 UTC 版)
|
|
出典は列挙するだけでなく、脚注などを用いてどの記述の情報源であるかを明記してください。
|
CASL(キャスル)は、情報処理技術者試験におけるプログラミング能力試験のために、CAP-Xの後継として1986年(昭和61年)に仕様策定したアセンブリ言語である[1]。
第二種情報処理技術者試験(現・基本情報技術者試験)にはプログラミング能力試験という試験がある。この試験は幾つかのプログラミング言語別に分かれており、受験者はそれぞれが最も得意とするプログラミング言語による試験を選択することで、特定のプログラミング言語を熟知しているプログラマが有利になることを防いでいる。
この試験で使用するアセンブリ言語としてCASLが開発された。アセンブリ言語はハードウェアのアーキテクチャとの関連性が強い。特定の実在するアーキテクチャを試験に採用した場合、それを利用する受験者に有利に働いてしまうという問題がある。このため、実在するどのアーキテクチャとも関連性がない単純化した仮想の計算機COMP-Xと、そのアセンブリ言語の仕様CAP-Xを策定することで、この問題を解消した。その後継の仮想計算機をCOMETと呼び、アセンブリ言語の仕様をCASLと名付けた。
COMETは、最低限の機能のみを実装した仮想機械であり、そのためCASLも非常に簡素なアセンブリ言語となっている。初期の仕様ではCOMETの各機械語命令を除けば4種類の擬似命令と3種類のマクロしかない。COMETとCASLの仕様は試験実施者が予め発表するほか、試験問題中にも示し、試験中にその場で仕様を理解し解答することも可能である。基本情報技術者試験に出題されるコンピュータ言語の中では、同じく架空のソフトウェアである表計算ソフト[注釈 1]と並び習得しやすい言語と言われることが多い。
2001年に第二種情報処理技術者試験が基本情報処理技術者試験に改訂された折りに、COMETとCASLの仕様改訂も行われており、改訂後はそれぞれCOMET II、CASL IIと呼ばれる。なお情報処理技術者試験センターから、Java環境で動作するCASL-IIシミュレータが学習用に提供されている。
情報処理技術者試験の開始当初には、同様にCAP-XおよびCOMP-Xが用いられていたが、主にマイクロプロセッサの登場と普及に伴う主流アーキテクチャの変化にともない、変化に対応した新しいアセンブリ言語および仮想計算機としてCASLおよびCOMETが定義された。
ここでは、COMET IIに改訂される前のCOMETの仕様について述べる。COMET IIとの違いについては#仕様改訂による変更点を参照されたい。
COMETは、1ワード長が16ビットの固定長語で表現され、処理の対象となるデータは全てワード単位で行われ、バイトマシン(バイトアドレス)ではなくワードマシン(ワードアドレス)である[注釈 2]。1ワードを構成するビットの並びは、最上位ビットを0番、最下位ビットを15番とする(COMET IIで変更されている)。制御方式は逐次処理方式であり、命令語は2ワードの固定長で表現される。扱うデータは算術データ、論理データ、文字データの3種類がある、算術データは 1ワードのデータを2の補数表現で表現し、論理データは符号無し整数として扱う。文字データはJIS X 0201規格を採用している。
レジスタは次の通り。
前述の通りCASLは命令語を2ワードの固定長として扱う。命令語の構成は先頭から順に OPフィールド(8ビット)、GRフィールド(4ビット)、XRフィールド(4ビット)、ADRフィールド(16ビット)のデータアドレスと続く。COMETの前身であるCOMP-Xと同様の構成だが各フィールドのビット数が違うことに注意されたい。
OP フィールドは命令の種類を表すコード(オペコード部)であり、初期のCOMETでは23種類の命令が用意されており、COMET IIでは 28種類に拡張されている。GR フィールドでは演算で使用する GR の番号が指定される。分岐命令やスタック操作の場合は GRを指定することはないので、これらの命令ではこの部分は無視される(何を指定しても問題ない)。XR フィールドではアドレス修飾を行う GR の番号が指定され、内容が0の場合はGR0を意味するのではなく、GR によるアドレス修飾をしないGRフィールドと同様、アドレス修飾を持たない命令においては無視される。ADRフィールドは処理対象となるアドレスが指定され、このアドレスにXRフィールドのアドレス修飾を施したものが実行アドレスとして使用される。
なお、COMP-Xと異なり、COMETでは命令の具体的なオペコードは定義されていない(定義の後に、定義の一部でないと明示のうえで参考資料として示されている)。
命令コードと各命令の概要は以下の通り。なお、書き方の[]は省略可能を意味している。
CASL は1行に、ラベル、命令コード、オペランドの順に記述する。ラベルは記述しない場合もある。ラベルは3文字以内で、先頭は英大文字、それ以外は英大文字または数字である。オペランドでアドレスを指定する際に数値の代わりにラベルを記述できる。
CASL には次の擬似命令がある。
また、CASLには入出力を表すマクロ命令が用意されている。内容は以下の通り
2001年のCOMET II、CASL IIの改訂によってCASL COMETに比べていくつかの変更が行われている。具体的には以下の通り、
COMET IIに追加された命令は以下の通り
CASL IIに追加された命令は以下の通り
以下は CASL II による再帰呼び出しを用いてハノイの塔を解くサンプルコードの一例である。
; ハノイの塔を解くプログラム
MAIN START
LD GR0,N
LD GR1,A
LD GR2,B
LD GR3,C
CALL HANOI ; hanoi(3, A, B, C)
RET
; hanoi(N, X, Y, Z)
HANOI CPA GR0,=1 ; if N == 1 then
JZE DISP ; move it, return
SUBA GR0,=1 ; N - 1
PUSH 0,GR2 ; swap GR2 GR3
LD GR2,GR3
POP GR3
CALL HANOI ; hanoi(N-1, X, Z, Y)
ST GR1,MSG1
ST GR2,MSG2 ; now GR2 holds Z
OUT MSG,LNG ; 'from X to Z'
PUSH 0,GR2 ; rotate registers
LD GR2,GR1
LD GR1,GR3
POP GR3
CALL HANOI ; hanoi(N-1, Y, X, Z)
PUSH 0,GR2 ; restore registers
LD GR2,GR1
POP GR1
ADDA GR0,=1 ; also N has restored
RET
DISP ST GR1,MSG1 ; 'from X to Z'
ST GR3,MSG2
OUT MSG,LNG
RET
N DC 3 ; 輪の総数
LNG DC 11 ; メッセージの長さ
A DC 'A'
B DC 'B'
C DC 'C'
MSG DC 'from '
MSG1 DS 1
DC ' to '
MSG2 DS 1
END
このコードを実行すると以下の結果が得られる(ここで、from A to C は A の一番上にある円盤を C に移すことを意味している)。
from A to C from A to B from C to B from A to C from B to A from B to C from A to C
仮想の言語であるが、試験対策のためシミュレーターが開発されている。情報処理推進機構がWindowsで動作する公式シミュレーターを配布していたが、現在は終了している。