3 <title>YACASL2 - Linux上のCASL II処理系</title>
4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
5 <meta name="description" content="YACASL2 - Linux上のCASL II処理系">
6 <meta name="generator" content="makeinfo 4.11">
7 <link title="Top" rel="top" href="#Top">
8 <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
10 Copyright (C) 2010 j8takagi-->
11 <meta http-equiv="Content-Style-Type" content="text/css">
12 <style type="text/css"><!--
13 pre.display { font-family:inherit }
14 pre.format { font-family:inherit }
15 pre.smalldisplay { font-family:inherit; font-size:smaller }
16 pre.smallformat { font-family:inherit; font-size:smaller }
17 pre.smallexample { font-size:smaller }
18 pre.smalllisp { font-size:smaller }
19 span.sc { font-variant:small-caps }
20 span.roman { font-family:serif; font-weight:normal; }
21 span.sansserif { font-family:sans-serif; font-weight:normal; }
26 background-color: #EEE;
40 background-color: navy;
56 text-decoration: underline;
60 font-family: monospace;
68 padding: 0.5em 1em 0.5em 1em;
75 text-decoration: none;
85 border: 1px solid #CCC;
86 border-collapse: collapse; /* 枠線の表示方法 */
89 table.cartouche, table.cartouche th, table.cartouche td {
93 pre.example .command, pre.example .option {
95 background-color: inherit;
101 border: 2px solid green;
106 <h1 class="settitle">YACASL2 - Linux上のCASL II処理系</h1>
109 <div class="contents">
110 <h2>Table of Contents</h2>
112 <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>
114 <li><a href="#YACASL2_00e3_0081_00ae_00e6_00a6_0082_00e8_00a6_0081">要件</a>
116 <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>
118 <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>
119 <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>
120 <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>
121 <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 <samp><span class="command">casl2</span></samp>、<samp><span class="command">comet2</span></samp>、<samp><span class="command">dumpword</span></samp>のビルド</a>
122 <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 <samp><span class="command">casl2</span></samp>の実行テスト</a>
123 <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>
124 <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 環境変数<var>PATH</var>の設定</a>
126 <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>
128 <li><a href="#YACASL2_00e3_0081_00ae_00e4_00bd_00bf_00e3_0081_0084_00e6_0096_00b9">3.1 実行結果の出力だけを表示</a>
129 <li><a href="#YACASL2_00e3_0081_00ae_00e4_00bd_00bf_00e3_0081_0084_00e6_0096_00b9">3.2 アセンブル結果の確認</a>
130 <li><a href="#YACASL2_00e3_0081_00ae_00e4_00bd_00bf_00e3_0081_0084_00e6_0096_00b9">3.3 実行時のレジスタとメモリを表示</a>
132 <li><a href="#YACASL2_00e3_0081_00ae_00e4_00bd_00bf_00e3_0081_0084_00e6_0096_00b9">3.3.1 特定のレジスタを表示</a>
133 <li><a href="#YACASL2_00e3_0081_00ae_00e4_00bd_00bf_00e3_0081_0084_00e6_0096_00b9">3.3.2 プログラム終了時の値を表示</a>
134 <li><a href="#YACASL2_00e3_0081_00ae_00e4_00bd_00bf_00e3_0081_0084_00e6_0096_00b9">3.3.3 プログラムのステップ数を表示</a>
136 <li><a href="#YACASL2_00e3_0081_00ae_00e4_00bd_00bf_00e3_0081_0084_00e6_0096_00b9">3.4 アセンブルと実行を別に行う</a>
137 <li><a href="#YACASL2_00e3_0081_00ae_00e4_00bd_00bf_00e3_0081_0084_00e6_0096_00b9">3.5 1語の解析</a>
138 <li><a href="#YACASL2_00e3_0081_00ae_00e4_00bd_00bf_00e3_0081_0084_00e6_0096_00b9">3.6 CASL2ライブラリの使用</a>
140 <li><a href="#YACASL2_00e3_0081_00ae_00e4_00bd_00bf_00e3_0081_0084_00e6_0096_00b9">3.6.1 数値を出力する</a>
143 <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>
145 <li><a href="#casl2">4.1 <samp><span class="command">casl2</span></samp></a>
147 <li><a href="#casl2">オプション</a>
149 <li><a href="#comet2">4.2 <samp><span class="command">comet2</span></samp></a>
151 <li><a href="#comet2">オプション</a>
153 <li><a href="#dumpword">4.3 <samp><span class="command">dumpword</span></samp></a>
155 <li><a href="#dumpword">オプション</a>
158 <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>
160 <li><a href="#ABS">5.1 <samp><span class="command">ABS</span></samp> - <samp><span class="file">abs.casl</span></samp></a>
162 <li><a href="#ABS">入力</a>
163 <li><a href="#ABS">出力</a>
164 <li><a href="#ABS">依存する副プログラム</a>
165 <li><a href="#ABS">使用例</a>
167 <li><a href="#ADDL32">5.2 <samp><span class="command">ADDL32</span></samp> - <samp><span class="file">addl32.casl</span></samp></a>
169 <li><a href="#ADDL32">入力</a>
170 <li><a href="#ADDL32">出力</a>
171 <li><a href="#ADDL32">使用例</a>
172 <li><a href="#ADDL32">依存する副プログラム</a>
174 <li><a href="#DIVA">5.3 <samp><span class="command">DIVA</span></samp> -<samp><span class="file">diva.casl</span></samp></a>
176 <li><a href="#DIVA">入力</a>
177 <li><a href="#DIVA">出力</a>
178 <li><a href="#DIVA">依存する副プログラム</a>
180 <li><a href="#DIVL">5.4 <samp><span class="command">DIVL</span></samp> - <samp><span class="file">divl.casl</span></samp></a>
182 <li><a href="#DIVL">入力</a>
183 <li><a href="#DIVL">出力</a>
184 <li><a href="#DIVL">依存する副プログラム</a>
185 <li><a href="#DIVL">使用例</a>
187 <li><a href="#INL">5.5 <samp><span class="command">INL</span></samp> - <samp><span class="file">inl.casl</span></samp></a>
188 <li><a href="#L2STR">5.6 <samp><span class="command">L2STR</span></samp> - <samp><span class="file">l2str.casl</span></samp></a>
189 <li><a href="#MAX">5.7 <samp><span class="command">MAX</span></samp> - <samp><span class="file">max.casl</span></samp></a>
190 <li><a href="#MINIM">5.8 <samp><span class="command">MINIM</span></samp> - <samp><span class="file">minim.casl</span></samp></a>
191 <li><a href="#MULA">5.9 <samp><span class="command">MULA</span></samp> - <samp><span class="file">mula.casl</span></samp></a>
192 <li><a href="#MULL">5.10 <samp><span class="command">MULL</span></samp> - <samp><span class="file">mull.casl</span></samp></a>
193 <li><a href="#OUTA">5.11 <samp><span class="command">OUTA</span></samp> - <samp><span class="file">outa.casl</span></samp></a>
194 <li><a href="#OUTB">5.12 <samp><span class="command">OUTB</span></samp> - <samp><span class="file">outb.casl</span></samp></a>
195 <li><a href="#OUTD_005fQ15">5.13 <samp><span class="command">OUTD_Q15</span></samp> - <samp><span class="file">outd_q15.casl</span></samp></a>
196 <li><a href="#OUTL">5.14 <samp><span class="command">OUTL</span></samp> - <samp><span class="file">outl.casl</span></samp></a>
197 <li><a href="#REV">5.15 <samp><span class="command">REV</span></samp> - <samp><span class="file">rev.casl</span></samp></a>
198 <li><a href="#STR2L">5.16 <samp><span class="command">STR2L</span></samp> - <samp><span class="file">str2l.casl</span></samp></a>
203 <p><a name="YACASL2%e3%81%ae%e6%a6%82%e8%a6%81"></a>
204 <a name="YACASL2_00e3_0081_00ae_00e6_00a6_0082_00e8_00a6_0081"></a>
206 <h2 class="chapter">1 YACASL2の概要</h2>
208 <p>YACASL2は、Linux上で動作するオープンソースのCASL II処理系です。CASL IIは情報処理試験で用いられるアセンブラ言語で、次の資料により仕様が公開されています。
211 <a href="http://www.jitec.ipa.go.jp/1_00topic/topic_20081027_hani_yougo.pdf">試験で使用する情報処理用語・プログラム言語など(2008年10月版)</a>[PDFファイル]
215 <p>YACASL2は、CASL IIアセンブラ言語で記述されたファイルをアセンブルし、仮想マシンCOMET II上で実行します。アセンブルと実行は、連続で行うことも別々に行うことも可能です。
216 YACASL2の動作はCASL IIの仕様に準拠しているため、情報処理試験の問題をはじめ各種参考書やサイトに記載されたCASL IIのプログラムをそのままアセンブルして実行できます。また、本パッケージ中にCASL IIのサンプルプログラムが多数収録されています。
218 <p>YACASL2は、「ふつうの処理系」として動作します。ほかの多くのCASL IIエミュレータと違い、デバッガとして動作したり、コンピュータ内部の模式図を表示したりすることはありません。そのかわり、YACASL2は、次のような動作内容をすべてテキストで出力します。
230 <p>出力された動作内容は、GNU/Linuxのさまざまなツール、たとえば<samp><span class="command">cat</span></samp>、<samp><span class="command">less</span></samp>、<samp><span class="command">grep</span></samp>、<samp><span class="command">wc</span></samp>などを使って解析できます。
232 <p>YACASL2の操作は、端末を開いてコマンドを入力・実行することで行います。
234 <h3 class="unnumberedsec">要件</h3>
236 <p>YACASL2は、Linux上で動作します。現在動作を確認しているのは、次のディストリビューションです。
239 <li>Ubuntu Linux 9.04 / 8.04
244 <p>インストール時に、<samp><span class="command">tar</span></samp>、<samp><span class="command">gcc</span></samp>、<samp><span class="command">make</span></samp>が必要です。
246 <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>
247 <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>
249 <h2 class="chapter">2 YACASL2のインストール</h2>
251 <p>YACASL2をインストールするには、Linux上で次の作業をします。
255 <li>YACASL2ファイルのダウンロード
261 <li><samp><span class="command">casl2</span></samp>、<samp><span class="command">comet2</span></samp>、<samp><span class="command">dumpword</span></samp>のビルド
263 <li><samp><span class="command">casl2</span></samp>の実行テスト
267 <li>環境変数<var>PATH</var>の設定
270 <h3 class="section">2.1 YACASL2ファイルのダウンロード</h3>
272 <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日現在、<var>v0.1</var>の<samp><span class="file">j8takagi-YACASL2-6323ce4.tar.gz</span></samp>)。
274 <p>続けて、対応する<samp><span class="file">md5sum</span></samp>フィルをダウンロードします(2010年3月6日現在、<samp><span class="file">j8takagi-YACASL2-6323ce4.tar.gz.md5sum</span></samp>)。
276 <h3 class="section">2.2 YACASL2ファイルの検証</h3>
278 <p>ダウンロードが完了したら、<samp><span class="command">md5sum</span></samp>と<samp><span class="command">diff</span></samp>で正しくファイルがダウンロードができているかを検証します。
280 <pre class="example"> $ <samp><span class="command">md5sum yacasl2.tar.gz | diff -s yacasl2.tar.gz.md5sum -</span></samp>
281 Files yacasl2.tar.gz.md5sum and - are identical
283 <h3 class="section">2.3 YACASL2ファイルの展開</h3>
285 <p>YACASL2ファイルをダウンロードしたら、次のコマンドで展開します。
287 <pre class="example"> $ <samp><span class="command">tar xvzf yacasl2.tar.gz</span></samp>
289 <h3 class="section">2.4 <samp><span class="command">casl2</span></samp>、<samp><span class="command">comet2</span></samp>、<samp><span class="command">dumpword</span></samp>のビルド</h3>
291 <p>展開したら、次のコマンドで<samp><span class="command">casl2</span></samp>、<samp><span class="command">comet2</span></samp>、<samp><span class="command">dumpword</span></samp>をビルドします。
293 <pre class="example"> $ <samp><span class="command">cd yacasl2</span></samp>
294 $ <samp><span class="command">make</span></samp>
296 make[1]: Entering directory ‘/home/kazubito/yacasl2/src’
297 gcc -c -g -Wall -I ../include casl2.c
298 gcc -c -g -Wall -I ../include word.c
299 gcc -c -g -Wall -I ../include hash.c
300 gcc -c -g -Wall -I ../include cerr.c
301 gcc -c -g -Wall -I ../include struct.c
302 gcc -c -g -Wall -I ../include cmd.c
303 gcc -c -g -Wall -I ../include assemble.c
304 gcc -c -g -Wall -I ../include token.c
305 gcc -c -g -Wall -I ../include label.c
306 gcc -c -g -Wall -I ../include macro.c
307 gcc -c -g -Wall -I ../include exec.c
308 gcc -c -g -Wall -I ../include dump.c
309 gcc -g -Wall -I ../include -o ../casl2 casl2.o word.o hash.o cerr.o st
310 ruct.o cmd.o assemble.o token.o label.o macro.o exec.o dump.o
311 gcc -c -g -Wall -I ../include comet2.c
312 gcc -g -Wall -I ../include -o ../comet2 comet2.o word.o hash.o cerr.o
313 struct.o cmd.o exec.o dump.o
314 gcc -c -g -Wall -I ../include dumpword.c
315 gcc -g -Wall -I ../include -o ../dumpword dumpword.o word.o cerr.o
316 make[1]: Leaving directory ‘/home/kazubito/yacasl2/src’
318 <h3 class="section">2.5 <samp><span class="command">casl2</span></samp>の実行テスト</h3>
320 <p>ビルドしたら、次のコマンドが正常に実行できるかを確認します。
321 正常に実行された場合は、「Hello, World!」と表示されます。
323 <pre class="example"> $ <samp><span class="command">./casl2 as/hello.casl</span></samp>
326 <h3 class="section">2.6 詳細なテスト</h3>
328 <p>次のコマンドを実行すると、正常にビルドできているかどうかを詳細にテストできます。
330 <pre class="example"> $ <samp><span class="command">make check</span></samp>
331 194 / 194 tests passed. Details in /home/kazubito/yacasl2/test/integra
333 All tests are succeded.
334 149 / 149 tests passed. Details in /home/kazubito/yacasl2/test/integra
336 All tests are succeded.
337 4 / 4 tests passed. Details in /home/kazubito/yacasl2/test/integration
339 All tests are succeded.
341 <h3 class="section">2.7 環境変数<var>PATH</var>の設定</h3>
343 <p>環境変数<var>PATH</var>にYACASL2のディレクトリを追加すると、どのディレクトリでも<samp><span class="command">casl2</span></samp>、<samp><span class="command">comet2</span></samp>、<samp><span class="command">dumpword</span></samp>を実行できます。
345 <p>環境変数の設定方法は使っているシェルによって異なります。シェルは、次のコマンドで確認できます。
347 <pre class="example"> $ <samp><span class="command">echo $SHELL</span></samp>
350 <p>現在もっとも多く使われているシェルは、BASHでしょう。BASHでは、次のコマンドを実行すると環境変数<var>PATH</var>にYACASL2のディレクトリが追加されます。
352 <pre class="example"> $ <samp><span class="command">PATH=$PATH:~/yacasl2 && export PATH</span></samp>
354 <p>シェルの初期設定ファイルに上記のコマンドを追加すれば、今後ログインした後は自動的にどのディレクトリでも <samp><span class="command">casl2</span></samp>、<samp><span class="command">comet2</span></samp>、<samp><span class="command">dumpword</span></samp>を実行できます。BASHではホームディレクトリにある<samp><span class="file">.bashrc</span></samp>が初期設定ファイルのため、次のコマンドで追加されます。
356 <pre class="example"> $ <samp><span class="command">echo ’PATH=$PATH:~/yacasl2 && export PATH’ >>~/.bashrc</span></samp>
358 <p><a name="YACASL2%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9"></a>
359 <a name="YACASL2_00e3_0081_00ae_00e4_00bd_00bf_00e3_0081_0084_00e6_0096_00b9"></a>
361 <h2 class="chapter">3 YACASL2 の使い方</h2>
363 <p>YACASL2 は、テキストファイルに記述されたCASLプログラムを処理します。以下の例で用いられるCASLプログラムのファイルは、テキストエディタなどで作成してください。また、インストールしたディレクトリの中にある<samp><span class="file">as</span></samp>ディレクトリからコピーして作成することもできます。
365 <h3 class="section">3.1 実行結果の出力だけを表示</h3>
367 <p>インストール時にコマンド実行の確認に使った<samp><span class="file">hello.casl</span></samp>は、次のような内容です。CASL IIのマクロ命令OUTは、文字列を出力します。
369 <pre class="example"> $ <samp><span class="command">cat hello.casl</span></samp>
373 OBUF DC ’Hello, World!’
377 <p>次のコマンドを実行すると、CASL II のアセンブルと仮想マシン COMET II 上での実行が連続で行われ、文字列が出力されます。
379 <pre class="example"> $ <samp><span class="command">casl2 hello.casl</span></samp>
382 <p><samp><span class="file">addl.casl</span></samp>は、3と1の和を求めます。
384 <pre class="example"> $ <samp><span class="command">cat addl.casl</span></samp>
394 <p>このプログラムには出力命令がないため、オプションなしで実行した場合には結果が出力されません。
396 <pre class="example"> $ <samp><span class="command">casl2 addl.casl</span></samp>
399 <p>実行内容を確認するには、後述のようにCPU 内にあるレジスタやメモリの内容を表示するか、結果を出力するための処理を追加する必要があります。
401 <p><samp><span class="file">sum_10.casl</span></samp>は、1から10までの整数の和を求めます。
403 <pre class="example"> $ <samp><span class="command">cat sum_10.casl</span></samp>
405 ;;; 出力 GR0: 1から10までの整数をすべて加算した値
409 LD GR1,FST ; GR1に初項を転送
410 LOOP ADDL GR0,GR1 ; ループ先頭
411 ADDL GR1,STEP ; GR1 <- GR1 + 公差
412 CPL GR1,LST ; GR1が末項より大きい場合は終了
422 <p>このプログラムも、オプションなしで実行した場合には結果が出力されません。
423 <pre class="example"> $ <samp><span class="command">casl2 sum_10.casl</span></samp>
426 <h3 class="section">3.2 アセンブル結果の確認</h3>
428 <p>casl2の処理途中で行われるアセンブルの結果を表示するには、オプション<samp><span class="option">-a</span></samp>を指定します。また、ラベルとアドレスの対応表を表示するには、オプション<samp><span class="option">-l</span></samp>を指定します。
430 <p>次のコマンドでは<samp><span class="file">hello.casl</span></samp>の、ラベルとアドレスの対応表と、アセンブル結果と、実行結果が表示されます。OUTはアセンブラ命令で複数の機械語命令で構成されているため、命令行1行に対して、複数行のコードが生成されます。
432 <pre class="example"> $ <samp><span class="command">casl2 -a -l hello.casl</span></samp>
434 Assemble hello.casl (0)
437 MAIN.LEN ---> #0020
439 MAIN.OBUF ---> #0013
441 Assemble hello.casl (1)
442 hello.casl: 1:MAIN START
443 hello.casl: 2: OUT OBUF,LEN
466 hello.casl: 4:OBUF DC 'Hello, World!'
480 hello.casl: 5:LEN DC 13
485 <p><samp><span class="file">addl.casl</span></samp>の、ラベルとアドレスの対応表と、アセンブル結果は、次のようになります。
487 <pre class="example"> $ <samp><span class="command">casl2 -a -l addl.casl</span></samp>
489 Assemble addl.casl (0)
496 Assemble addl.casl (1)
497 addl.casl: 1:;;; ADDL r,adr
498 addl.casl: 2:MAIN START
499 addl.casl: 3: LD GR1,A
502 addl.casl: 4: ADDL GR1,B
513 <p>なお、オプション<samp><span class="option">-A</span></samp>を指定すると、アセンブル結果が表示される時点で処理が終了します。仮想マシンCOMET II での実行は行われません。
515 <h3 class="section">3.3 実行時のレジスタとメモリを表示</h3>
517 <p>YACASL2では実行中のCPUのレジスタとメモリの内容をそれぞれ、<samp><span class="option">-t</span></samp>と<samp><span class="option">-d</span></samp>を指定することで表示できます。
519 <p>また、<samp><span class="option">-M</span></samp>で、仮想マシンCOMET II のメモリ容量を語(16 ビット)単位で指定できます。小さいプログラムを実行するときは、メモリ容量を小さくすれば結果が見やすくなります。
521 <p><samp><span class="file">addl.casl</span></samp>に必要なメモリ容量は8語のため、次のようにCPUのレジスタとメモリの内容を表示できます。
523 <pre class="example"> $ <samp><span class="command">casl2 -t -d -M8 addl.casl | less</span></samp>
525 Assemble addl.casl (0)
527 Assemble addl.casl (1)
529 Executing machine codes
531 #0000: GR0: 0 = #0000 = 0000000000000000
532 #0000: GR1: 0 = #0000 = 0000000000000000
533 #0000: GR2: 0 = #0000 = 0000000000000000
534 #0000: GR3: 0 = #0000 = 0000000000000000
535 #0000: GR4: 0 = #0000 = 0000000000000000
536 #0000: GR5: 0 = #0000 = 0000000000000000
537 #0000: GR6: 0 = #0000 = 0000000000000000
538 #0000: GR7: 0 = #0000 = 0000000000000000
539 #0000: SP: 8 = #0008 = 0000000000001000
540 #0000: PR: 0 = #0000 = 0000000000000000
541 #0000: FR (OF SF ZF): 000
543 #0000: adr : 0000 0001 0002 0003 0004 0005 0006 0007
544 #0000: 0000: 1010 0005 2210 0006 8100 0003 0001 0000
546 #0002: GR0: 0 = #0000 = 0000000000000000
547 #0002: GR1: 3 = #0003 = 0000000000000011
548 #0002: GR2: 0 = #0000 = 0000000000000000
549 #0002: GR3: 0 = #0000 = 0000000000000000
550 #0002: GR4: 0 = #0000 = 0000000000000000
551 #0002: GR5: 0 = #0000 = 0000000000000000
552 #0002: GR6: 0 = #0000 = 0000000000000000
553 #0002: GR7: 0 = #0000 = 0000000000000000
554 #0002: SP: 8 = #0008 = 0000000000001000
555 #0002: PR: 2 = #0002 = 0000000000000010
556 #0002: FR (OF SF ZF): 000
558 #0002: adr : 0000 0001 0002 0003 0004 0005 0006 0007
559 #0002: 0000: 1010 0005 2210 0006 8100 0003 0001 0000
561 #0004: GR0: 0 = #0000 = 0000000000000000
562 #0004: GR1: 4 = #0004 = 0000000000000100
563 #0004: GR2: 0 = #0000 = 0000000000000000
564 #0004: GR3: 0 = #0000 = 0000000000000000
565 #0004: GR4: 0 = #0000 = 0000000000000000
566 #0004: GR5: 0 = #0000 = 0000000000000000
567 #0004: GR6: 0 = #0000 = 0000000000000000
568 #0004: GR7: 0 = #0000 = 0000000000000000
569 #0004: SP: 8 = #0008 = 0000000000001000
570 #0004: PR: 4 = #0004 = 0000000000000100
571 #0004: FR (OF SF ZF): 000
573 #0004: adr : 0000 0001 0002 0003 0004 0005 0006 0007
574 #0004: 0000: 1010 0005 2210 0006 8100 0003 0001 0000
576 <h4 class="subsection">3.3.1 特定のレジスタを表示</h4>
578 <p><samp><span class="file">addl.casl</span></samp>のレジスタやメモリの中で、実行中に値が変化しているのはGR1だけです。こうした場合は、<samp><span class="command">grep</span></samp>を使って表示される内容を絞り込むことで動作を検証しやすくなります。
580 <pre class="example"> $ <samp><span class="command">casl2 -t addl.casl | grep 'GR1:'</span></samp>
581 #0000: GR1: 0 = #0000 = 0000000000000000
582 #0002: GR1: 3 = #0003 = 0000000000000011
583 #0004: GR1: 4 = #0004 = 0000000000000100
585 <p>この内容を、先に出力したアセンブル結果と引き比べてください。
586 次の表のように、PRとGR1、命令行が対応していることがわかります。
588 <p><table summary=""><tr align="left"><td valign="top" width="30%">PR </td><td valign="top" width="30%">GR1 </td><td valign="top" width="40%">命令行
589 <br></td></tr><tr align="left"><td valign="top" width="30%">#0000
590 </td><td valign="top" width="30%">#0000
591 <br></td></tr><tr align="left"><td valign="top" width="30%">#0002
592 </td><td valign="top" width="30%">#0003
593 </td><td valign="top" width="40%"><code>LD GR1,A</code>
594 <br></td></tr><tr align="left"><td valign="top" width="30%">#0004
595 </td><td valign="top" width="30%">#0004
596 </td><td valign="top" width="40%"><code>ADDL GR1,B</code>
597 <br></td></tr></table>
599 <h4 class="subsection">3.3.2 プログラム終了時の値を表示</h4>
601 <p><samp><span class="command">grep</span></samp>と<samp><span class="command">tail</span></samp>を組み合わせれば、プログラム終了時の値を表示できます。
603 <pre class="example"> $ <samp><span class="command">casl2 -t addl.casl | grep 'GR1:' | tail -1</span></samp>
604 #0004: GR1: 4 = #0004 = 0000000000000100
606 <pre class="example"> $ <samp><span class="command">casl2 -t sum_10.casl | grep 'GR0:' | tail -1</span></samp>
607 #0010: GR0: 55 = #0037 = 0000000000110111 = '7'
609 <h4 class="subsection">3.3.3 プログラムのステップ数を表示</h4>
611 <p><samp><span class="command">grep</span></samp>と<samp><span class="command">wc</span></samp>を組み合わせれば、プログラムのステップ数を表示できます。
613 <pre class="example"> $ <samp><span class="command">casl2 -t hello.casl | grep 'GR1:' | wc -l</span></samp>
616 <pre class="example"> $ <samp><span class="command">casl2 -t addl.casl | grep 'GR1:' | wc -l</span></samp>
619 <p><samp><span class="file">sum_10.casl</span></samp>はプログラム内にループがあるため、ステップ数が大きくなります。
621 <pre class="example"> $ <samp><span class="command">casl2 -t sum_10.casl | grep 'GR0:' | wc -l</span></samp>
624 <h3 class="section">3.4 アセンブルと実行を別に行う</h3>
626 <p><samp><span class="command">casl2</span></samp>に<samp><span class="option">-O</span></samp><samp><span class="file">ファイル名</span></samp>を指定すると、オブジェクトファイルを作成できます。
628 <pre class="example"> $ <samp><span class="command">casl2 -Ohello.o hello.casl</span></samp>
630 <p>作成されたオブジェクトファイルの内容は、<samp><span class="command">od</span></samp>を使って確認できます。テキストファイルではないため、<samp><span class="command">cat</span></samp>などでは確認できません。
632 <pre class="example"> $ <samp><span class="command">od -t x2 hello.o</span></samp>
633 0000000 7001 0000 7002 0000 1210 0013 1220 0020
634 0000020 f000 0002 1210 0021 1220 0022 f000 0002
635 0000040 7120 7110 8100 0048 0065 006c 006c 006f
636 0000060 002c 0020 0057 006f 0072 006c 0064 0021
637 0000100 000d 000a 0001
640 <p>オブジェクトファイルの実行には、<samp><span class="command">comet2</span></samp>を使います。
642 <pre class="example"> $ <samp><span class="command">comet2 hello.o</span></samp>
645 <h3 class="section">3.5 1語の解析</h3>
647 <p>CASL IIでは、1語(16ビット)を単位としてデータが処理されます。
648 <samp><span class="command">dumpword</span></samp>は、指定した1語を10進数、16進数、2進数で表示します。
650 <pre class="example"> $ <samp><span class="command">dumpword 72</span></samp>
651 72: 72 = #0048 = 0000000001001000 = 'H'
653 <p>マイナスの数は、次のように指定します。
655 <pre class="example"> $ <samp><span class="command">dumpword -- -72</span></samp>
656 -72: -72 = #FFB8 = 1111111110111000
660 <pre class="example"> $ <samp><span class="command">dumpword '#0048'</span></samp>
661 #0048: 72 = #0048 = 0000000001001000 = 'H'
663 <h3 class="section">3.6 CASL2ライブラリの使用</h3>
665 <p>YACASL2の<samp><span class="file">as/casl2lib</span></samp>ディレクトリには、CASL IIで記述されたライブラリファイルが格納されています。
667 <p>このフォルダには、たとえば次のようなプログラムが含まれています。
670 <dt><samp><span class="option">OUTL</span></samp><dd><samp><span class="file">outl.casl</span></samp>。GR1に格納された値を、0〜65535の数値として出力します。
672 <br><dt><samp><span class="option">OUTA</span></samp><dd><samp><span class="file">outa.casl</span></samp>。GR1に格納された値を、-32767〜32767の数値として出力します。
674 <br><dt><samp><span class="option">MULL</span></samp><dd><samp><span class="file">mull.casl</span></samp>。GR1とGR2に格納された値を0〜65535の整数と見なし、積をGR3に格納します。
676 <br><dt><samp><span class="option">DIVL</span></samp><dd><samp><span class="file">divl.casl</span></samp>。GR1とGR2に格納された値を0〜65535の整数と見なし、商をGR3、剰余をGR0に格納します。
679 <h4 class="subsection">3.6.1 数値を出力する</h4>
681 <p>3と1の和を求める<samp><span class="file">addl.casl</span></samp>で演算結果を出力するには、まず<samp><span class="file">addl.casl</span></samp>を編集します。CASL IIの<samp><span class="command">CALL</span></samp>命令で<samp><span class="command">OUTL</span></samp>を副プログラムとして呼び出すようにします。
683 <pre class="example"> $ <samp><span class="command">cat addl_outl.casl</span></samp>
687 <strong>CALL OUTL</strong>
693 <p>変更したら<samp><span class="command">casl2</span></samp>を、複数のファイルを指定して実行します。
695 <pre class="example"> $ <samp><span class="command">casl2 addl_outl.casl ~/yacasl2/as/casl2lib/outl.casl</span></samp>
698 <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>
699 <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>
701 <h2 class="chapter">4 YACASL2コマンドマニュアル</h2>
703 <p><a name="index-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-1"></a>
704 YACASL2のコマンドとオプションについて解説します。
706 <p><a name="casl2"></a>
708 <h3 class="section">4.1 <samp><span class="command">casl2</span></samp></h3>
710 <p><a name="index-casl2-2"></a><a name="index-casl2-3"></a>
711 <samp><span class="command">casl2</span></samp>は、引数として指定されたCASLファイルをアセンブルし、仮想マシンCOMET II上で実行します。CASLファイルは、アセンブラ言語CASL IIで記述されたテキストファイルです。引数が指定されない場合は、エラーメッセージを表示して終了します。
713 <pre class="example"> $ <samp><span class="command">casl2 hello.casl</span></samp>
715 <p>副プログラムを呼び出す場合は、複数のCASLファイルを指定することもできます。
717 <pre class="example"> $ <samp><span class="command">casl2 addl_outl.casl ~/yacasl2/as/casl2lib/outl.casl</span></samp>
719 <h4 class="unnumberedsubsec">オプション</h4>
721 <p><samp><span class="command">casl2</span></samp>は、次のオプションを指定できます。
724 <dt><samp><span class="option">-s</span></samp><dt><samp><span class="option">--source</span></samp><dd>CASLファイルの内容を表示します。
726 <br><dt><samp><span class="option">-l</span></samp><dt><samp><span class="option">--label</span></samp><dd>ラベルの一覧を表示し、ほかの作業を続行します。
728 <br><dt><samp><span class="option">-L</span></samp><dt><samp><span class="option">--labelonly</span></samp><dd>ラベルの一覧を表示して終了します。
730 <br><dt><samp><span class="option">-a</span></samp><dt><samp><span class="option">--assembledetail</span></samp><dd>アセンブル詳細結果を表示し、ほかの作業を続行します。
732 <br><dt><samp><span class="option">-A</span></samp><dt><samp><span class="option">--show-all</span></samp><dd>アセンブル詳細結果を表示して終了します。
734 <br><dt><samp><span class="option">-o<OBJECTFILE></span></samp><dt><samp><span class="option">--assembleout</span></samp><dd>アセンブル結果をオブジェクトファイル<samp><span class="file"><OBJECTFILE></span></samp>に出力し、ほかの作業を続行します。出力されたオブジェクトファイルは、<samp><span class="command">comet2</span></samp>で実行できます。オブジェクトファイルを指定しない場合、出力先は<samp><span class="file">a.o</span></samp>です。オブジェクトファイルは1つだけ指定できます。
736 <br><dt><samp><span class="option">-O<OBJECTFILE></span></samp><dt><samp><span class="option">--assembleoutonly</span></samp><dd>アセンブル結果をオブジェクトファイル<samp><span class="file"><OBJECTFILE></span></samp>に出力し、終了します。出力されたオブジェクトファイルは、<samp><span class="command">comet2</span></samp>で実行できます。オブジェクトファイルを指定しない場合、出力先は<samp><span class="file">a.o</span></samp>です。オブジェクトファイルは1つだけ指定できます。
738 <br><dt><samp><span class="option">-t</span></samp><dt><samp><span class="option">--trace</span></samp><dt><samp><span class="option">--tracearithmetic</span></samp><dd>実行時のレジスタをトレースします。レジスタには、GR0〜GR7という8個の汎用レジスタと、SP(スタックポインタ)、PR(プログラムレジスタ)、FR(フラグレジスタ)があります。レジストリの内容は、-32,768〜32,767の範囲の整数、#0000〜#FFFFの範囲の16進数、2進数で表示されます。文字の組に該当する場合は、「 = 」のうしろに文字が表示されます。-32768〜32767の範囲の整数を表示するので、算術演算の結果を確認する場合に使えます。
740 <br><dt><samp><span class="option">-T</span></samp><dt><samp><span class="option">--tracelogical</span></samp><dd><samp><span class="option">-t</span></samp>と同じく、実行時のレジスタをトレースします。<samp><span class="option">-t</span></samp>と異なり0〜65,535の範囲の整数を表示するので、論理演算の結果を確認する場合に使えます。
742 <br><dt><samp><span class="option">-d</span></samp><dt><samp><span class="option">--dump</span></samp><dd>メモリの内容をすべて表示します。
744 <br><dt><samp><span class="option">-M <MEMORYSIZE></span></samp><dt><samp><span class="option">--memorysize <MEMORYSIZE></span></samp><dd>アセンブルおよび実行時のメモリサイズ<samp><span class="option"><MEMORYSIZE></span></samp>を0〜65,535の範囲で指定します。指定しない場合、メモリサイズは512です。
746 <br><dt><samp><span class="option">-C <CLOCKS></span></samp><dt><samp><span class="option">--clocks <CLOCKS></span></samp><dd>実行時のクロック周波数<samp><span class="option"><CLOCKS></span></samp>を0より大きい整数で指定します。指定しない場合、クロック周波数は5000000です。
748 <br><dt><samp><span class="option">-h</span></samp><dt><samp><span class="option">--help</span></samp><dd><samp><span class="command">casl2</span></samp>の使用方法を表示して終了します。
751 <p><a name="comet2"></a>
753 <h3 class="section">4.2 <samp><span class="command">comet2</span></samp></h3>
755 <p><a name="index-comet2-4"></a><a name="index-comet2-5"></a>
756 <samp><span class="command">comet2</span></samp>は、引数として指定されたオブジェクトファイルを仮想マシンCOMET II上で実行します。オブジェクトファイルは、<samp><span class="command">casl</span></samp>に<samp><span class="option">-o</span></samp>または<samp><span class="option">-O</span></samp>を指定して出力します。
758 <pre class="example"> $ <samp><span class="command">comet2 hello.o</span></samp>
760 <p>引数で指定できるオブジェクトファイルは1つだけです。引数が指定されない場合は、エラーメッセージを表示して終了します。複数の引数を指定した場合、2番目以降の引数は無視されます。
762 <h4 class="unnumberedsubsec">オプション</h4>
764 <p><samp><span class="command">comet2</span></samp>は、次のオプションを指定できます。
767 <dt><samp><span class="option">-t</span></samp><dt><samp><span class="option">--trace</span></samp><dt><samp><span class="option">--tracearithmetic</span></samp><dd>実行時のレジスタをトレースします。レジスタには、GR0〜GR7という8個の汎用レジスタと、SP(スタックポインタ)、PR(プログラムレジスタ)、FR(フラグレジスタ)があります。レジストリの内容は、-32,768〜32,767の範囲の整数、#0000〜#FFFFの範囲の16進数、2進数で表示されます。文字の組に該当する場合は、「 = 」のうしろに文字が表示されます。-32768〜32767の範囲の整数が表示されるので、算術演算の結果を確認する場合に使えます。
769 <br><dt><samp><span class="option">-T</span></samp><dt><samp><span class="option">--tracelogical</span></samp><dd><samp><span class="option">-t</span></samp>と同じく、実行時のレジスタをトレースします。<samp><span class="option">-t</span></samp>と異なり0〜65,535の範囲の整数を表示するので、論理演算の結果を確認する場合に使えます。
771 <br><dt><samp><span class="option">-d</span></samp><dt><samp><span class="option">--dump</span></samp><dd>メモリの内容をすべて表示します。
773 <br><dt><samp><span class="option">-M <MEMORYSIZE></span></samp><dt><samp><span class="option">--memorysize <MEMORYSIZE></span></samp><dd>実行時のメモリサイズ<samp><span class="option"><MEMORYSIZE></span></samp>を0〜65,535の範囲で指定します。指定しない場合、メモリサイズは512です。
775 <br><dt><samp><span class="option">-C <CLOCKS></span></samp><dt><samp><span class="option">--clocks <CLOCKS></span></samp><dd>実行時のクロック周波数<samp><span class="option"><CLOCKS></span></samp>を0より大きい整数で指定します。指定しない場合、クロック周波数は5,000,000です。
777 <br><dt><samp><span class="option">-h</span></samp><dt><samp><span class="option">--help</span></samp><dd><samp><span class="command">comet2</span></samp>の使用方法を表示して終了します。
780 <p><a name="dumpword"></a>
782 <h3 class="section">4.3 <samp><span class="command">dumpword</span></samp></h3>
784 <p><a name="index-dumpword-6"></a><a name="index-dumpword-7"></a>
785 <samp><span class="command">dumpword</span></samp>は、引数として指定された数値を、整数、#0000〜#FFFFの範囲の16進数、2進数で表示します。文字の組に該当する場合は、「 = 」のうしろに文字が表示されます。引数は、10進数または先頭に「#」の付いた16進数で指定します。表示される整数は、オプションにより-32,768〜32,767または0〜65,535の範囲です。オプションなしの場合は、-32,768〜32,767です。
787 <pre class="example"> $ <samp><span class="command">dumpword 10</span></samp>
789 <p>引数で指定できる1つだけです。引数が指定されない場合は、使い方を表示して終了します。複数の引数を指定した場合、2番目以降の引数は無視されます。
791 <h4 class="unnumberedsubsec">オプション</h4>
793 <p><samp><span class="command">dumpword</span></samp>は、次のオプションを指定できます。
796 <dt><samp><span class="option">-a</span></samp><dt><samp><span class="option">--arithmetic</span></samp><dd>出力される整数の範囲を-32,768〜32,767にします。オプションなしの場合と同じです。
798 <br><dt><samp><span class="option">-l</span></samp><dt><samp><span class="option">--logical</span></samp><dd>出力される整数の範囲を0〜65,535にします。
800 <br><dt><samp><span class="option">-h</span></samp><dt><samp><span class="option">--help</span></samp><dd><samp><span class="command">dumpword</span></samp>の使用方法を表示して終了します。
803 <p><a name="CASL2LIB%e3%83%9e%e3%83%8b%e3%83%a5%e3%82%a2%e3%83%ab"></a>
804 <a name="CASL2LIB_00e3_0083_009e_00e3_0083_008b_00e3_0083_00a5_00e3_0082_00a2_00e3_0083_00ab"></a>
806 <h2 class="chapter">5 CASL2LIBマニュアル</h2>
808 <p><a name="ABS"></a>
810 <h3 class="section">5.1 <samp><span class="command">ABS</span></samp> - <samp><span class="file">abs.casl</span></samp></h3>
812 <p>入力された整数を絶対値に変換して出力
814 <h4 class="unnumberedsubsec">入力</h4>
817 <dt><var>GR1</var><dd>-32768〜32767の整数
820 <h4 class="unnumberedsubsec">出力</h4>
823 <dt><var>GR1</var><dd>入力された整数の絶対値
825 <br><dt><var>OF</var><dd>入力されたGR1が-32768の場合、1
827 <br><dt><var>SF</var><dd>入力されたGR1が負数(-32767〜-1)の場合、1
830 <h4 class="unnumberedsubsec">依存する副プログラム</h4>
834 <h4 class="unnumberedsubsec">使用例</h4>
836 <pre class="example"><pre class="verbatim"> ;;; ABSを呼び出す
856 MVAL DC 12,-12,1,-1,32767,-32767,0,-32768
864 <pre class="example"><pre class="verbatim"> ../../../../casl2 abs.casl ../../../../as/casl2lib/outa.casl
898 <p><a name="ADDL32"></a>
900 <h3 class="section">5.2 <samp><span class="command">ADDL32</span></samp> - <samp><span class="file">addl32.casl</span></samp></h3>
902 <p>32ビットの値を、連続する2語の領域に格納
904 <h4 class="unnumberedsubsec">入力</h4>
907 <dt><var>GR1</var><dd>32ビット値1の先頭アドレス
909 <br><dt><var>GR2</var><dd>32ビット値2の先頭アドレス
912 <h4 class="unnumberedsubsec">出力</h4>
915 <dt><var>GR0</var><dd>和の先頭アドレス
917 <br><dt><var>OF</var><dd>上位アドレスでオーバーフローした場合、1
919 <br><dt><var>SF</var><dd>和が負数(-32767〜-1)の場合、1
921 <br><dt><var>ZF</var><dd>和が0の場合、1
924 <h4 class="unnumberedsubsec">使用例</h4>
926 <pre class="example"><pre class="verbatim"> MAIN START
940 <pre class="example"> 4
943 <h4 class="unnumberedsubsec">依存する副プログラム</h4>
947 <p><a name="DIVA"></a>
949 <h3 class="section">5.3 <samp><span class="command">DIVA</span></samp> -<samp><span class="file">diva.casl</span></samp></h3>
951 <p>-32,767〜32,767の範囲にある整数の割算(筆算方式)を行う
953 <h4 class="unnumberedsubsec">入力</h4>
956 <dt><var>GR1</var><dd>被除数
958 <br><dt><var>GR2</var><dd>除数
961 <h4 class="unnumberedsubsec">出力</h4>
964 <dt><var>GR0</var><dd>商
966 <br><dt><var>GR3</var><dd>剰余
968 <br><dt><var>OF</var><dd>除数が0の場合、1
970 <br><dt><var>SF</var><dd>商が負数(-32767〜-1)の場合、1
972 <br><dt><var>ZF</var><dd>商が0の場合、1
975 <h4 class="unnumberedsubsec">依存する副プログラム</h4>
978 <li><samp><span class="command">DIVL</span></samp>
981 <!-- @unnumberedsubsec 使用例 -->
986 <!-- @verbatiminclude ../as/casl2lib/test/diva/diva.casl -->
987 <!-- @end example -->
989 <!-- @end cartouche -->
995 <!-- @verbatiminclude ../as/casl2lib/test/diva/0.txt -->
996 <!-- @end example -->
998 <!-- @end cartouche -->
1000 <p><a name="DIVL"></a>
1002 <h3 class="section">5.4 <samp><span class="command">DIVL</span></samp> - <samp><span class="file">divl.casl</span></samp></h3>
1004 <p>0〜65,535の範囲にある整数の割算(筆算方式)を行う
1006 <h4 class="unnumberedsubsec">入力</h4>
1009 <dt><var>GR1</var><dd>被除数
1011 <br><dt><var>GR2</var><dd>除数
1014 <h4 class="unnumberedsubsec">出力</h4>
1017 <dt><var>GR0</var><dd>商
1019 <br><dt><var>GR3</var><dd>剰余
1021 <br><dt><var>OF</var><dd>除数が0の場合、1
1023 <br><dt><var>SF</var><dd>商が32,768〜65535の場合、1
1025 <br><dt><var>ZF</var><dd>商が0の場合、1
1028 <h4 class="unnumberedsubsec">依存する副プログラム</h4>
1032 <h4 class="unnumberedsubsec">使用例</h4>
1034 <pre class="example"><pre class="verbatim"> MAIN START
1041 <p><a name="INL"></a>
1043 <h3 class="section">5.5 <samp><span class="command">INL</span></samp> - <samp><span class="file">inl.casl</span></samp></h3>
1045 <p><a name="L2STR"></a>
1047 <h3 class="section">5.6 <samp><span class="command">L2STR</span></samp> - <samp><span class="file">l2str.casl</span></samp></h3>
1049 <p><a name="MAX"></a>
1051 <h3 class="section">5.7 <samp><span class="command">MAX</span></samp> - <samp><span class="file">max.casl</span></samp></h3>
1053 <p><a name="MINIM"></a>
1055 <h3 class="section">5.8 <samp><span class="command">MINIM</span></samp> - <samp><span class="file">minim.casl</span></samp></h3>
1057 <p><a name="MULA"></a>
1059 <h3 class="section">5.9 <samp><span class="command">MULA</span></samp> - <samp><span class="file">mula.casl</span></samp></h3>
1061 <p><a name="MULL"></a>
1063 <h3 class="section">5.10 <samp><span class="command">MULL</span></samp> - <samp><span class="file">mull.casl</span></samp></h3>
1065 <p><a name="OUTA"></a>
1067 <h3 class="section">5.11 <samp><span class="command">OUTA</span></samp> - <samp><span class="file">outa.casl</span></samp></h3>
1069 <p><a name="OUTB"></a>
1071 <h3 class="section">5.12 <samp><span class="command">OUTB</span></samp> - <samp><span class="file">outb.casl</span></samp></h3>
1073 <p><a name="OUTD_Q15"></a>
1074 <a name="OUTD_005fQ15"></a>
1076 <h3 class="section">5.13 <samp><span class="command">OUTD_Q15</span></samp> - <samp><span class="file">outd_q15.casl</span></samp></h3>
1078 <p><a name="OUTL"></a>
1080 <h3 class="section">5.14 <samp><span class="command">OUTL</span></samp> - <samp><span class="file">outl.casl</span></samp></h3>
1082 <p><a name="REV"></a>
1084 <h3 class="section">5.15 <samp><span class="command">REV</span></samp> - <samp><span class="file">rev.casl</span></samp></h3>
1086 <p><a name="STR2L"></a>
1088 <h3 class="section">5.16 <samp><span class="command">STR2L</span></samp> - <samp><span class="file">str2l.casl</span></samp></h3>