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

error
この記事は基本情報技術者試験の旧制度( 2022 年以前)の記事です。
この記事の題材となっている「午後問題」は現在の試験制度では出題されません。 ご注意くださいませ。
午後問題の問 7 ~問 11( 1 問選択)は、ソフトウェア開発がテーマであり、C 言語、Java 、Python 、CALSⅡ(アセンブラ)、表計算の中からプログラミング言語を選びます。
プログラミング経験がない場合は、言語の習得に時間がかからない CASLⅡ か 表計算 を選ぶ人が多いようですが、どっちにしようか迷っている人も多いようです。
この連載を読んで、自分に合っていると思う方を選んでください。
今回は、CASLⅡ の学習手順と、問題を解くために必要とされる知識を説明します。
もくじ
学習手順 1:ハードウェアの構成要素の役割を知る
CASLⅡ は、アセンブリ言語(アセンブラ)です。アセンブリ言語は、コンピュータの内部のハードウェアの動作を、そのまま記述します。したがって、CASLⅡ をマスターするには、 ハードウェアの知識が必要 になります。
一般的なコンピュータのハードウェアは、
- 演算装置と制御装置を兼務する CPU
- データと命令を記憶する メモリ
- キーボードや液晶ディスプレイなどの周辺装置とデータの入出力を行う I/O( Input / Output の略で、アイ・オーと読む)
から構成されています。
学習手順 2:COMETⅡの CPU とメモリの構造を知る
基本情報技術者試験は、国家試験なので、特定のメーカーのハードウェアを題材にすることができません。
そこで、COMETⅡという架空のコンピュータがあるとして、それを題材にした問題が出題されます。COMETⅡ 専用のアセンブリ言語が CASLⅡ というわけです。
コンピュータである以上、ハードウェアの構成要素として CPU 、メモリ、I/O があるはずですが、CASLⅡ の問題では、I/O は登場しません。プログラムから I/O を使う場合は、OS(架空の OS があるとします)を介して間接的に使うことになっているからです。
つまり、問題には、
- あらかじめ何らかの方法でメモリにデータが入っている
- そのデータを CPU の内部で演算する
- その結果をメモリに記憶する
というプログラムしか出題されないのです。
したがって、COMETⅡ の CPU とメモリの内部構造を知っておけば、CASLⅡ のハードウェアの知識は十分 です。
CPU の内部には、データを格納する箱が並んでいます。これらの箱は、レジスタ と呼ばれ、GR0 や GR1 などの名前で区別されます。
メモリの内部にも、データを格納する箱が並んでいますが、レジスタとは呼ばれません。メモリの箱は、アドレス(箱を識別する番号)で区別されます。
学習手順 3:CASLⅡ の命令の構文を知る(構文は 1 つだけです)
CASLⅡ の学習に時間がかからないのは、命令の構文が、基本的に 1 つだけしかない からです。
英語の命令文と同じ「動詞 目的語」という構文で、「~せよ ・・・を」を表します。
「~せよ」を表す 動詞の部分をオペコード と呼び、「・・・を」を表す 目的語の部分をオペランド と呼びます。
英語の目的語と同様に、オペランドは、無い場合と、1 個の場合と、2 個の場合があります。
オペランドが 2 個の場合は、カンマで区切ります。
STOP | 動詞だけ(目的語無し) |
HELP ME | 動詞と目的語 1 個 |
GIVE ME MONEY | 動詞と目的語 2 個 |
RET | オペコードだけ(オペランド無し) |
JZE L1 | オペコードとオペランド 1 個 |
LD GR0, DATA1 | オペコードとオペランド 2 個 (オペランドをカンマで区切る) |
オペコードに指定できる命令の種類は、すぐあとで説明します。
オペランドに指定できるのは、CPU やメモリの箱 です。箱を対象にして、データのコピーや演算を行うのです。
PR
学習手順 4:オペコードの種類を知る( 28 種類だけです)
CASLⅡ の学習に時間がかからないことには、もう 1 つ理由があります。
オペコードに指定する命令の種類がとても少ないのです。全部で 28 個しかありません。命令は、英語を短縮した表現になっています。
たとえば、LD という命令は、load を短縮したものです。
以下に、すべての命令を示しますが、丸暗記する必要はありません。過去問題を 2 、3 問くらい練習すれば、ほとんどの命令を見ることになり、自然と覚えられるからです。
メモリから CPU へ | LD, LAD, POP |
CPU からメモリへ | ST, PUSH |
算術演算(加算と減算) | ADDA, ADDL, SUBA, SUBL |
論理演算(ビット演算) | AND, OR, XOR |
比較演算 | CPA, CPL |
シフト演算 | SLA, SRA, SLL, SRL |
ジャンプ | JPL, JMI, JNZ, JZE, JOV, JUMP |
サブルーチン呼び出し | CALL, RET |
OS の機能を使う | SVC |
何もしない命令 | NOP |
COMETⅡと CASLⅡ の仕様書は、午後問題に添付されています。情報処理推進機構の Web ページから過去問題(最近のものなら何年度でも構いません)の PDF ファイルをダウンロードして、CASLⅡ の仕様書の部分をプリンタで印刷するとよいでしょう。
仕様書を入手できたら、いよいよ最後の学習手順です。
学習手順 5:プログラムの形式を知る
これから紹介する 2 つのプログラムを読めれば、CASLⅡ のプログラムの形式を知ることができます。過去問題のプログラムも読めるようになります。
1 つ目は、2 つの数値を加算するプログラムです。以下に示します。
プログラムの 1 行に記述できるのは、ラベル、オペコード、オペランド、コメントです。
ラベルは、その行に付けた任意の名前です。
コメントは、その行を説明する任意の文書です。
詳しいコメントを付けたので、プログラムを読んでみてください。
先ほど紹介しなかった START、END、DC、DS は、プログラムの記述の開始と終了、およびデータを定義する命令であり、擬似命令(アセンブラ命令)と呼ばれます。
それぞれの命令の意味と機能は、CASLⅡ の仕様書に詳しく示されています。
ラベル オペコード オペランド コメント 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 つです。
ラベル オペコード オペランド コメント 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Ⅱ の言語構文を覚えるには、それほど時間がかかりません。1 日( 8 時間くらい)もあれば十分でしょう。
ただし、CASLⅡ の問題を解くには、言語構文の知識だけでなく、2 進数に関する様々な知識が必要とされるのです。
具体的に、どのような場面で、どのような知識が必要とされるのかは、次回の記事で紹介します。

CASLⅡで必要となる 2 進数に関する知識
それでは、またお会いしましょう!
label 関連タグ
免除試験を受けた 74.9% の方が、 科目A免除資格を得ています。
※独習ゼミは、受験ナビ運営のSEプラスによる試験対策eラーニングです。

基本情報 プログラミング 言語の選択と学習方法|午後問題の歩き方
update
基本情報のサンプル問題で Python の基礎知識をチェック | 午後問題の歩き方
update
「基本情報 の Python ってどんな感じ?」を解説|午後問題の歩き方
update
矢沢久雄さんが執筆! 午後 プログラミング 問題対策の参考書「速習言語」を刊行しました!!
update
こうすりゃ解ける! 2019年度秋期 (令和元年度) 基本情報技術者試験の午後問題を徹底解説
update
こうすりゃ解ける! 2019年度春期 (平成31年度) 基本情報技術者試験の午後問題を徹底解説
update
こうすりゃ解ける! 2018年度秋期 (平成30年) 基本情報技術者試験の午後問題を徹底解説
update
午後問題の歩き方 | 試験1週間前にやるべき午後問題の知識チェック (チェックシート付き)
update
午後問題の歩き方 | Java プログラミング問題の楽勝パターン(2)オブジェクト指向
update
午後問題の歩き方 | Java プログラミング問題の難易度(1)Java基本構文
update
『プログラムはなぜ動くのか』(日経BP)が大ベストセラー
IT技術を楽しく・分かりやすく教える“自称ソフトウェア芸人”
大手電気メーカーでPCの製造、ソフトハウスでプログラマを経験。独立後、現在はアプリケーションの開発と販売に従事。その傍ら、書籍・雑誌の執筆、またセミナー講師として活躍。軽快な口調で、知識0ベースのITエンジニアや一般書店フェアなどの一般的なPCユーザの講習ではダントツの評価。
お客様の満足を何よりも大切にし、わかりやすい、のせるのが上手い自称ソフトウェア芸人。
主な著作物
- 「プログラムはなぜ動くのか」(日経BP)
- 「コンピュータはなぜ動くのか」(日経BP)
- 「出るとこだけ! 基本情報技術者」 (翔泳社)
- 「ベテランが丁寧に教えてくれる ハードウェアの知識と実務」(翔泳社)
- 「ifとelseの思考術」(ソフトバンククリエイティブ) など多数