午後問題の歩き方 | プログラミング問題 CASLⅡは意外と短時間で学習できる (選択可否チェックリスト付き)


2021-02-16 更新

error

この記事は基本情報技術者試験の旧制度( 2022 年以前)の記事です。
この記事の題材となっている「午後問題」は現在の試験制度では出題されません。 ご注意くださいませ。

午後問題の問 7 ~問 11( 1 問選択)は、ソフトウェア開発がテーマであり、C 言語、Java 、Python 、CALSⅡ(アセンブラ)、表計算の中からプログラミング言語を選びます。

プログラミング経験がない場合は、言語の習得に時間がかからない CASLⅡ か 表計算 を選ぶ人が多いようですが、どっちにしようか迷っている人も多いようです。

この連載を読んで、自分に合っていると思う方を選んでください。

今回は、CASLⅡ の学習手順と、問題を解くために必要とされる知識を説明します。

学習手順 1:ハードウェアの構成要素の役割を知る

CASLⅡ は、アセンブリ言語(アセンブラ)です。アセンブリ言語は、コンピュータの内部のハードウェアの動作を、そのまま記述します。したがって、CASLⅡ をマスターするには、 ハードウェアの知識が必要 になります。

一般的なコンピュータのハードウェアは、

  • 演算装置と制御装置を兼務する CPU
  • データと命令を記憶する メモリ
  • キーボードや液晶ディスプレイなどの周辺装置とデータの入出力を行う I/O( Input / Output の略で、アイ・オーと読む)

から構成されています。

 

description コンピュータのハードウェアの構成要素

学習手順 2:COMETⅡの CPU とメモリの構造を知る

基本情報技術者試験は、国家試験なので、特定のメーカーのハードウェアを題材にすることができません。

そこで、COMETⅡという架空のコンピュータがあるとして、それを題材にした問題が出題されます。COMETⅡ 専用のアセンブリ言語が CASLⅡ というわけです。

コンピュータである以上、ハードウェアの構成要素として CPU 、メモリ、I/O があるはずですが、CASLⅡ の問題では、I/O は登場しません。プログラムから I/O を使う場合は、OS(架空の OS があるとします)を介して間接的に使うことになっているからです。

つまり、問題には、

  1. あらかじめ何らかの方法でメモリにデータが入っている
  2. そのデータを CPU の内部で演算する
  3. その結果をメモリに記憶する

というプログラムしか出題されないのです。

したがって、COMETⅡ の CPU とメモリの内部構造を知っておけば、CASLⅡ のハードウェアの知識は十分 です。

 

CPU の内部には、データを格納する箱が並んでいます。これらの箱は、レジスタ と呼ばれ、GR0 や GR1 などの名前で区別されます。

メモリの内部にも、データを格納する箱が並んでいますが、レジスタとは呼ばれません。メモリの箱は、アドレス(箱を識別する番号)で区別されます。

 

description COMETⅡの CPU の内部構造

description COMETⅡのメモリの内部構造

学習手順 3:CASLⅡ の命令の構文を知る(構文は 1 つだけです)

CASLⅡ の学習に時間がかからないのは、命令の構文が、基本的に 1 つだけしかない からです。

英語の命令文と同じ「動詞 目的語」という構文で、「~せよ ・・・を」を表します。

「~せよ」を表す 動詞の部分をオペコード と呼び、「・・・を」を表す 目的語の部分をオペランド と呼びます。

英語の目的語と同様に、オペランドは、無い場合と、1 個の場合と、2 個の場合があります。

オペランドが 2 個の場合は、カンマで区切ります。

 

description 英語の命令文の構文
STOP 動詞だけ(目的語無し)
HELP ME 動詞と目的語 1 個
GIVE ME MONEY 動詞と目的語 2 個

 

description CASLⅡ の構文
RET オペコードだけ(オペランド無し)
JZE L1 オペコードとオペランド 1 個
LD GR0, DATA1 オペコードとオペランド 2 個
(オペランドをカンマで区切る)

 

オペコードに指定できる命令の種類は、すぐあとで説明します。

オペランドに指定できるのは、CPU やメモリの箱 です。箱を対象にして、データのコピーや演算を行うのです。

 

PR

学習手順 4:オペコードの種類を知る( 28 種類だけです)

CASLⅡ の学習に時間がかからないことには、もう 1 つ理由があります。

オペコードに指定する命令の種類がとても少ないのです。全部で 28 個しかありません。命令は、英語を短縮した表現になっています。

たとえば、LD という命令は、load を短縮したものです。

以下に、すべての命令を示しますが、丸暗記する必要はありません。過去問題を 2 、3 問くらい練習すれば、ほとんどの命令を見ることになり、自然と覚えられるからです。

 

description CPU とメモリでデータをコピーする命令
メモリから CPU へ LD, LAD, POP
CPU からメモリへ ST, PUSH

 

description CPU 内で演算する命令
算術演算(加算と減算) ADDA, ADDL, SUBA, SUBL
論理演算(ビット演算) AND, OR, XOR
比較演算 CPA, CPL
シフト演算 SLA, SRA, SLL, SRL

 

description プログラムの流れを変える命令
ジャンプ JPL, JMI, JNZ, JZE, JOV, JUMP
サブルーチン呼び出し CALL, RET

 

description その他(試験問題には登場しません)
OS の機能を使う SVC
何もしない命令 NOP

 

COMETⅡと CASLⅡ の仕様書は、午後問題に添付されています。情報処理推進機構の Web ページから過去問題(最近のものなら何年度でも構いません)の PDF ファイルをダウンロードして、CASLⅡ の仕様書の部分をプリンタで印刷するとよいでしょう。

IPA PDF 資料 2. アセンブラ言語 CASLⅡの仕様picture_as_pdf

仕様書を入手できたら、いよいよ最後の学習手順です。

学習手順 5:プログラムの形式を知る

これから紹介する 2 つのプログラムを読めれば、CASLⅡ のプログラムの形式を知ることができます。過去問題のプログラムも読めるようになります。

 

1 つ目は、2 つの数値を加算するプログラムです。以下に示します。

プログラムの 1 行に記述できるのは、ラベル、オペコード、オペランド、コメントです。

ラベルは、その行に付けた任意の名前です。
コメントは、その行を説明する任意の文書です。

詳しいコメントを付けたので、プログラムを読んでみてください。

先ほど紹介しなかった START、END、DC、DS は、プログラムの記述の開始と終了、およびデータを定義する命令であり、擬似命令(アセンブラ命令)と呼ばれます。

それぞれの命令の意味と機能は、CASLⅡ の仕様書に詳しく示されています。

 

description 2 つの数値を加算するプログラム
ラベル  オペコード  オペランド     コメント
SAMPLE  START                 ; プログラムの先頭
        LD        GR0,DATA1   ; GR0 に DATA1 をコピーする
        ADDA      GR0,DATA2   ; GR0 に DATA2 を加算する
        ST        GR0,ANS     ; GR0 を ANS にコピーする
        RET                   ; 処理を終了する
DATA1 	DC        123         ; 123 という値のデータの定義
DATA2 	DC        456         ; 456 という値のデータの定義
ANS     DS        1           ; 加算結果の格納領域の定義
        END                   ; プログラムの末尾

 

2 つ目は、配列の合計値を求めるプログラムです。以下に示します。

ここでも、詳しいコメントを付けたので、プログラムを読んでみてください。

GR0, DATA, GR1 というオペランドは、目的語が 3 つのように見えますが、 GR0, DATA[ GR1 ] という配列処理を意味しているので、実際には目的語は 2 つです。

 

description 配列の合計値を求めるプログラム
ラベル  オペコード オペランド     コメント
PROG1   START                     ; プログラムの先頭
        XOR       GR0,GR0         ; GR0 をゼロで初期化する
        XOR       GR1,GR1         ; GR1 をゼロで初期化する
L1      CPA       GR1,LEN         ; GR1 と LEN を比較する
        JZE       L2              ; 等しければ L2 にジャンプする
        ADDA      GR0,DATA,GR1    ; GR0 に DATA[GR1] を加算する
        ADDA      GR1,=1          ; GR1 に 1 を加算する
        JUMP      L1              ; L1 にジャンプする
L2      ST        GR0,ANS         ; GR0 を ANS にコピーする
        RET                       ; 処理を終了する
DATA    DC        12,34,56,78,90  ; 配列の要素の定義
LEN     DC        5               ; 配列の要素数の定義
ANS     DS        1               ; 合計値の格納領域の定義
        END                       ; プログラムの末尾

ここまでできれば、CASLⅡ の言語構文の学習は完了です。それほど時間がかからないことがわかったでしょう。

このあとは、過去問題の練習に進んでください。

ただし、過去問題を解くには、CASLⅡ の言語構文の他にも、2 進数に関する知識が必要になります。もしかすると、そこが大きな壁になるかもしれません。

問題を解くためには 2 進数に関する知識が必要とされる

アセンブリ言語である CASLⅡ は、コンピュータの内部のハードウェアの動作を、そのまま記述します。

コンピュータの内部では、データが 2 進数で取り扱われていて、加算や減算だけでなく、ビット演算シフト演算 もバリバリ使われています。ビット演算 や シフト演算 は、2 進数のデータを対象とした演算です。

さらに、マイナスの数を表すために、2 の補数表現 も使われています。これも 2 進数独自の仕組みです。

 

このように、CASLⅡ の問題を解くためには、2 進数に関する様々な知識が必要とされるのです。

2 進数に関する知識は、午前問題の最初の方で出題されます。以下に、おもな知識をまとめておきますので、「できる」ならチェックしてください。

ハッキリ言って、全部「できる」でないと、CASLⅡ の問題を解くのは困難でしょう。「プログラムは読めるけれど、問題が解けない」ということになってしまいます。

CASLⅡ 選択チェックリスト

CASLⅡ を選ぼうかどうか迷っている人にお聞きします。2 進数できますか?

CASLⅡ 選択チェックリスト








label 関連タグ 論理回路2 進数

いかがでしたか。CASLⅡ の言語構文を覚えるには、それほど時間がかかりません。1 日( 8 時間くらい)もあれば十分でしょう。

ただし、CASLⅡ の問題を解くには、言語構文の知識だけでなく、2 進数に関する様々な知識が必要とされるのです。

具体的に、どのような場面で、どのような知識が必要とされるのかは、次回の記事で紹介します。

午後問題の歩き方 |
CASLⅡで必要となる 2 進数に関する知識

それでは、またお会いしましょう!

 

label 関連タグ
科目A試験は、
免除できます。
独習ゼミで科目A試験を1年間免除して、科目B試験だけに集中しましょう。
免除試験を受けた 74.9% の方が、
科目A免除資格を得ています。
科目A免除試験 最大 2 回の
受験チャンス !
info_outline
科目A免除試験 最大 2 回の
受験チャンス !
詳しく見てみるplay_circle_filled
label これまでの『午後問題の歩き方』の連載一覧 label 著者