<div class="contents">
<h2>Table of Contents</h2>
<ul>
-<li><a name="toc_YACASL2_00e3_0081_00ae_00e6_00a6_0082_00e8_00a6_0081" href="#YACASL2_00e3_0081_00ae_00e6_00a6_0082_00e8_00a6_0081">1 YACASL2の概要</a>
+<li><a name="toc_About" href="#About">1 YACASL2の概要</a>
<ul>
-<li><a href="#YACASL2_00e3_0081_00ae_00e6_00a6_0082_00e8_00a6_0081">要件</a>
+<li><a href="#About">要件</a>
</li></ul>
-<li><a name="toc_YACASL2_00e3_0081_00ae_00e3_0082_00a4_00e3_0083_00b3_00e3_0082_00b9_00e3_0083_0088_00e3_0083_00bc_00e3_0083_00ab" href="#YACASL2_00e3_0081_00ae_00e3_0082_00a4_00e3_0083_00b3_00e3_0082_00b9_00e3_0083_0088_00e3_0083_00bc_00e3_0083_00ab">2 YACASL2のインストール</a>
+<li><a name="toc_Install" href="#Install">2 YACASL2のインストール</a>
<ul>
-<li><a href="#YACASL2_00e3_0081_00ae_00e3_0082_00a4_00e3_0083_00b3_00e3_0082_00b9_00e3_0083_0088_00e3_0083_00bc_00e3_0083_00ab">2.1 YACASL2ファイルのダウンロード</a>
-<li><a href="#YACASL2_00e3_0081_00ae_00e3_0082_00a4_00e3_0083_00b3_00e3_0082_00b9_00e3_0083_0088_00e3_0083_00bc_00e3_0083_00ab">2.2 YACASL2ファイルの検証</a>
-<li><a href="#YACASL2_00e3_0081_00ae_00e3_0082_00a4_00e3_0083_00b3_00e3_0082_00b9_00e3_0083_0088_00e3_0083_00bc_00e3_0083_00ab">2.3 YACASL2ファイルの展開</a>
-<li><a href="#YACASL2_00e3_0081_00ae_00e3_0082_00a4_00e3_0083_00b3_00e3_0082_00b9_00e3_0083_0088_00e3_0083_00bc_00e3_0083_00ab">2.4 <kbd>casl2</kbd>、<kbd>comet2</kbd>、<kbd>dumpword</kbd>のビルド</a>
-<li><a href="#YACASL2_00e3_0081_00ae_00e3_0082_00a4_00e3_0083_00b3_00e3_0082_00b9_00e3_0083_0088_00e3_0083_00bc_00e3_0083_00ab">2.5 <kbd>casl2</kbd>の実行テスト</a>
-<li><a href="#YACASL2_00e3_0081_00ae_00e3_0082_00a4_00e3_0083_00b3_00e3_0082_00b9_00e3_0083_0088_00e3_0083_00bc_00e3_0083_00ab">2.6 詳細なテスト</a>
-<li><a href="#YACASL2_00e3_0081_00ae_00e3_0082_00a4_00e3_0083_00b3_00e3_0082_00b9_00e3_0083_0088_00e3_0083_00bc_00e3_0083_00ab">2.7 環境変数<code>PATH</code>の設定</a>
+<li><a href="#Download">2.1 YACASL2ファイルのダウンロード</a>
+<li><a href="#Verify">2.2 YACASL2ファイルの検証</a>
+<li><a href="#Expand">2.3 YACASL2ファイルの展開</a>
+<li><a href="#Build">2.4 <kbd>casl2</kbd>、<kbd>comet2</kbd>、<kbd>dumpword</kbd>のビルド</a>
+<li><a href="#Simple-Test">2.5 <kbd>casl2</kbd>の実行テスト</a>
+<li><a href="#Detail-Test">2.6 詳細なテスト</a>
+<li><a href="#Path-Setting">2.7 環境変数<code>PATH</code>の設定</a>
</li></ul>
-<li><a name="toc_YACASL2_00e3_0081_00ae_00e4_00bd_00bf_00e3_0081_0084_00e6_0096_00b9" href="#YACASL2_00e3_0081_00ae_00e4_00bd_00bf_00e3_0081_0084_00e6_0096_00b9">3 YACASL2 の使い方</a>
+<li><a name="toc_Usage" href="#Usage">3 YACASL2の使い方</a>
<ul>
-<li><a href="#YACASL2_00e3_0081_00ae_00e4_00bd_00bf_00e3_0081_0084_00e6_0096_00b9">3.1 実行結果の出力だけを表示</a>
-<li><a href="#YACASL2_00e3_0081_00ae_00e4_00bd_00bf_00e3_0081_0084_00e6_0096_00b9">3.2 アセンブル結果の確認</a>
-<li><a href="#YACASL2_00e3_0081_00ae_00e4_00bd_00bf_00e3_0081_0084_00e6_0096_00b9">3.3 実行時のレジスタとメモリを表示</a>
+<li><a href="#Simple-Output">3.1 実行結果の出力だけを表示</a>
+<li><a href="#Assemble-Result">3.2 アセンブル結果の確認</a>
+<li><a href="#Register-and-Memory">3.3 実行時のレジスタとメモリを表示</a>
<ul>
-<li><a href="#YACASL2_00e3_0081_00ae_00e4_00bd_00bf_00e3_0081_0084_00e6_0096_00b9">3.3.1 特定のレジスタを表示</a>
-<li><a href="#YACASL2_00e3_0081_00ae_00e4_00bd_00bf_00e3_0081_0084_00e6_0096_00b9">3.3.2 プログラム終了時の値を表示</a>
-<li><a href="#YACASL2_00e3_0081_00ae_00e4_00bd_00bf_00e3_0081_0084_00e6_0096_00b9">3.3.3 プログラムのステップ数を表示</a>
+<li><a href="#Register-Specify">3.3.1 特定のレジスタを表示</a>
+<li><a href="#Ending-Value">3.3.2 プログラム終了時の値を表示</a>
+<li><a href="#Step-Count">3.3.3 プログラムのステップ数を表示</a>
</li></ul>
-<li><a href="#YACASL2_00e3_0081_00ae_00e4_00bd_00bf_00e3_0081_0084_00e6_0096_00b9">3.4 アセンブルと実行を別に行う</a>
-<li><a href="#YACASL2_00e3_0081_00ae_00e4_00bd_00bf_00e3_0081_0084_00e6_0096_00b9">3.5 1語の解析</a>
-<li><a href="#YACASL2_00e3_0081_00ae_00e4_00bd_00bf_00e3_0081_0084_00e6_0096_00b9">3.6 CASL2ライブラリの使用</a>
+<li><a href="#Only-Assemble">3.4 アセンブルと実行を別に行う</a>
+<li><a href="#Analyze-Word">3.5 1語の解析</a>
+<li><a href="#CASL2lib">3.6 CASL2ライブラリの使用</a>
<ul>
-<li><a href="#YACASL2_00e3_0081_00ae_00e4_00bd_00bf_00e3_0081_0084_00e6_0096_00b9">3.6.1 数値を出力する</a>
+<li><a href="#CASL2lib">3.6.1 数値を出力する</a>
</li></ul>
</li></ul>
-<li><a name="toc_YACASL2_00e3_0082_00b3_00e3_0083_009e_00e3_0083_00b3_00e3_0083_0089_00e3_0083_009e_00e3_0083_008b_00e3_0083_00a5_00e3_0082_00a2_00e3_0083_00ab" href="#YACASL2_00e3_0082_00b3_00e3_0083_009e_00e3_0083_00b3_00e3_0083_0089_00e3_0083_009e_00e3_0083_008b_00e3_0083_00a5_00e3_0082_00a2_00e3_0083_00ab">4 YACASL2コマンドマニュアル</a>
+<li><a name="toc_Command-Manual" href="#Command-Manual">4 YACASL2コマンドマニュアル</a>
<ul>
<li><a href="#casl2">4.1 <kbd>casl2</kbd></a>
<ul>
<li><a href="#dumpword">オプション</a>
</li></ul>
</li></ul>
-<li><a name="toc_CASL2LIB_00e3_0083_009e_00e3_0083_008b_00e3_0083_00a5_00e3_0082_00a2_00e3_0083_00ab" href="#CASL2LIB_00e3_0083_009e_00e3_0083_008b_00e3_0083_00a5_00e3_0082_00a2_00e3_0083_00ab">5 CASL2LIBマニュアル</a>
+<li><a name="toc_CASL2LIB-Manual" href="#CASL2LIB-Manual">5 CASL2LIBマニュアル</a>
<ul>
<li><a href="#ABS">5.1 <kbd>ABS</kbd> - <samp><span class="file">abs.casl</span></samp></a>
<ul>
</li></ul>
</div>
-<p><a name="YACASL2%e3%81%ae%e6%a6%82%e8%a6%81"></a>
-<a name="YACASL2_00e3_0081_00ae_00e6_00a6_0082_00e8_00a6_0081"></a>
+<p><a name="About"></a>
<h2 class="chapter">1 YACASL2の概要</h2>
<h3 class="unnumberedsec">要件</h3>
-<p>YACASL2は、Linux上で動作します。現在動作を確認しているのは、次のディストリビューションです。
+<p>YACASL2は、LinuxやMac OS Xなど、UNIX系のOS上で動作します。現在動作を確認しているのは、次の環境です。
<ul>
-<li>Ubuntu Linux 9.04 / 8.04
+<li>Ubuntu Linux 10.10
<li>Vine Linux 4.2
+
+ <li>Mac OS X 10.6
</ul>
- <p>インストール時に、<kbd>tar</kbd>、<kbd>gcc</kbd>、<kbd>make</kbd>が必要です。
+ <p>インストール時に、<kbd>tar</kbd>、<kbd>gcc</kbd>、<kbd>make</kbd>が必要です。Linuxの場合は、標準でインストールされていることが多いと思います。Mac OS Xの場合、<code>Xcode</code>をインストールしてください。
-<p><a name="YACASL2%e3%81%ae%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab"></a>
-<a name="YACASL2_00e3_0081_00ae_00e3_0082_00a4_00e3_0083_00b3_00e3_0082_00b9_00e3_0083_0088_00e3_0083_00bc_00e3_0083_00ab"></a>
+<p><a name="Install"></a>
<h2 class="chapter">2 YACASL2のインストール</h2>
<p>YACASL2をインストールするには、Linux上で次の作業をします。
- <ol type=1 start=1>
-
- <li>YACASL2ファイルのダウンロード
-
- <li>YACASL2ファイルの検証
-
- <li>YACASL2ファイルの展開
-
- <li><kbd>casl2</kbd>、<kbd>comet2</kbd>、<kbd>dumpword</kbd>のビルド
-
- <li><kbd>casl2</kbd>の実行テスト
-
- <li>詳細なテスト
-
- <li>環境変数<code>PATH</code>の設定
- </ol>
+<p><a name="Download"></a>
<h3 class="section">2.1 YACASL2ファイルのダウンロード</h3>
-<p><a href="http://github.com/j8takagi/YACASL2">GitHub/j8takagi/YACASL2</a>の<a href="http://github.com/j8takagi/YACASL2/downloads">ダウンロードページ</a>から最新版のtgzファイルをダウンロードします(2010年3月6日現在、<code>v0.1</code>の<samp><span class="file">j8takagi-YACASL2-6323ce4.tar.gz</span></samp>)。
+<p>次の場所から最新版の<samp><span class="file">tar.gz</span></samp>ファイルをダウンロードします。
+<blockquote>
+<a href="http://github.com/j8takagi/YACASL2">GitHub/j8takagi/YACASL2</a>の<a href="http://github.com/j8takagi/YACASL2/downloads">ダウンロードページ</a>
+</blockquote>
<p>続けて、対応する<samp><span class="file">md5sum</span></samp>ファイルをダウンロードします(2010年3月6日現在、<samp><span class="file">j8takagi-YACASL2-6323ce4.tar.gz.md5sum</span></samp>)。
+<p><a name="Verify"></a>
+
<h3 class="section">2.2 YACASL2ファイルの検証</h3>
<p>ダウンロードが完了したら、<kbd>md5sum</kbd>と<kbd>diff</kbd>で正しくファイルがダウンロードができているかを検証します。
<pre class="example"> $ <kbd>md5sum yacasl2.tar.gz | diff -s yacasl2.tar.gz.md5sum -</kbd>
Files yacasl2.tar.gz.md5sum and - are identical
</pre>
- <h3 class="section">2.3 YACASL2ファイルの展開</h3>
+ <p><a name="Expand"></a>
+
+<h3 class="section">2.3 YACASL2ファイルの展開</h3>
<p>YACASL2ファイルをダウンロードしたら、次のコマンドで展開します。
<pre class="example"> $ <kbd>tar xvzf yacasl2.tar.gz</kbd>
</pre>
- <h3 class="section">2.4 <kbd>casl2</kbd>、<kbd>comet2</kbd>、<kbd>dumpword</kbd>のビルド</h3>
+ <p><a name="Build"></a>
+
+<h3 class="section">2.4 <kbd>casl2</kbd>、<kbd>comet2</kbd>、<kbd>dumpword</kbd>のビルド</h3>
<p>展開したら、次のコマンドで<kbd>casl2</kbd>、<kbd>comet2</kbd>、<kbd>dumpword</kbd>をビルドします。
gcc -g -Wall -I ../include -o ../dumpword dumpword.o word.o cerr.o
make[1]: Leaving directory ‘/home/kazubito/yacasl2/src’
</pre>
- <h3 class="section">2.5 <kbd>casl2</kbd>の実行テスト</h3>
+ <p><a name="Simple-Test"></a>
+
+<h3 class="section">2.5 <kbd>casl2</kbd>の実行テスト</h3>
<p>ビルドしたら、次のコマンドが正常に実行できるかを確認します。
正常に実行された場合は、「Hello, World!」と表示されます。
<pre class="example"> $ <kbd>./casl2 as/hello.casl</kbd>
Hello, World!
</pre>
- <h3 class="section">2.6 詳細なテスト</h3>
+ <p><a name="Detail-Test"></a>
+
+<h3 class="section">2.6 詳細なテスト</h3>
<p>次のコマンドを実行すると、正常にビルドできているかどうかを詳細にテストできます。
/dumpword/Test.log
All tests are succeded.
</pre>
- <h3 class="section">2.7 環境変数<code>PATH</code>の設定</h3>
+ <p><a name="Path-Setting"></a>
+
+<h3 class="section">2.7 環境変数<code>PATH</code>の設定</h3>
<p>環境変数<code>PATH</code>にYACASL2のディレクトリを追加すると、どのディレクトリでも<kbd>casl2</kbd>、<kbd>comet2</kbd>、<kbd>dumpword</kbd>を実行できます。
<pre class="example"> $ <kbd>echo ’PATH=$PATH:~/yacasl2 && export PATH’ >>~/.bashrc</kbd>
</pre>
- <p><a name="YACASL2%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9"></a>
-<a name="YACASL2_00e3_0081_00ae_00e4_00bd_00bf_00e3_0081_0084_00e6_0096_00b9"></a>
+ <p><a name="Usage"></a>
-<h2 class="chapter">3 YACASL2 の使い方</h2>
+<h2 class="chapter">3 YACASL2の使い方</h2>
<p>YACASL2 は、テキストファイルに記述されたCASLプログラムを処理します。以下の例で用いられるCASLプログラムのファイルは、テキストエディタなどで作成してください。また、インストールしたディレクトリの中にある<samp><span class="file">as</span></samp>ディレクトリからコピーして作成することもできます。
+<p><a name="Simple-Output"></a>
+
<h3 class="section">3.1 実行結果の出力だけを表示</h3>
<p>インストール時にコマンド実行の確認に使った<samp><span class="file">hello.casl</span></samp>は、次のような内容です。CASL IIのマクロ命令OUTは、文字列を出力します。
</pre>
<p>実行内容を確認するには、後述のようにCPU 内にあるレジスタやメモリの内容を表示するか、結果を出力するための処理を追加する必要があります。
- <p><samp><span class="file">sum_10.casl</span></samp>は、1から10までの整数の和を求めます。
+<p><a name="Assemble-Result"></a>
-<pre class="example"> $ <kbd>cat sum_10.casl</kbd>
- ;;; sum_10.casl
- ;;; 出力 GR0: 1から10までの整数をすべて加算した値
- MAIN START
- PUSH 0,GR1
- LAD GR0,0 ; GR0を初期化
- LD GR1,FST ; GR1に初項を転送
- LOOP ADDL GR0,GR1 ; ループ先頭
- ADDL GR1,STEP ; GR1 <- GR1 + 公差
- CPL GR1,LST ; GR1が末項より大きい場合は終了
- JPL FIN ; ↓
- JUMP LOOP ; ループ終端
- FIN POP GR1
- RET
- FST DC 1 ; 初項
- LST DC 10 ; 末項
- STEP DC 1 ; 公差
- END
-</pre>
- <p>このプログラムも、オプションなしで実行した場合には結果が出力されません。
-<pre class="example"> $ <kbd>casl2 sum_10.casl</kbd>
- $
-</pre>
- <h3 class="section">3.2 アセンブル結果の確認</h3>
+<h3 class="section">3.2 アセンブル結果の確認</h3>
<p>casl2の処理途中で行われるアセンブルの結果を表示するには、オプション<samp><span class="option">-a</span></samp>を指定します。また、ラベルとアドレスの対応表を表示するには、オプション<samp><span class="option">-l</span></samp>を指定します。
</pre>
<p>なお、オプション<samp><span class="option">-A</span></samp>を指定すると、アセンブル結果が表示される時点で処理が終了します。仮想マシンCOMET II での実行は行われません。
+<p><a name="Register-and-Memory"></a>
+
<h3 class="section">3.3 実行時のレジスタとメモリを表示</h3>
<p>YACASL2では実行中のCPUのレジスタとメモリの内容をそれぞれ、<samp><span class="option">-t</span></samp>と<samp><span class="option">-d</span></samp>を指定することで表示できます。
#0004: adr : 0000 0001 0002 0003 0004 0005 0006 0007
#0004: 0000: 1010 0005 2210 0006 8100 0003 0001 0000
</pre>
- <h4 class="subsection">3.3.1 特定のレジスタを表示</h4>
+ <p><a name="Register-Specify"></a>
+
+<h4 class="subsection">3.3.1 特定のレジスタを表示</h4>
<p><samp><span class="file">addl.casl</span></samp>のレジスタやメモリの中で、実行中に値が変化しているのはGR1だけです。こうした場合は、<kbd>grep</kbd>を使って表示される内容を絞り込むことで動作を検証しやすくなります。
</td><td valign="top" width="40%"><code>ADDL GR1,B</code>
<br></td></tr></table>
+<p><a name="Ending-Value"></a>
+
<h4 class="subsection">3.3.2 プログラム終了時の値を表示</h4>
<p><kbd>grep</kbd>と<kbd>tail</kbd>を組み合わせれば、プログラム終了時の値を表示できます。
+ <p><samp><span class="file">addl.casl</span></samp>でプログラム終了時の値を確認するには、次のようにします。
+
<pre class="example"> $ <kbd>casl2 -t addl.casl | grep 'GR1:' | tail -1</kbd>
#0004: GR1: 4 = #0004 = 0000000000000100
</pre>
- <pre class="example"> $ <kbd>casl2 -t sum_10.casl | grep 'GR0:' | tail -1</kbd>
+ <p><samp><span class="file">sum_10.casl</span></samp>は、1から10までの整数の和を求めます。
+
+<pre class="example"> $ <kbd>cat sum_10.casl</kbd>
+ ;;; sum_10.casl
+ ;;; 出力 GR0: 1から10までの整数をすべて加算した値
+ MAIN START
+ PUSH 0,GR1
+ LAD GR0,0 ; GR0を初期化
+ LD GR1,FST ; GR1に初項を転送
+ LOOP ADDL GR0,GR1 ; ループ先頭
+ ADDL GR1,STEP ; GR1 <- GR1 + 公差
+ CPL GR1,LST ; GR1が末項より大きい場合は終了
+ JPL FIN ; ↓
+ JUMP LOOP ; ループ終端
+ FIN POP GR1
+ RET
+ FST DC 1 ; 初項
+ LST DC 10 ; 末項
+ STEP DC 1 ; 公差
+ END
+</pre>
+ <p><samp><span class="file">sum_10.casl</span></samp>でファイル終了時の値を確認するには、次のようにします。
+
+<pre class="example"> $ <kbd>casl2 -t sum_10.casl | grep 'GR0:' | tail -1</kbd>
#0010: GR0: 55 = #0037 = 0000000000110111 = '7'
</pre>
- <h4 class="subsection">3.3.3 プログラムのステップ数を表示</h4>
+ <p><a name="Step-Count"></a>
+
+<h4 class="subsection">3.3.3 プログラムのステップ数を表示</h4>
<p><kbd>grep</kbd>と<kbd>wc</kbd>を組み合わせれば、プログラムのステップ数を表示できます。
<pre class="example"> $ <kbd>casl2 -t sum_10.casl | grep 'GR0:' | wc -l</kbd>
54
</pre>
- <h3 class="section">3.4 アセンブルと実行を別に行う</h3>
+ <p><a name="Only-Assemble"></a>
+
+<h3 class="section">3.4 アセンブルと実行を別に行う</h3>
<p><kbd>casl2</kbd>に<samp><span class="option">-O</span></samp><samp><span class="file">ファイル名</span></samp>を指定すると、オブジェクトファイルを作成できます。
<pre class="example"> $ <kbd>comet2 hello.o</kbd>
Hello, World!
</pre>
- <h3 class="section">3.5 1語の解析</h3>
+ <p><a name="Analyze-Word"></a>
+
+<h3 class="section">3.5 1語の解析</h3>
<p>CASL IIでは、1語(16ビット)を単位としてデータが処理されます。
<kbd>dumpword</kbd>は、指定した1語を10進数、16進数、2進数で表示します。
<pre class="example"> $ <kbd>dumpword '#0048'</kbd>
#0048: 72 = #0048 = 0000000001001000 = 'H'
</pre>
- <h3 class="section">3.6 CASL2ライブラリの使用</h3>
+ <p><a name="CASL2lib"></a>
+
+<h3 class="section">3.6 CASL2ライブラリの使用</h3>
<p>YACASL2の<samp><span class="file">as/casl2lib</span></samp>ディレクトリには、CASL IIで記述されたライブラリファイルが格納されています。
<h4 class="subsection">3.6.1 数値を出力する</h4>
-<p>3ã\81¨1ã\81®å\92\8cã\82\92æ±\82ã\82\81ã\82\8b<samp><span class="file">addl.casl</span></samp>ã\81§æ¼\94ç®\97çµ\90æ\9e\9cã\82\92å\87ºå\8a\9bã\81\99ã\82\8bã\81«ã\81¯ã\80\81ã\81¾ã\81\9a<samp><span class="file">addl.casl</span></samp>ã\82\92ç·¨é\9b\86ã\81\97ã\81¾ã\81\99ã\80\82CASL IIã\81®<kbd>CALL</kbd>å\91½ä»¤ã\81§<kbd>OUTL</kbd>ã\82\92å\89¯ã\83\97ã\83ã\82°ã\83©ã\83 ã\81¨ã\81\97ã\81¦å\91¼ã\81³å\87ºã\81\99ã\82\88ã\81\86ã\81«ã\81\97ã\81¾ã\81\99ã\80\82
+<p>3と1の和を求める<samp><span class="file">addl.casl</span></samp>で演算結果を出力するには、まず<samp><span class="file">addl.casl</span></samp>を編集します。CASL IIの<kbd>CALL</kbd>命令で<kbd>OUTL</kbd>を副プログラムとして呼び出します。
<pre class="example"> $ <kbd>cat addl_outl.casl</kbd>
MAIN START
<pre class="example"> $ <kbd>casl2 addl_outl.casl ~/yacasl2/as/casl2lib/outl.casl</kbd>
4
</pre>
- <p><a name="YACASL2%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89%e3%83%9e%e3%83%8b%e3%83%a5%e3%82%a2%e3%83%ab"></a>
-<a name="YACASL2_00e3_0082_00b3_00e3_0083_009e_00e3_0083_00b3_00e3_0083_0089_00e3_0083_009e_00e3_0083_008b_00e3_0083_00a5_00e3_0082_00a2_00e3_0083_00ab"></a>
+ <p><a name="Command-Manual"></a>
<h2 class="chapter">4 YACASL2コマンドマニュアル</h2>
<pre class="example"> $ <kbd>casl2 hello.casl</kbd>
</pre>
- <p>副プログラムを呼び出す場合は、複数のCASLファイルを指定することもできます。
+ <p>複数のCASLファイルを指定することで、副プログラムを呼び出せます。
<pre class="example"> $ <kbd>casl2 addl_outl.casl ~/yacasl2/as/casl2lib/outl.casl</kbd>
</pre>
<br><dt><samp><span class="option">-h</span></samp><dt><samp><span class="option">--help</span></samp><dd><kbd>dumpword</kbd>の使用方法を表示して終了します。
</dl>
-<p><a name="CASL2LIB%e3%83%9e%e3%83%8b%e3%83%a5%e3%82%a2%e3%83%ab"></a>
-<a name="CASL2LIB_00e3_0083_009e_00e3_0083_008b_00e3_0083_00a5_00e3_0082_00a2_00e3_0083_00ab"></a>
+<p><a name="CASL2LIB-Manual"></a>
<h2 class="chapter">5 CASL2LIBマニュアル</h2>
@end ifnottex
@menu
-* YACASL2の概要::
-* YACASL2のインストール::
-* YACASL2の使い方::
-* YACASL2コマンドマニュアル::
-* CASL2LIBマニュアル::
+* About::
+* Install::
+* Usage::
+* Command Manual::
+* CASL2LIB Manual::
@end menu
@contents
-@node YACASL2の概要, YACASL2のインストール, Top, Top
+@node About, Install, Top, Top
@chapter YACASL2の概要
YACASL2は、Linux上で動作するオープンソースのCASL II処理系です。CASL IIは情報処理試験で用いられるアセンブラ言語で、次の資料により仕様が公開されています。
YACASL2の操作は、端末を開いてコマンドを入力・実行することで行います。
@unnumberedsec 要件
-YACASL2は、Linux上で動作します。現在動作を確認しているのは、次のディストリビューションです。
+YACASL2は、LinuxやMac OS Xなど、UNIX系のOS上で動作します。現在動作を確認しているのは、次の環境です。
@itemize @bullet
@item
-Ubuntu Linux 9.04 / 8.04
+Ubuntu Linux 10.10
@item
Vine Linux 4.2
+
+@item
+Mac OS X 10.6
@end itemize
-インストール時に、@kbd{tar}、@kbd{gcc}、@kbd{make}が必要です。
+インストール時に、@kbd{tar}、@kbd{gcc}、@kbd{make}が必要です。Linuxの場合は、標準でインストールされていることが多いと思います。Mac OS Xの場合、@code{Xcode}をインストールしてください。
-@node YACASL2のインストール, YACASL2の使い方, YACASL2の概要, Top
+@node Install, Usage, About, Top
@chapter YACASL2のインストール
YACASL2をインストールするには、Linux上で次の作業をします。
-@enumerate
-
-@item
-YACASL2ファイルのダウンロード
-
-@item
-YACASL2ファイルの検証
-
-@item
-YACASL2ファイルの展開
-
-@item
-@kbd{casl2}、@kbd{comet2}、@kbd{dumpword}のビルド
-
-@item
-@kbd{casl2}の実行テスト
-
-@item
-詳細なテスト
-
-@item
-環境変数@code{PATH}の設定
-@end enumerate
+@menu
+* Download:: YACASL2ファイルのダウンロード
+* Verify:: YACASL2ファイルの検証
+* Expand:: YACASL2ファイルの展開
+* Build:: @kbd{casl2}、@kbd{comet2}、@kbd{dumpword}のビルド
+* Simple Test:: @kbd{casl2}の実行テスト
+* Detail Test:: 詳細なテスト
+* Path Setting:: 環境変数@code{PATH}の設定
+@end menu
+@node Download, Verify, Install, Install
@section YACASL2ファイルのダウンロード
-@uref{http://github.com/j8takagi/YACASL2, GitHub/j8takagi/YACASL2}の@uref{http://github.com/j8takagi/YACASL2/downloads, ダウンロードページ}から最新版のtgzファイルをダウンロードします(2010年3月6日現在、@code{v0.1}の@file{j8takagi-YACASL2-6323ce4.tar.gz})。
+
+次の場所から最新版の@file{tar.gz}ファイルをダウンロードします。
+@iftex
+@cartouche
+@end iftex
+@quotation
+@uref{http://github.com/j8takagi/YACASL2, GitHub/j8takagi/YACASL2}の@uref{http://github.com/j8takagi/YACASL2/downloads, ダウンロードページ}
+@end quotation
+@iftex
+@end cartouche
+@end iftex
続けて、対応する@file{md5sum}ファイルをダウンロードします(2010年3月6日現在、@file{j8takagi-YACASL2-6323ce4.tar.gz.md5sum})。
+@node Verify, Expand, Download, Install
@section YACASL2ファイルの検証
+
ダウンロードが完了したら、@kbd{md5sum}と@kbd{diff}で正しくファイルがダウンロードができているかを検証します。
@example
Files yacasl2.tar.gz.md5sum and - are identical
@end example
+@node Expand, Build, Verify, Install
@section YACASL2ファイルの展開
YACASL2ファイルをダウンロードしたら、次のコマンドで展開します。
$ @kbd{tar xvzf yacasl2.tar.gz}
@end example
+@node Build, Simple Test, Expand, Install
@section @kbd{casl2}、@kbd{comet2}、@kbd{dumpword}のビルド
展開したら、次のコマンドで@kbd{casl2}、@kbd{comet2}、@kbd{dumpword}をビルドします。
make[1]: Leaving directory ‘/home/kazubito/yacasl2/src’
@end example
+@node Simple Test, Detail Test, Build, Install
@section @kbd{casl2}の実行テスト
ビルドしたら、次のコマンドが正常に実行できるかを確認します。
Hello, World!
@end example
+@node Detail Test, Path Setting, Simple Test, Install
@section 詳細なテスト
次のコマンドを実行すると、正常にビルドできているかどうかを詳細にテストできます。
All tests are succeded.
@end example
+@node Path Setting,, Detail Test, Install
@section 環境変数@code{PATH}の設定
環境変数@code{PATH}にYACASL2のディレクトリを追加すると、どのディレクトリでも@kbd{casl2}、@kbd{comet2}、@kbd{dumpword}を実行できます。
$ @kbd{echo ’PATH=$PATH:~/yacasl2 && export PATH’ >>~/.bashrc}
@end example
-@node YACASL2の使い方, YACASL2コマンドマニュアル, YACASL2のインストール, Top
-@chapter YACASL2 の使い方
+@node Usage, Command Manual, Install, Top
+@chapter YACASL2の使い方
YACASL2 は、テキストファイルに記述されたCASLプログラムを処理します。以下の例で用いられるCASLプログラムのファイルは、テキストエディタなどで作成してください。また、インストールしたディレクトリの中にある@file{as}ディレクトリからコピーして作成することもできます。
+
+@menu
+* Simple Output:: 実行結果の出力だけを表示
+* Assemble Result:: アセンブル結果の確認
+* Register and Memory:: 実行時のレジスタとメモリを表示
+* Only Assemble:: アセンブルと実行を別に行う
+* Analyze Word:: 1語の解析
+* CASL2lib:: CASL2LIBマニュアル
+@end menu
+
+@node Simple Output, Assemble Result, Usage, Usage
@section 実行結果の出力だけを表示
インストール時にコマンド実行の確認に使った@file{hello.casl}は、次のような内容です。CASL IIのマクロ命令OUTは、文字列を出力します。
実行内容を確認するには、後述のようにCPU 内にあるレジスタやメモリの内容を表示するか、結果を出力するための処理を追加する必要があります。
-@file{sum_10.casl}は、1から10までの整数の和を求めます。
-
-@example
-$ @kbd{cat sum_10.casl}
-;;; sum_10.casl
-;;; 出力 GR0: 1から10までの整数をすべて加算した値
-MAIN START
- PUSH 0,GR1
- LAD GR0,0 ; GR0を初期化
- LD GR1,FST ; GR1に初項を転送
-LOOP ADDL GR0,GR1 ; ループ先頭
- ADDL GR1,STEP ; GR1 <- GR1 + 公差
- CPL GR1,LST ; GR1が末項より大きい場合は終了
- JPL FIN ; ↓
- JUMP LOOP ; ループ終端
-FIN POP GR1
- RET
-FST DC 1 ; 初項
-LST DC 10 ; 末項
-STEP DC 1 ; 公差
- END
-@end example
-
-このプログラムも、オプションなしで実行した場合には結果が出力されません。
-@example
-$ @kbd{casl2 sum_10.casl}
-$
-@end example
-
+@node Assemble Result, Register and Memory, Simple Output, Usage
@section アセンブル結果の確認
+
casl2の処理途中で行われるアセンブルの結果を表示するには、オプション@option{-a}を指定します。また、ラベルとアドレスの対応表を表示するには、オプション@option{-l}を指定します。
次のコマンドでは@file{hello.casl}の、ラベルとアドレスの対応表と、アセンブル結果と、実行結果が表示されます。OUTはアセンブラ命令で複数の機械語命令で構成されているため、命令行1行に対して、複数行のコードが生成されます。
なお、オプション@option{-A}を指定すると、アセンブル結果が表示される時点で処理が終了します。仮想マシンCOMET II での実行は行われません。
+@node Register and Memory, Only Assemble, Assemble Result, Usage
@section 実行時のレジスタとメモリを表示
+
YACASL2では実行中のCPUのレジスタとメモリの内容をそれぞれ、@option{-t}と@option{-d}を指定することで表示できます。
また、@option{-M}で、仮想マシンCOMET II のメモリ容量を語(16 ビット)単位で指定できます。小さいプログラムを実行するときは、メモリ容量を小さくすれば結果が見やすくなります。
+@menu
+* Register Specify:: 特定のレジスタを表示
+* Ending Value:: プログラム終了時の値を表示
+* Step Count:: プログラムのステップ数を表示
+@end menu
+
@file{addl.casl}に必要なメモリ容量は8語のため、次のようにCPUのレジスタとメモリの内容を表示できます。
@example
#0004: 0000: 1010 0005 2210 0006 8100 0003 0001 0000
@end example
+@node Register Specify, Ending Value, Register and Memory, Register and Memory
@subsection 特定のレジスタを表示
@file{addl.casl}のレジスタやメモリの中で、実行中に値が変化しているのはGR1だけです。こうした場合は、@kbd{grep}を使って表示される内容を絞り込むことで動作を検証しやすくなります。
@tab @code{ADDL GR1,B}
@end multitable
+@node Ending Value, Step Count, Register Specify, Register and Memory
@subsection プログラム終了時の値を表示
@kbd{grep}と@kbd{tail}を組み合わせれば、プログラム終了時の値を表示できます。
+@file{addl.casl}でプログラム終了時の値を確認するには、次のようにします。
+
@example
$ @kbd{casl2 -t addl.casl | grep 'GR1:' | tail -1}
#0004: GR1: 4 = #0004 = 0000000000000100
@end example
+@file{sum_10.casl}は、1から10までの整数の和を求めます。
+
+@example
+$ @kbd{cat sum_10.casl}
+;;; sum_10.casl
+;;; 出力 GR0: 1から10までの整数をすべて加算した値
+MAIN START
+ PUSH 0,GR1
+ LAD GR0,0 ; GR0を初期化
+ LD GR1,FST ; GR1に初項を転送
+LOOP ADDL GR0,GR1 ; ループ先頭
+ ADDL GR1,STEP ; GR1 <- GR1 + 公差
+ CPL GR1,LST ; GR1が末項より大きい場合は終了
+ JPL FIN ; ↓
+ JUMP LOOP ; ループ終端
+FIN POP GR1
+ RET
+FST DC 1 ; 初項
+LST DC 10 ; 末項
+STEP DC 1 ; 公差
+ END
+@end example
+
+@file{sum_10.casl}でファイル終了時の値を確認するには、次のようにします。
+
@example
$ @kbd{casl2 -t sum_10.casl | grep 'GR0:' | tail -1}
#0010: GR0: 55 = #0037 = 0000000000110111 = '7'
@end example
+@node Step Count,, Ending Value, Register and Memory
@subsection プログラムのステップ数を表示
@kbd{grep}と@kbd{wc}を組み合わせれば、プログラムのステップ数を表示できます。
54
@end example
+@node Only Assemble, Analyze Word, Register and Memory, Usage
@section アセンブルと実行を別に行う
@kbd{casl2}に@option{-O}@file{ファイル名}を指定すると、オブジェクトファイルを作成できます。
Hello, World!
@end example
+@node Analyze Word, CASL2lib, Only Assemble, Usage
@section 1語の解析
CASL IIでは、1語(16ビット)を単位としてデータが処理されます。
#0048: 72 = #0048 = 0000000001001000 = 'H'
@end example
+@node CASL2lib,, Analyze Word, Usage
@section CASL2ライブラリの使用
YACASL2の@file{as/casl2lib}ディレクトリには、CASL IIで記述されたライブラリファイルが格納されています。
4
@end example
-@node YACASL2コマンドマニュアル,CASL2LIBマニュアル,YACASL2の使い方,TOP
+@node Command Manual,CASL2LIB Manual,Usage,TOP
@chapter YACASL2コマンドマニュアル
@cindex YACASL2コマンドマニュアル
@kbd{dumpword}の使用方法を表示して終了します。
@end table
-@node CASL2LIBマニュアル,,YACASL2コマンドマニュアル,TOP
+@node CASL2LIB Manual,,Command Manual,TOP
@chapter CASL2LIBマニュアル
@menu