アセンブラ入門(CASL II) 第3版

CASL II アセンブラ入門 第3版

文書情報

著者

内田智史

学校

神奈川大学工学部

専攻 情報処理
文書タイプ 教科書
言語 Japanese
フォーマット | PDF
サイズ 1.44 MB

概要

I.本書の概要 COMET IIとCASL II アセンブラ言語の学習

本書は、仮想コンピュータ「COMET II」とアセンブラ言語「CASL II」の学習を目的とした入門書です。特に、情報処理技術者試験対策にも役立つよう、多くの演習問題と過去問解説(Webダウンロード提供)を含んでいます。CASL II アセンブラ言語を学ぶことで、他のプログラミング言語(C言語、Javaなど)の理解も深まります。本書付属の開発環境「CASLDV」(エディタ、デバッガ搭載)をダウンロードして学習を進められます。

1. 本書の目的と対象読者

本書は、仮想コンピュータCOMET IIとアセンブラ言語CASL IIの学習を目的とした入門書です。プログラミング初心者を対象としており、COMET IIとCASL IIを用いた実践的なプログラミングを通して、コンピュータの基礎的な動作原理を理解することを目指しています。特に、情報処理技術者試験の受験を検討している読者にとって、試験対策としても役立つ内容となっています。本書では、Windows 7やWindows 8などの環境で動作するCASL IIの開発環境CASLDVを提供しており、読者はこれをダウンロードして学習を進めることができます。CASLDVはエディタやデバッガなどの機能を備えており、作成したプログラムの動作をグラフィカルに確認できるため、学習効率を向上させることができます。また、サンプルプログラムも用意されているため、本書の学習内容を実際に試しながら理解を深めることが可能です。本書は、初心者でも理解しやすいように平易な言葉で書かれており、一度読めば理解できるよう配慮されていますが、アセンブラ言語の入門書であるため、COMET IIの機械語に関する詳細な説明も必要となります。そのため、COMET IIの機械語の詳細な説明は第6章にまとめてあり、プログラミングの概念と密接に関連しているため、初読時には理解が難しい部分もあるかもしれません。そこで、第6章は最初は流し読みし、必要に応じて読み返すことを推奨しています。

2. 情報処理技術者試験との関連性とCASL IIの改訂

情報処理技術者試験との関連性について説明します。情報処理技術者試験は昭和44年(1969年)に試験制度が発足し、COMETとCASLは、以前は第一種情報処理技術者認定試験では必須項目、第二種情報処理技術者認定試験では選択項目でした。平成6年(1994年)の試験制度変更後も第一種と第二種は残りましたが、第一種試験からプログラミング能力を問う問題がなくなったため、COMETとCASLは実質的に第二種情報処理技術者試験のみで出題されるようになりました。さらに、平成13年(2001年)の試験制度変更により、第一種情報処理技術者認定試験がソフトウェア開発技術者試験に、第二種情報処理技術者認定試験が基本情報技術者試験に変更され、COMETとCASLもCOMET IIとCASL IIに改訂されました。本書では、このCOMET IIとCASL IIを対象として解説しています。アセンブラ言語を学ぶことは、他のプログラミング言語(C言語やJavaなど)の理解を深める上で非常に役立ちます。多くの読者が試験対策として本書を利用すると予想されるため、本書には多くの演習問題が盛り込まれています。第9章までは比較的簡単な問題、第10章以降は実際の試験問題に近い本格的な問題が多数収録されており、独力で問題を解くことで実力を高めることができます。さらに、第13章では過去問の解き方を解説しており、Webページからも過去の試験問題に関する情報をダウンロードできます。

3. CASLDV開発環境とソフトウェアの提供

本書では、CASL IIの開発環境であるCASLDVを提供しています。CASLDVは、CASL IIアセンブラとCOMET IIシミュレータを統合したもので、プログラムの作成から実行までを一つのウィンドウで行うことができます。エディタやデバッガも搭載しており、初心者でも使いやすい設計となっています。CASLDVは、単にプログラム作成を支援するだけでなく、COMET IIの機械語命令の動作をCPUや主記憶装置との関係においてグラフィカルに表示する機能も備えています。この機能は、初心者が機械語の動作イメージを掴む上で非常に役立ちます。本書で使用するCASL IIアセンブラとCOMET IIシミュレータ、そしてCASLDVは、紹介されたWebサイトから無料でダウンロードでき、自由に使用できます。PC教室のパソコンへのインストールも可能です。COMET IIは仮想的なコンピュータですが、CASL IIアセンブラとCOMET IIシミュレータによって、CASL IIで記述されたプログラムを実際に実行し、その動作を確認することができます。これは、COMET IIの機械語を実行するコンピュータと同様の動作を行うプログラム(COMET IIシミュレータ)が用意されているためです。

II.CASL II アセンブラとCOMET II シミュレータ

本書では、CASL IIで記述されたプログラムをCOMET IIの機械語に変換し、実行するためのCASL II アセンブラCOMET II シミュレータを提供しています。CASLDVはこれらを統合した開発環境です。COMET IIは、現実のコンピュータを簡略化したモデルで、初心者にとって学習しやすい環境を提供します。CASLDVは、COMET IIの機械語命令の動作をグラフィカルに表示する機能も備えています。

1. CASL II アセンブラの機能と役割

本書で解説するCASL IIアセンブラは、CASL II言語で記述されたプログラムをCOMET IIの機械語プログラムに変換する役割を担っています。CASL IIはアセンブラ言語であり、機械語と1対1に対応しているため、コンピュータの動作を詳細に理解する上で非常に有効です。一方で、人間が直接機械語を記述することは非常に困難であるため、CASL IIアセンブラのようなツールが不可欠となります。アセンブラは、人間にとって理解しやすいCASL II言語を、コンピュータが直接実行可能な機械語に翻訳する役割を担っています。図1.5に示されているように、CASL IIアセンブラは、CASL IIで記述されたプログラムを入力として受け取り、COMET II上で実行可能な機械語プログラムを出力します。本書では、情報処理技術者試験の案内に記載されているCOMET IIの機械語仕様に準拠しています。アセンブラ言語(本書ではアセンブラ言語と表現)は、機械語を人間が理解しやすい表現に置き換えたものであり、機械語とアセンブラ言語の関係は図1.4に示されています。この図では、機械語、対応するアセンブラ言語、そして日本語による説明が並べて示されており、理解を助けます。COMET IIは、このアセンブラ言語で書かれたプログラムを正しく解釈し実行できますが、人間が直接機械語を理解することは困難なため、アセンブラ言語の学習が重要となります。

2. COMET IIシミュレータの機能とCOMET IIの特性

COMET IIシミュレータは、COMET IIの機械語を実行するプログラムです。COMET IIは本書で学習する仮想のコンピュータであり、現実には存在しません。しかし、COMET IIシミュレータによって、CASL IIアセンブラで変換されたCOMET IIの機械語を実行することが可能になります。これにより、学習者は、実機を用いることなく、CASL IIプログラムの動作を検証し、学習を進めることができます。COMET IIは、情報処理技術者試験のために作成された仮想的なコンピュータであり、現実のコンピュータと比較すると極端に単純化されています。表1-1には、マイクロプロセッサとCOMET IIの比較が示されており、COMET IIがいかに単純化されたモデルであるかが分かります。しかし、この単純化されたモデルを用いることで、初心者がコンピュータの本質的な部分、特に動作原理や機械語、アセンブラの役割を効率的に学ぶことができます。現実の複雑なコンピュータをいきなり学習するのは困難なため、COMET IIのような簡略化されたモデルは学習効果を高める上で有効な手段です。COMET IIシミュレータは、学習者がCOMET IIの機械語命令の動作を理解する上で非常に役立ちます。特に、初心者の場合、CASLDVの表示機能を活用することで、機械語の動作イメージを効果的に学習できます。

3. CASLDV開発環境 統合開発環境としての機能

本書では、Windows系OSで動作するCASL II開発環境であるCASLDVを提供しています。CASLDVは、CASL IIアセンブラとCOMET IIシミュレータを統合した開発環境であり、プログラムの作成、アセンブル、実行、デバッグといった全ての作業を一つのウィンドウの中で行うことができます。エディタやデバッガも含まれており、開発効率の向上に貢献します。CASLDVは、単なるプログラム作成ツールではなく、COMET IIの機械語命令の動作をグラフィカルに表示する機能も備えています。この機能は、初心者が機械語の動作イメージを理解する上で非常に有効です。CPUや主記憶装置との関係を視覚的に確認できるため、アセンブラ言語の理解を深めることができます。CASLDVは、初心者にとって学習しやすい環境を提供するだけでなく、経験者にとっても効率的な開発環境として利用できます。本書で紹介されているWebサイトから無料でダウンロードでき、自由に使用できます。PC教室などでも導入することが可能です。

III.進数 8進数 16進数とコンピュータ

コンピュータは内部的に2進数で動作します。本書では、2進数、8進数、16進数の表現方法と、COMET IIにおけるデータの扱い方を解説しています。特に、符号付きデータと符号無しデータの区別、オーバーフローの概念を理解することは重要です。これらの知識は、アセンブラ言語の理解に不可欠です。

1. 2進数 8進数 16進数の表現方法とコンピュータとの関係

コンピュータは内部的に2進数で動作するため、2進数、8進数、16進数の理解はアセンブラ言語の学習に不可欠です。普段10進数に慣れている私たちにとって、2進数、8進数、16進数は最初は戸惑うかもしれませんが、アセンブラ言語のプログラムを読む際にこれらの表現方法に慣れることは重要です。例えば、10進数の255は16進数では00FFと表現され、16進数の方が読みやすいと感じるようになるでしょう。2進数、8進数、16進数の変換方法を理解することで、アセンブラ言語で記述されたプログラムをスムーズに読み解くことができるようになります。2進数の各桁の重み(1, 2, 4, 8,...)を理解し、それらを合計することで10進数に変換できます。暗記に頼るのではなく、この計算方法を理解することで、効率的に変換を行うことができます。2進数の最下位桁は、数値が奇数であれば1、偶数であれば0になるという特徴があります。これは、2進数の定義から導き出される重要な性質です。COMET IIでは、16桁までの2進数しかデータを保持できないため、計算結果がその桁数を超える場合(オーバーフロー)は、超過した部分は無視されます。このオーバーフローの概念も、アセンブラ言語を扱う上で理解しておく必要があります。

2. 2進数とコンピュータハードウェアの関係

2進数を学習する理由は、それがコンピュータのハードウェアと密接に関連しているからです。現代のコンピュータは、電流のON/OFFという2つの状態を用いてデータを表現しており、このON/OFFが2進数の0と1に対応しています。例えば、数値21はCOMET II内部では0000000000010101(2)という形で記憶されます。通常、0がOFF、1がONに対応します。この2進数の理解は、コンピュータ内部でのデータの表現方法を理解する上で重要です。また、1つのビットパターンに対して、符号付きデータと符号無しデータの2つの異なる解釈が存在します。例えば、2進数1000000000000001(2)は、符号無しデータとみなせば32769ですが、符号付きデータとみなせば-32767となります。COMET IIの命令は、データを符号付きデータとみなして計算するものと、符号無しデータとみなして計算するものとに分けられています。例えば、データの加算では、符号付きデータの場合はADDA命令、符号無しデータの場合はADDL命令を使用します。この符号付きデータと符号無しデータの区別は、アセンブラ言語プログラミングにおいて非常に重要です。浮動小数点データも2進数で表現されますが、0.1のような数値も実際には近似値で表現されるため、10回加算しても必ずしも1.0にならない点に注意が必要です。

3. シフト演算と2進数の効率的な処理

2進数を8で割る操作は、その数値の各桁を3つ右に移動させることと同じです。この操作はシフト演算と呼ばれ、コンピュータ内部では効率的に処理されます。シフト演算は、2進数の処理において非常に重要な役割を果たします。本書では、シフト演算命令についても詳しく説明されており、2進数の理解を深める上で役立ちます。2進数、8進数、16進数の表現方法を理解することで、アセンブラ言語のプログラムをより効率的に読み書きすることができます。これらの表現方法は、最初は戸惑うかもしれませんが、慣れてしまえば、アセンブラ言語で記述されたプログラムを読む際に、そこに書かれている数値が16進数で書かれた数値でないとなぜかしっくりいかなくなります。本書では、これらの数値表現方法を習得することで、アセンブラ言語の学習における最初の難関を乗り越えることができるよう、丁寧に解説しています。これらの知識は、COMET IIを理解し、CASL IIプログラミングを習得する上で必要不可欠です。

IV.演習問題と情報処理技術者試験

本書には、レベル別に分類された演習問題が多数収録されています。前半は比較的簡単な問題、後半は情報処理技術者試験レベルの本格的な問題を取り上げています。これらの問題を解くことで、CASL II アセンブラ言語の習得と情報処理技術者試験への対策を同時に行えます。過去問解説もWebからダウンロード可能です。

1. 演習問題の構成と学習効果

本書には、CASL II アセンブラ言語の学習を効果的に進めるための演習問題が多数収録されています。これらの問題は、学習内容の理解度を確認し、実践的なスキルを習得するために設計されています。問題の難易度は段階的に設定されており、第9章までは比較的簡単な問題が中心で、アセンブラ言語の基本的な概念や構文を習得するのに役立ちます。これらの問題を解くことで、アセンブラ言語の基礎を固め、問題解決のスキルを磨くことができます。第10章以降は、情報処理技術者試験を想定した本格的な問題が出題されます。これらの問題は、試験本番を想定した難易度となっており、実践的な問題解決能力を高めることができます。独力で多くの問題を解くことで、試験対策だけでなく、より高度なアセンブラ言語のスキルを身につけることができます。本書で紹介されている問題を解くことで、CASL IIアセンブラ言語の理解度を客観的に評価し、学習内容の定着度を高めることができます。演習問題は、単に知識をテストするだけでなく、問題解決能力やプログラミングスキルを向上させることを目的としています。そのため、各問題に対して適切な解答方法を導き出すための思考プロセスを養うことが重要となります。

2. 情報処理技術者試験対策としての活用

本書は、情報処理技術者試験対策としても活用できます。特に、COMET IIとCASL IIは、過去には情報処理技術者試験で出題されていたため、本書で学習することで試験対策に役立ちます。本書に掲載されている演習問題は、試験レベルの問題を多数含んでおり、試験対策として最適です。第10章以降に掲載されている問題は、実際の試験問題と同様の難易度と構成になっており、試験本番でのパフォーマンス向上に効果的です。第13章では、過去の試験問題の解き方を解説しており、試験対策として非常に役立つ情報が提供されています。ただし、毎年の情報処理技術者試験問題は、書籍に全て掲載することは不可能なため、最新の試験問題に関する情報は、本書で紹介されているWebページからダウンロードできます。Webページでは、最新の試験問題解説や追加情報が提供されており、常に最新の情報をアップデートできます。本書は、情報処理技術者試験対策としてだけでなく、アセンブラ言語を深く理解するために役立つ情報を網羅しており、試験対策と学習の両面をサポートする内容となっています。これにより、読者は効率的に試験勉強を進めることができ、合格の可能性を高めることができます。

V.高水準言語との比較とアセンブラ言語の価値

高水準言語(FORTRAN、C言語など)とアセンブラ言語の比較を通して、アセンブラ言語学習の価値を解説しています。最適化コンパイラの発達により、高水準言語でも効率的なプログラムが作成できますが、アセンブラ言語はコンピュータを直接制御できるため、高度な最適化や特定のハードウェアへのチューニングに有効です。本書では、CASL II アセンブラ言語を通して、コンピュータの動作原理を深く理解することを目指します。

1. アセンブラ言語と高水準言語の比較

アセンブラ言語と高水準言語の比較がなされています。アセンブラ言語は機械語と1対1に対応する低水準言語であり、コンピュータのハードウェアを直接制御できるため、高い実行効率が得られます。一方、高水準言語(例:C言語、Java)は、人間にとって理解しやすい記述方法を採用しているため、プログラミングの生産性が高いです。ただし、高水準言語は、コンパイラによって複数の機械語命令に変換されるため、アセンブラ言語と比較すると実行効率が若干劣る場合があります。高水準言語では、1つの命令が複数の機械語命令に変換されるため、アセンブラ言語と比べてコードサイズが大きくなる傾向があります。また、高水準言語は、コンパイラの最適化機能に依存するため、実行効率はコンパイラの実装に左右されます。一方、アセンブラ言語は、ハードウェアを直接制御できるため、コンパイラの最適化機能に依存することなく、最適なパフォーマンスを得ることができます。このため、高度な最適化が必要な場面では、アセンブラ言語が依然として有効な選択肢となります。

2. 最適化コンパイラの存在とアセンブラ言語の価値

現代の最適化コンパイラは非常に高度な技術を持っており、熟練プログラマが手書きしたアセンブラ言語コードと同等、もしくはそれ以上の効率を持つ機械語コードを生成できるようになっています。しかし、それでもアセンブラ言語を使用しなければならない場面が存在します。それは、高水準言語では実現できないような、コンピュータハードウェアの特性を最大限に活かしたチューニングを行う必要がある場合です。例えば、C言語では文字データの終端に0を入れるという規則がありますが、特定のコンピュータではこの方法が実行速度を著しく低下させることがあります。アセンブラ言語であれば、このような高水準言語の制約を受けることなく、コンピュータ固有の特性を活かした最適化(チューニング)を行うことが可能です。組込みシステムの開発現場では、このアセンブラ言語の能力が依然として高く評価されており、プログラム全体の80%をC言語で記述する際にも、その半数がアセンブラ言語を併用し、10%はアセンブラ言語のみで開発されているケースもあります。高水準言語を使用する際に、その出力される機械語のパターンを理解することで、より効率的なプログラムを作成することが可能になります。アセンブラ言語の学習は、高水準言語の理解を深めるだけでなく、より高度なプログラミング技術を習得するための基礎となります。

3. COMET IIを用いた学習のメリット

現実の複雑なコンピュータアーキテクチャを学ぶことは、初心者にとって大きな負担となります。そこで、本書ではCOMET IIという仮想的なコンピュータを使用することで、学習のハードルを下げています。COMET IIは、現実のコンピュータを大幅に簡略化したモデルであるため、初心者でも容易に理解することができます。COMET IIを用いることで、複雑なハードウェアの仕様に煩わされることなく、コンピュータの動作原理やアセンブラ言語の概念を効率的に学ぶことができます。COMET IIは、現実のコンピュータの本質的な部分のみを抽出して設計されているため、基本的なコンピュータの理解を深めるには十分な学習効果があります。現実の複雑な問題に振り回されることなく、効率的に学習を進めることができる点がCOMET IIの大きなメリットです。この簡略化されたモデルを用いることで、初心者でも安心して学習を進め、コンピュータの基礎をしっかりと理解することができます。COMET IIの学習を通して得られた知識は、将来、より複雑なコンピュータシステムの学習や開発に役立つ基礎となります。