3 <title>YACASL2 - CASL II処理システム</title>
4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
5 <meta name="description" content="YACASL2 - CASL II処理システム">
6 <meta name="generator" content="makeinfo 4.13">
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-2011 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;
36 background-color: #DDF;
41 background-color: #DDF;
47 background-color: navy;
51 background-color: #DDF;
52 border: 4px double #000;
58 background-color: #DDF;
62 background-color: #DDF;
63 border: 4px double #000;
91 text-decoration: underline;
95 padding: 0.5em 1em 0.5em 1em;
102 text-decoration: none;
107 border: 1px solid #00F;
111 font-family: monospace;
120 border: 1px solid #CCC;
121 border-collapse: collapse; /* 枠線の表示方法 */
124 table.cartouche, table.cartouche th, table.cartouche td {
128 pre.example .command, pre.example .option, pre.example kbd {
130 font-family: monospace;
131 background-color: inherit;
139 border: 2px solid green;
147 <h1 class="settitle">YACASL2 - CASL II処理システム</h1>
151 Next: <a rel="next" accesskey="n" href="#About">About</a>
156 <li><a accesskey="1" href="#About">About</a>: YACASL2の概要
157 <li><a accesskey="2" href="#Install">Install</a>: YACASL2のインストール
158 <li><a accesskey="3" href="#Usage">Usage</a>: YACASL2の使い方
159 <li><a accesskey="4" href="#Command-Manual">Command Manual</a>: YACASL2コマンドマニュアル
160 <li><a accesskey="5" href="#CASL2LIB-Manual">CASL2LIB Manual</a>: CASL2LIBマニュアル
163 <div class="contents">
164 <h2>Table of Contents</h2>
166 <li><a name="toc_About" href="#About">1 YACASL2の概要</a>
168 <li><a href="#About">要件</a>
170 <li><a name="toc_Install" href="#Install">2 YACASL2のインストール</a>
172 <li><a href="#Download">2.1 YACASL2ファイルのダウンロード</a>
173 <li><a href="#Verify">2.2 YACASL2ファイルの検証</a>
174 <li><a href="#Expand">2.3 YACASL2ファイルの展開</a>
175 <li><a href="#Build">2.4 <kbd>casl2</kbd> <kbd>comet2</kbd> <kbd>dumpword</kbd>のビルド</a>
176 <li><a href="#Simple-Test">2.5 <kbd>casl2</kbd>の実行テスト</a>
177 <li><a href="#Detail-Test">2.6 詳細なテスト</a>
178 <li><a href="#Environment">2.7 環境変数の設定</a>
180 <li><a href="#Environment">シェルの確認</a>
181 <li><a href="#Environment"><code>PATH</code>にYACASL2のディレクトリを追加</a>
182 <li><a href="#Environment"><code>CASL2LIB</code>の設定</a>
185 <li><a name="toc_Usage" href="#Usage">3 YACASL2の使い方</a>
187 <li><a href="#Simple-Output">3.1 実行結果の出力だけを表示</a>
188 <li><a href="#Assemble-Result">3.2 アセンブル結果の確認</a>
189 <li><a href="#Register-and-Memory">3.3 実行時のレジスタとメモリを表示</a>
191 <li><a href="#Register-Specify">3.3.1 特定のレジスタを表示</a>
192 <li><a href="#Ending-Value">3.3.2 プログラム終了時の値を表示</a>
193 <li><a href="#Step-Count">3.3.3 プログラムのステップ数を表示</a>
195 <li><a href="#Only-Assemble">3.4 アセンブルと実行を別に行う</a>
196 <li><a href="#Analyze-Word">3.5 1語の解析</a>
197 <li><a href="#Use-CASL2LIB">3.6 CASL2ライブラリの使用</a>
199 <li><a href="#Use-CASL2LIB">3.6.1 数値を出力する</a>
202 <li><a name="toc_Command-Manual" href="#Command-Manual">4 YACASL2コマンドマニュアル</a>
204 <li><a href="#casl2">4.1 <kbd>casl2</kbd></a>
206 <li><a href="#casl2">オプション</a>
208 <li><a href="#comet2">4.2 <kbd>comet2</kbd></a>
210 <li><a href="#comet2">オプション</a>
212 <li><a href="#dumpword">4.3 <kbd>dumpword</kbd></a>
214 <li><a href="#dumpword">オプション</a>
217 <li><a name="toc_CASL2LIB-Manual" href="#CASL2LIB-Manual">5 CASL2LIBマニュアル</a>
219 <li><a href="#ABS">5.1 <kbd>ABS</kbd> - <samp><span class="file">abs.casl</span></samp></a>
221 <li><a href="#ABS">入力</a>
222 <li><a href="#ABS">出力</a>
223 <li><a href="#ABS">依存する副プログラム</a>
224 <li><a href="#ABS">使用例</a>
226 <li><a href="#DIVA">5.2 <kbd>DIVA</kbd> - <samp><span class="file">diva.casl</span></samp></a>
228 <li><a href="#DIVA">入力</a>
229 <li><a href="#DIVA">出力</a>
230 <li><a href="#DIVA">依存する副プログラム</a>
231 <li><a href="#DIVA">使用例</a>
233 <li><a href="#DIVL">5.3 <kbd>DIVL</kbd> - <samp><span class="file">divl.casl</span></samp></a>
235 <li><a href="#DIVL">入力</a>
236 <li><a href="#DIVL">出力</a>
237 <li><a href="#DIVL">依存する副プログラム</a>
238 <li><a href="#DIVL">使用例</a>
240 <li><a href="#INL">5.4 <kbd>INL</kbd> - <samp><span class="file">inl.casl</span></samp></a>
242 <li><a href="#INL">入力</a>
243 <li><a href="#INL">出力</a>
244 <li><a href="#INL">依存する副プログラム</a>
245 <li><a href="#INL">使用例</a>
247 <li><a href="#L2STR">5.5 <kbd>L2STR</kbd> - <samp><span class="file">l2str.casl</span></samp></a>
249 <li><a href="#L2STR">入力</a>
250 <li><a href="#L2STR">出力</a>
251 <li><a href="#L2STR">依存する副プログラム</a>
253 <li><a href="#MAX">5.6 <kbd>MAX</kbd> - <samp><span class="file">max.casl</span></samp></a>
255 <li><a href="#MAX">入力</a>
256 <li><a href="#MAX">出力</a>
257 <li><a href="#MAX">依存する副プログラム</a>
259 <li><a href="#MINIM">5.7 <kbd>MINIM</kbd> - <samp><span class="file">minim.casl</span></samp></a>
261 <li><a href="#MINIM">入力</a>
262 <li><a href="#MINIM">出力</a>
263 <li><a href="#MINIM">依存する副プログラム</a>
265 <li><a href="#MULA">5.8 <kbd>MULA</kbd> - <samp><span class="file">mula.casl</span></samp></a>
266 <li><a href="#MULL">5.9 <kbd>MULL</kbd> - <samp><span class="file">mull.casl</span></samp></a>
267 <li><a href="#OUTA">5.10 <kbd>OUTA</kbd> - <samp><span class="file">outa.casl</span></samp></a>
268 <li><a href="#OUTB">5.11 <kbd>OUTB</kbd> - <samp><span class="file">outb.casl</span></samp></a>
269 <li><a href="#OUTD_005fQ15">5.12 <kbd>OUTD_Q15</kbd> - <samp><span class="file">outd_q15.casl</span></samp></a>
270 <li><a href="#OUTL">5.13 <kbd>OUTL</kbd> - <samp><span class="file">outl.casl</span></samp></a>
271 <li><a href="#REV">5.14 <kbd>REV</kbd> - <samp><span class="file">rev.casl</span></samp></a>
272 <li><a href="#STR2L">5.15 <kbd>STR2L</kbd> - <samp><span class="file">str2l.casl</span></samp></a>
280 Next: <a rel="next" accesskey="n" href="#Install">Install</a>,
281 Previous: <a rel="previous" accesskey="p" href="#Top">Top</a>,
282 Up: <a rel="up" accesskey="u" href="#Top">Top</a>
286 <h2 class="chapter">1 YACASL2の概要</h2>
288 <p>YACASL2は、UNIX/Linuxのコマンドラインインターフェイスで動作するオープンソースのCASL II処理システムです。CASL IIは情報処理試験で用いられるアセンブラ言語で、次の資料により仕様が公開されています。
291 <a href="http://www.jitec.ipa.go.jp/1_00topic/topic_20081027_hani_yougo.pdf">試験で使用する情報処理用語・プログラム言語など(2008年10月版)</a>[PDFファイル]
295 <p>YACASL2は、CASL IIアセンブラ言語で記述されたファイルをアセンブルし、仮想マシンCOMET II上で実行します。アセンブルと実行は、連続で行うことも別々に行うことも可能です。
296 YACASL2の動作はCASL IIの仕様に準拠しているため、情報処理試験の問題をはじめ各種参考書やサイトに記載されたCASL IIのプログラムをそのままアセンブルして実行できます。また、本パッケージ中にCASL IIのサンプルプログラムが多数収録されています。
298 <p>YACASL2は、「ふつうの処理系」として動作します。ほかの多くのCASL IIエミュレータと違い、デバッガとして動作したり、コンピュータ内部の模式図を表示したりすることはありません。そのかわり、YACASL2は、次のような動作内容をすべてテキストで出力します。
310 <p>出力された動作内容は、GNU/Linuxのさまざまなツール、たとえば、<kbd>cat</kbd> <kbd>less</kbd> <kbd>grep</kbd> <kbd>wc</kbd>などを使って解析できます。
312 <p>YACASL2の操作は、端末を開いてコマンドを入力・実行することで行います。
314 <h3 class="unnumberedsec">要件</h3>
316 <p>YACASL2は、LinuxやMac OS Xなど、UNIX系のOS上で動作します。現在動作を確認しているのは、次の環境です。
319 <li>Ubuntu Linux 10.04
326 <p>インストール時に、<kbd>tar</kbd> <kbd>gcc</kbd> <kbd>make</kbd>が必要です。Linuxでは多くの場合、標準でインストールされています。Mac OS Xの場合、<code>Xcode</code>をインストールするといっしょにインストールされます。
329 <a name="Install"></a>
331 Next: <a rel="next" accesskey="n" href="#Usage">Usage</a>,
332 Previous: <a rel="previous" accesskey="p" href="#About">About</a>,
333 Up: <a rel="up" accesskey="u" href="#Top">Top</a>
337 <h2 class="chapter">2 YACASL2のインストール</h2>
339 <p>YACASL2をインストールするには、Linux上で次の作業をします。
342 <li><a accesskey="1" href="#Download">Download</a>: YACASL2ファイルのダウンロード
343 <li><a accesskey="2" href="#Verify">Verify</a>: YACASL2ファイルの検証
344 <li><a accesskey="3" href="#Expand">Expand</a>: YACASL2ファイルの展開
345 <li><a accesskey="4" href="#Build">Build</a>: <kbd>casl2</kbd> <kbd>comet2</kbd> <kbd>dumpword</kbd>のビルド
346 <li><a accesskey="5" href="#Simple-Test">Simple Test</a>: <kbd>casl2</kbd>の実行テスト
347 <li><a accesskey="6" href="#Detail-Test">Detail Test</a>: 詳細なテスト
348 <li><a accesskey="7" href="#Environment">Environment</a>: 環境変数の設定
352 <a name="Download"></a>
354 Next: <a rel="next" accesskey="n" href="#Verify">Verify</a>,
355 Previous: <a rel="previous" accesskey="p" href="#Install">Install</a>,
356 Up: <a rel="up" accesskey="u" href="#Install">Install</a>
360 <h3 class="section">2.1 YACASL2ファイルのダウンロード</h3>
362 <p><a href="http://www.j8takagi.net/yacasl2/">YACASL2のサイト</a>または<a href="http://github.com/j8takagi/YACASL2/downloads/">githubのダウンロードページ</a>から最新版の<samp><span class="file">tar.gz</span></samp>ファイルをダウンロードします。
365 <a name="Verify"></a>
367 Next: <a rel="next" accesskey="n" href="#Expand">Expand</a>,
368 Previous: <a rel="previous" accesskey="p" href="#Download">Download</a>,
369 Up: <a rel="up" accesskey="u" href="#Install">Install</a>
373 <h3 class="section">2.2 YACASL2ファイルの検証</h3>
375 <p>ダウンロードが完了したら、<kbd>md5sum</kbd>と<kbd>diff</kbd>で正しくファイルがダウンロードができているかを検証します。
377 <pre class="example">$ <kbd>openssl md5sum yacasl2.tar.gz | diff -s yacasl2.tar.gz.md5sum -</kbd>
378 Files yacasl2.tar.gz.md5sum and - are identical
381 <a name="Expand"></a>
383 Next: <a rel="next" accesskey="n" href="#Build">Build</a>,
384 Previous: <a rel="previous" accesskey="p" href="#Verify">Verify</a>,
385 Up: <a rel="up" accesskey="u" href="#Install">Install</a>
389 <h3 class="section">2.3 YACASL2ファイルの展開</h3>
391 <p>YACASL2ファイルをダウンロードしたら、次のコマンドで展開します。
393 <pre class="example">$ <kbd>tar xvzf yacasl2.tar.gz</kbd>
398 Next: <a rel="next" accesskey="n" href="#Simple-Test">Simple Test</a>,
399 Previous: <a rel="previous" accesskey="p" href="#Expand">Expand</a>,
400 Up: <a rel="up" accesskey="u" href="#Install">Install</a>
404 <h3 class="section">2.4 <kbd>casl2</kbd> <kbd>comet2</kbd> <kbd>dumpword</kbd>のビルド</h3>
406 <p>展開したら、次のコマンドで<kbd>casl2</kbd> <kbd>comet2</kbd> <kbd>dumpword</kbd>をビルドします。
408 <pre class="example">$ <kbd>cd yacasl2</kbd>
411 make[1]: Entering directory ‘/home/kazubito/yacasl2/src’
412 gcc -c -g -Wall -I ../include casl2.c
413 gcc -c -g -Wall -I ../include word.c
414 gcc -c -g -Wall -I ../include hash.c
415 gcc -c -g -Wall -I ../include cerr.c
416 gcc -c -g -Wall -I ../include struct.c
417 gcc -c -g -Wall -I ../include cmd.c
418 gcc -c -g -Wall -I ../include assemble.c
419 gcc -c -g -Wall -I ../include token.c
420 gcc -c -g -Wall -I ../include label.c
421 gcc -c -g -Wall -I ../include macro.c
422 gcc -c -g -Wall -I ../include exec.c
423 gcc -c -g -Wall -I ../include dump.c
424 gcc -g -Wall -I ../include -o ../casl2 casl2.o word.o hash.o cerr.o st
425 ruct.o cmd.o assemble.o token.o label.o macro.o exec.o dump.o
426 gcc -c -g -Wall -I ../include comet2.c
427 gcc -g -Wall -I ../include -o ../comet2 comet2.o word.o hash.o cerr.o
428 struct.o cmd.o exec.o dump.o
429 gcc -c -g -Wall -I ../include dumpword.c
430 gcc -g -Wall -I ../include -o ../dumpword dumpword.o word.o cerr.o
431 make[1]: Leaving directory ‘/home/kazubito/yacasl2/src’
434 <a name="Simple-Test"></a>
436 Next: <a rel="next" accesskey="n" href="#Detail-Test">Detail Test</a>,
437 Previous: <a rel="previous" accesskey="p" href="#Build">Build</a>,
438 Up: <a rel="up" accesskey="u" href="#Install">Install</a>
442 <h3 class="section">2.5 <kbd>casl2</kbd>の実行テスト</h3>
444 <p>ビルドしたら、次のコマンドが正常に実行できるかを確認します。
445 正常に実行された場合は、「Hello, World!」と表示されます。
447 <pre class="example">$ <kbd>./casl2 as/hello.casl</kbd>
451 <a name="Detail-Test"></a>
453 Next: <a rel="next" accesskey="n" href="#Environment">Environment</a>,
454 Previous: <a rel="previous" accesskey="p" href="#Simple-Test">Simple Test</a>,
455 Up: <a rel="up" accesskey="u" href="#Install">Install</a>
459 <h3 class="section">2.6 詳細なテスト</h3>
461 <p>次のコマンドを実行すると、正常にビルドできているかどうかを詳細にテストできます。
463 <pre class="example">$ <kbd>make check</kbd>
464 195 / 195 tests passed. Details in /home/username/yacasl2/test/integra
466 All tests are succeded.
467 149 / 149 tests passed. Details in /home/username/yacasl2/test/integra
469 All tests are succeded.
470 4 / 4 tests passed. Details in /home/username/yacasl2/test/integration
472 All tests are succeded.
475 <a name="Environment"></a>
477 Previous: <a rel="previous" accesskey="p" href="#Detail-Test">Detail Test</a>,
478 Up: <a rel="up" accesskey="u" href="#Install">Install</a>
482 <h3 class="section">2.7 環境変数の設定</h3>
484 <p>環境変数<code>PATH</code>や<code>CASL2LIB</code>を設定することで、YACASL2が使いやすくなります。環境変数は、使っているシェルを確認してから設定します。
486 <h4 class="unnumberedsubsec">シェルの確認</h4>
488 <p>環境変数の設定方法は使っているシェルによって異なります。シェルは、次のコマンドで確認できます。
490 <pre class="example">$ <kbd>echo $SHELL</kbd>
493 <p>現在もっとも多く使われているシェルは、BASHでしょう。以下、BASHでの設定方法を説明します。
495 <h4 class="unnumberedsubsec"><code>PATH</code>にYACASL2のディレクトリを追加</h4>
497 <p><code>PATH</code>にYACASL2のディレクトリを追加すると、どのディレクトリでもディレクトリを指定せずに<kbd>casl2</kbd>、<kbd>comet2</kbd>、<kbd>dumpword</kbd>を実行できます。YACASL2をホームディレクトリ<code>~</code>にインストールしたときは、次のコマンドで設定できます。
499 <pre class="example">$ <kbd>PATH=$PATH:~/yacasl2 && export PATH</kbd>
501 <p>環境変数の設定は、シェルの初期設定ファイルに追加することでログインしたあと自動的に反映されるようになります。BASHではホームディレクトリにある<samp><span class="file">.bashrc</span></samp>が初期設定ファイルです。次のコマンドで追加できます。
503 <pre class="example">$ <kbd>echo ’PATH=$PATH:~/yacasl2 && export PATH’ >>~/.bashrc</kbd>
505 <h4 class="unnumberedsubsec"><code>CASL2LIB</code>の設定</h4>
507 <p>環境変数<code>CASL2LIB</code>を設定しておけば、後述するCASL2LIBを利用するときの手間が小さくなります。YACASL2をホームディレクトリ<code>~</code>にインストールしたときは、次のコマンドで設定できます。
509 <pre class="example">$ <kbd>CASL2LIB=~/yacasl2/as/casl2lib && export CASL2LIB</kbd>
511 <p>BASHの初期設定ファイル<samp><span class="file">.bashrc</span></samp>には、次のコマンドで追加できます。
513 <pre class="example">$ <kbd> echo 'CASL2LIB=~/yacasl2/as/casl2lib && export CASL2LIB' >>~/.bashrc</kbd>
518 Next: <a rel="next" accesskey="n" href="#Command-Manual">Command Manual</a>,
519 Previous: <a rel="previous" accesskey="p" href="#Install">Install</a>,
520 Up: <a rel="up" accesskey="u" href="#Top">Top</a>
524 <h2 class="chapter">3 YACASL2の使い方</h2>
526 <p>YACASL2 は、テキストファイルに記述されたCASLプログラムを処理します。以下の例で用いられるCASLプログラムのファイルは、テキストエディタなどで作成してください。また、インストールしたディレクトリの中にある<samp><span class="file">as</span></samp>ディレクトリからコピーして作成することもできます。
529 <li><a accesskey="1" href="#Simple-Output">Simple Output</a>: 実行結果の出力だけを表示
530 <li><a accesskey="2" href="#Assemble-Result">Assemble Result</a>: アセンブル結果の確認
531 <li><a accesskey="3" href="#Register-and-Memory">Register and Memory</a>: 実行時のレジスタとメモリを表示
532 <li><a accesskey="4" href="#Only-Assemble">Only Assemble</a>: アセンブルと実行を別に行う
533 <li><a accesskey="5" href="#Analyze-Word">Analyze Word</a>: 1語の解析
534 <li><a accesskey="6" href="#Use-CASL2LIB">Use CASL2LIB</a>: CASL2ライブラリの使用
538 <a name="Simple-Output"></a>
540 Next: <a rel="next" accesskey="n" href="#Assemble-Result">Assemble Result</a>,
541 Previous: <a rel="previous" accesskey="p" href="#Usage">Usage</a>,
542 Up: <a rel="up" accesskey="u" href="#Usage">Usage</a>
546 <h3 class="section">3.1 実行結果の出力だけを表示</h3>
548 <p>インストール時にコマンド実行の確認に使った<samp><span class="file">hello.casl</span></samp>は、次のような内容です。CASL IIのマクロ命令OUTは、文字列を出力します。
550 <pre class="example">$ <kbd>cat hello.casl</kbd>
554 OBUF DC 'Hello, World!'
558 <p>次のコマンドを実行すると、CASL II のアセンブルと仮想マシン COMET II 上での実行が連続で行われ、文字列が出力されます。
560 <pre class="example">$ <kbd>casl2 hello.casl</kbd>
563 <p><samp><span class="file">addl.casl</span></samp>は、3と1の和を求めます。
565 <pre class="example">$ <kbd>cat addl.casl</kbd>
575 <p>このプログラムには出力命令がないため、オプションなしで実行した場合には結果が出力されません。
577 <pre class="example">$ <kbd>casl2 addl.casl</kbd>
580 <p>実行内容を確認するには、後述のようにCPU 内にあるレジスタやメモリの内容を表示するか、結果を出力するための処理を追加する必要があります。
583 <a name="Assemble-Result"></a>
585 Next: <a rel="next" accesskey="n" href="#Register-and-Memory">Register and Memory</a>,
586 Previous: <a rel="previous" accesskey="p" href="#Simple-Output">Simple Output</a>,
587 Up: <a rel="up" accesskey="u" href="#Usage">Usage</a>
591 <h3 class="section">3.2 アセンブル結果の確認</h3>
593 <p>casl2の処理途中で行われるアセンブルの結果を表示するには、オプション<samp><span class="option">-a</span></samp>を指定します。また、ラベルとアドレスの対応表を表示するには、オプション<samp><span class="option">-l</span></samp>を指定します。
595 <p>次のコマンドでは<samp><span class="file">hello.casl</span></samp>の、ラベルとアドレスの対応表と、アセンブル結果と、実行結果が表示されます。OUTはアセンブラ命令で複数の機械語命令で構成されているため、命令行1行に対して、複数行のコードが生成されます。
597 <pre class="example">$ <kbd>casl2 -a -l hello.casl</kbd>
599 Assemble hello.casl (0)
602 MAIN.LEN ---> #0020
604 MAIN.OBUF ---> #0013
606 Assemble hello.casl (1)
607 hello.casl: 1:MAIN START
608 hello.casl: 2: OUT OBUF,LEN
631 hello.casl: 4:OBUF DC 'Hello, World!'
645 hello.casl: 5:LEN DC 13
650 <p><samp><span class="file">addl.casl</span></samp>の、ラベルとアドレスの対応表と、アセンブル結果は、次のようになります。
652 <pre class="example">$ <kbd>casl2 -a -l addl.casl</kbd>
654 Assemble addl.casl (0)
661 Assemble addl.casl (1)
662 addl.casl: 1:;;; ADDL r,adr
663 addl.casl: 2:MAIN START
664 addl.casl: 3: LD GR1,A
667 addl.casl: 4: ADDL GR1,B
678 <p>なお、オプション<samp><span class="option">-A</span></samp>を指定すると、アセンブル結果が表示される時点で処理が終了します。仮想マシンCOMET II での実行は行われません。
681 <a name="Register-and-Memory"></a>
683 Next: <a rel="next" accesskey="n" href="#Only-Assemble">Only Assemble</a>,
684 Previous: <a rel="previous" accesskey="p" href="#Assemble-Result">Assemble Result</a>,
685 Up: <a rel="up" accesskey="u" href="#Usage">Usage</a>
689 <h3 class="section">3.3 実行時のレジスタとメモリを表示</h3>
691 <p>YACASL2では実行中のCPUのレジスタとメモリの内容をそれぞれ、<samp><span class="option">-t</span></samp>と<samp><span class="option">-d</span></samp>を指定することで表示できます。
693 <p>また、<samp><span class="option">-M</span></samp>で、仮想マシンCOMET II のメモリ容量を語(16 ビット)単位で指定できます。小さいプログラムを実行するときは、メモリ容量を小さくすれば結果が見やすくなります。
696 <li><a accesskey="1" href="#Register-Specify">Register Specify</a>: 特定のレジスタを表示
697 <li><a accesskey="2" href="#Ending-Value">Ending Value</a>: プログラム終了時の値を表示
698 <li><a accesskey="3" href="#Step-Count">Step Count</a>: プログラムのステップ数を表示
701 <p><samp><span class="file">addl.casl</span></samp>に必要なメモリ容量は8語のため、次のようにCPUのレジスタとメモリの内容を表示できます。
703 <pre class="example">$ <kbd>casl2 -t -d -M8 addl.casl | less</kbd>
705 Assemble addl.casl (0)
707 Assemble addl.casl (1)
709 Executing machine codes
711 #0000: GR0: 0 = #0000 = 0000000000000000
712 #0000: GR1: 0 = #0000 = 0000000000000000
713 #0000: GR2: 0 = #0000 = 0000000000000000
714 #0000: GR3: 0 = #0000 = 0000000000000000
715 #0000: GR4: 0 = #0000 = 0000000000000000
716 #0000: GR5: 0 = #0000 = 0000000000000000
717 #0000: GR6: 0 = #0000 = 0000000000000000
718 #0000: GR7: 0 = #0000 = 0000000000000000
719 #0000: SP: 8 = #0008 = 0000000000001000
720 #0000: PR: 0 = #0000 = 0000000000000000
721 #0000: FR (OF SF ZF): 000
723 #0000: adr : 0000 0001 0002 0003 0004 0005 0006 0007
724 #0000: 0000: 1010 0005 2210 0006 8100 0003 0001 0000
726 #0002: GR0: 0 = #0000 = 0000000000000000
727 #0002: GR1: 3 = #0003 = 0000000000000011
728 #0002: GR2: 0 = #0000 = 0000000000000000
729 #0002: GR3: 0 = #0000 = 0000000000000000
730 #0002: GR4: 0 = #0000 = 0000000000000000
731 #0002: GR5: 0 = #0000 = 0000000000000000
732 #0002: GR6: 0 = #0000 = 0000000000000000
733 #0002: GR7: 0 = #0000 = 0000000000000000
734 #0002: SP: 8 = #0008 = 0000000000001000
735 #0002: PR: 2 = #0002 = 0000000000000010
736 #0002: FR (OF SF ZF): 000
738 #0002: adr : 0000 0001 0002 0003 0004 0005 0006 0007
739 #0002: 0000: 1010 0005 2210 0006 8100 0003 0001 0000
741 #0004: GR0: 0 = #0000 = 0000000000000000
742 #0004: GR1: 4 = #0004 = 0000000000000100
743 #0004: GR2: 0 = #0000 = 0000000000000000
744 #0004: GR3: 0 = #0000 = 0000000000000000
745 #0004: GR4: 0 = #0000 = 0000000000000000
746 #0004: GR5: 0 = #0000 = 0000000000000000
747 #0004: GR6: 0 = #0000 = 0000000000000000
748 #0004: GR7: 0 = #0000 = 0000000000000000
749 #0004: SP: 8 = #0008 = 0000000000001000
750 #0004: PR: 4 = #0004 = 0000000000000100
751 #0004: FR (OF SF ZF): 000
753 #0004: adr : 0000 0001 0002 0003 0004 0005 0006 0007
754 #0004: 0000: 1010 0005 2210 0006 8100 0003 0001 0000
757 <a name="Register-Specify"></a>
759 Next: <a rel="next" accesskey="n" href="#Ending-Value">Ending Value</a>,
760 Previous: <a rel="previous" accesskey="p" href="#Register-and-Memory">Register and Memory</a>,
761 Up: <a rel="up" accesskey="u" href="#Register-and-Memory">Register and Memory</a>
765 <h4 class="subsection">3.3.1 特定のレジスタを表示</h4>
767 <p><samp><span class="file">addl.casl</span></samp>のレジスタやメモリの中で、実行中に値が変化しているのはGR1だけです。こうした場合は、<kbd>grep</kbd>を使って表示される内容を絞り込むことで動作を検証しやすくなります。
769 <pre class="example">$ <kbd>casl2 -t addl.casl | grep 'GR1:'</kbd>
770 #0000: GR1: 0 = #0000 = 0000000000000000
771 #0002: GR1: 3 = #0003 = 0000000000000011
772 #0004: GR1: 4 = #0004 = 0000000000000100
774 <p>この内容を、先に出力したアセンブル結果と引き比べてください。
775 次の表のように、PRとGR1、命令行が対応していることがわかります。
777 <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%">命令行
778 <br></td></tr><tr align="left"><td valign="top" width="30%">#0000
779 </td><td valign="top" width="30%">#0000
780 <br></td></tr><tr align="left"><td valign="top" width="30%">#0002
781 </td><td valign="top" width="30%">#0003
782 </td><td valign="top" width="40%"><code>LD GR1,A</code>
783 <br></td></tr><tr align="left"><td valign="top" width="30%">#0004
784 </td><td valign="top" width="30%">#0004
785 </td><td valign="top" width="40%"><code>ADDL GR1,B</code>
786 <br></td></tr></table>
789 <a name="Ending-Value"></a>
791 Next: <a rel="next" accesskey="n" href="#Step-Count">Step Count</a>,
792 Previous: <a rel="previous" accesskey="p" href="#Register-Specify">Register Specify</a>,
793 Up: <a rel="up" accesskey="u" href="#Register-and-Memory">Register and Memory</a>
797 <h4 class="subsection">3.3.2 プログラム終了時の値を表示</h4>
799 <p><kbd>grep</kbd>と<kbd>tail</kbd>を組み合わせれば、プログラム終了時の値を表示できます。
801 <p><samp><span class="file">addl.casl</span></samp>でプログラム終了時の値を確認するには、次のようにします。
803 <pre class="example">$ <kbd>casl2 -t addl.casl | grep 'GR1:' | tail -1</kbd>
804 #0004: GR1: 4 = #0004 = 0000000000000100
806 <p><samp><span class="file">sum_10.casl</span></samp>は、1から10までの整数の和を求めます。
808 <pre class="example">$ <kbd>cat sum_10.casl</kbd>
810 ;;; 出力 GR0: 1から10までの整数をすべて加算した値
814 LD GR1,FST ; GR1に初項を転送
815 LOOP ADDL GR0,GR1 ; ループ先頭
816 ADDL GR1,STEP ; GR1 <- GR1 + 公差
817 CPL GR1,LST ; GR1が末項より大きい場合は終了
827 <p><samp><span class="file">sum_10.casl</span></samp>でファイル終了時の値を確認するには、次のようにします。
829 <pre class="example">$ <kbd>casl2 -t sum_10.casl | grep 'GR0:' | tail -1</kbd>
830 #0010: GR0: 55 = #0037 = 0000000000110111 = '7'
833 <a name="Step-Count"></a>
835 Previous: <a rel="previous" accesskey="p" href="#Ending-Value">Ending Value</a>,
836 Up: <a rel="up" accesskey="u" href="#Register-and-Memory">Register and Memory</a>
840 <h4 class="subsection">3.3.3 プログラムのステップ数を表示</h4>
842 <p><kbd>grep</kbd>と<kbd>wc</kbd>を組み合わせれば、プログラムのステップ数を表示できます。
844 <pre class="example">$ <kbd>casl2 -t hello.casl | grep 'GR1:' | wc -l</kbd>
847 <pre class="example">$ <kbd>casl2 -t addl.casl | grep 'GR1:' | wc -l</kbd>
850 <p><samp><span class="file">sum_10.casl</span></samp>はプログラム内にループがあるため、ステップ数が大きくなります。
852 <pre class="example">$ <kbd>casl2 -t sum_10.casl | grep 'GR0:' | wc -l</kbd>
856 <a name="Only-Assemble"></a>
858 Next: <a rel="next" accesskey="n" href="#Analyze-Word">Analyze Word</a>,
859 Previous: <a rel="previous" accesskey="p" href="#Register-and-Memory">Register and Memory</a>,
860 Up: <a rel="up" accesskey="u" href="#Usage">Usage</a>
864 <h3 class="section">3.4 アセンブルと実行を別に行う</h3>
866 <p><kbd>casl2</kbd>に<samp><span class="option">-O</span></samp><samp><span class="file">ファイル名</span></samp>を指定すると、オブジェクトファイルを作成できます。
868 <pre class="example">$ <kbd>casl2 -Ohello.o hello.casl</kbd>
870 <p>作成されたオブジェクトファイルの内容は、<kbd>od</kbd>を使って確認できます。テキストファイルではないため、<kbd>cat</kbd>などでは確認できません。
872 <pre class="example">$ <kbd>od -t x2 hello.o</kbd>
873 0000000 7001 0000 7002 0000 1210 0013 1220 0020
874 0000020 f000 0002 1210 0021 1220 0022 f000 0002
875 0000040 7120 7110 8100 0048 0065 006c 006c 006f
876 0000060 002c 0020 0057 006f 0072 006c 0064 0021
877 0000100 000d 000a 0001
880 <p>オブジェクトファイルの実行には、<kbd>comet2</kbd>を使います。
882 <pre class="example">$ <kbd>comet2 hello.o</kbd>
886 <a name="Analyze-Word"></a>
888 Next: <a rel="next" accesskey="n" href="#Use-CASL2LIB">Use CASL2LIB</a>,
889 Previous: <a rel="previous" accesskey="p" href="#Only-Assemble">Only Assemble</a>,
890 Up: <a rel="up" accesskey="u" href="#Usage">Usage</a>
894 <h3 class="section">3.5 1語の解析</h3>
896 <p>CASL IIでは、1語(16ビット)を単位としてデータが処理されます。
897 <kbd>dumpword</kbd>は、指定した1語を10進数、16進数、2進数で表示します。
899 <pre class="example">$ <kbd>dumpword 72</kbd>
900 72: 72 = #0048 = 0000000001001000 = 'H'
902 <p>マイナスの数は、次のように<kbd>--</kbd>を付けて指定します。
904 <pre class="example">$ <kbd>dumpword -- -72</kbd>
905 -72: -72 = #FFB8 = 1111111110111000
907 <p>16進数は、次のように次のように<kbd>'</kbd>で囲み<kbd>#</kbd>を付けて指定します。
909 <pre class="example">$ <kbd>dumpword '#0048'</kbd>
910 #0048: 72 = #0048 = 0000000001001000 = 'H'
913 <a name="Use-CASL2LIB"></a>
915 Previous: <a rel="previous" accesskey="p" href="#Analyze-Word">Analyze Word</a>,
916 Up: <a rel="up" accesskey="u" href="#Usage">Usage</a>
920 <h3 class="section">3.6 CASL2ライブラリの使用</h3>
922 <p>YACASL2の<samp><span class="file">as/casl2lib</span></samp>ディレクトリには、CASL IIで記述されたライブラリファイルが格納されています。
924 <p>このフォルダには、たとえば次のようなプログラムが含まれています。
927 <dt><samp><span class="option">OUTL</span></samp><dd><samp><span class="file">outl.casl</span></samp>。GR1に格納された値を、0〜65535の数値として出力します。
929 <br><dt><samp><span class="option">OUTA</span></samp><dd><samp><span class="file">outa.casl</span></samp>。GR1に格納された値を、-32767〜32767の数値として出力します。
931 <br><dt><samp><span class="option">MULL</span></samp><dd><samp><span class="file">mull.casl</span></samp>。GR1とGR2に格納された値を0〜65535の整数と見なし、積をGR3に格納します。
933 <br><dt><samp><span class="option">DIVL</span></samp><dd><samp><span class="file">divl.casl</span></samp>。GR1とGR2に格納された値を0〜65535の整数と見なし、商をGR3、剰余をGR0に格納します。
936 <h4 class="subsection">3.6.1 数値を出力する</h4>
938 <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>を副プログラムとして呼び出します。
940 <pre class="example">$ <kbd>cat addl_outl.casl</kbd>
950 <p>変更したら<kbd>casl2</kbd>を、複数のファイルを指定して実行します。
952 <pre class="example">$ <kbd>casl2 addl_outl.casl ~/yacasl2/as/casl2lib/outl.casl</kbd>
956 <a name="Command-Manual"></a>
958 Next: <a rel="next" accesskey="n" href="#CASL2LIB-Manual">CASL2LIB Manual</a>,
959 Previous: <a rel="previous" accesskey="p" href="#Usage">Usage</a>,
960 Up: <a rel="up" accesskey="u" href="#Top">Top</a>
964 <h2 class="chapter">4 YACASL2コマンドマニュアル</h2>
966 <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>
967 YACASL2のコマンドとオプションについて解説します。
970 <li><a accesskey="1" href="#casl2">casl2</a>: <kbd>casl2</kbd>
971 <li><a accesskey="2" href="#comet2">comet2</a>: <kbd>comet2</kbd>
972 <li><a accesskey="3" href="#dumpword">dumpword</a>: <kbd>dumpword</kbd>
978 Next: <a rel="next" accesskey="n" href="#comet2">comet2</a>,
979 Previous: <a rel="previous" accesskey="p" href="#Command-Manual">Command Manual</a>,
980 Up: <a rel="up" accesskey="u" href="#Command-Manual">Command Manual</a>
984 <h3 class="section">4.1 <kbd>casl2</kbd></h3>
986 <p><a name="index-casl2-2"></a><a name="index-casl2-3"></a>
987 <kbd>casl2</kbd>は、引数として指定されたCASLファイルをアセンブルし、仮想マシンCOMET II上で実行します。CASLファイルは、アセンブラ言語CASL IIで記述されたテキストファイルです。引数が指定されない場合は、エラーメッセージを表示して終了します。
989 <pre class="example">$ <kbd>casl2 hello.casl</kbd>
991 <p>複数のCASLファイルを指定することで、副プログラムを呼び出せます。
993 <pre class="example">$ <kbd>casl2 addl_outl.casl ~/yacasl2/as/casl2lib/outl.casl</kbd>
995 <h4 class="unnumberedsubsec">オプション</h4>
997 <p><kbd>casl2</kbd>は、次のオプションを指定できます。
1000 <dt><samp><span class="option">-s</span></samp><dt><samp><span class="option">--source</span></samp><dd>CASLファイルの内容を表示します。
1002 <br><dt><samp><span class="option">-l</span></samp><dt><samp><span class="option">--label</span></samp><dd>ラベルの一覧を次の形式で表示します。表示後、ほかの作業を続行します。
1004 <pre class="example"> <プログラム名>.<ラベル名> ---> <アドレスの16進数表現>
1006 <br><dt><samp><span class="option">-L</span></samp><dt><samp><span class="option">--labelonly</span></samp><dd><samp><span class="option">-l</span></samp>と同じ形式でラベルの一覧を表示します。表示後、ほかの作業は続行せず、終了します。
1008 <br><dt><samp><span class="option">-a</span></samp><dt><samp><span class="option">--assembledetail</span></samp><dd>アセンブル詳細結果を表示し、ほかの作業を続行します。
1010 <br><dt><samp><span class="option">-A</span></samp><dt><samp><span class="option">--assembledetailonly</span></samp><dd>アセンブル詳細結果を表示して終了します。
1012 <br><dt><samp><span class="option">-o<OBJECTFILE></span></samp><dt><samp><span class="option">--assembleout<OBJECTFILE></span></samp><dd>アセンブル結果をオブジェクトファイル<samp><span class="file"><OBJECTFILE></span></samp>に出力し、ほかの作業を続行します。出力されたオブジェクトファイルは、<kbd>comet2</kbd>で実行できます。オブジェクトファイルを指定しない場合、出力先は<samp><span class="file">a.o</span></samp>です。オブジェクトファイルは1つだけ指定できます。
1014 <br><dt><samp><span class="option">-O[<OBJECTFILE>]</span></samp><dt><samp><span class="option">--assembleoutonly[<OBJECTFILE>]</span></samp><dd>アセンブル結果をオブジェクトファイル<samp><span class="file"><OBJECTFILE></span></samp>に出力し、終了します。出力されたオブジェクトファイルは、<kbd>comet2</kbd>で実行できます。オブジェクトファイルを指定しない場合、出力先は<samp><span class="file">a.o</span></samp>です。オブジェクトファイルは1つだけ指定できます。
1016 <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>プログラム実行中のレジスタの値を次の形式で表示します。
1018 <pre class="example"> <PR値の16進数表現>: <レジスタ>: <値の10進数表現> =
1019 <値の16進数表現> = <値の2進数表現>[ ='文字']
1022 <li><code><PR値の16進数表現></code>と<code><レジスタ></code>、<code><値の16進数表現></code>は、4けたの16進数で表されます。<code><PR値の16進数表現></code>と<code><値の16進数表現></code>には、先頭に<code>#</code>が付きます。範囲は<code>#0000</code>から<code>#FFFF</code>です
1024 <li><code><値の10進数表現></code>は符号の付いた10進数です。範囲は-32768から32767です。
1026 <li><code><値の2進数表現></code>は、16けたの2進数で表されます。範囲は、<code>0000000000000000</code>から<code>1111111111111111</code>です
1028 <li><code>[ ='文字']</code>は、レジストリの値が「文字の組」の範囲に含まれる場合に表示されます。
1031 <p>表示されるレジスタには、次の種類があります。
1034 <dt><code>GR0 GR1 GR2 GR3 GR4 GR5 GR6 GR7</code><dd>汎用レジスタ
1036 <br><dt><code>SP</code><dd>スタックポインタ
1038 <br><dt><code>PR</code><dd>プログラムレジスタ
1040 <br><dt><code>FR</code><dd>フラグレジスタ
1045 <pre class="example"> #0002: GR1: 3 = #0003 = 0000000000000011
1047 <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>と異なり、<code><値の10進数表現></code>は符号の付かない10進数です。値の範囲は0から65535です。
1049 <br><dt><samp><span class="option">-d</span></samp><dt><samp><span class="option">--dump</span></samp><dd>メモリの内容をすべて表示します。
1051 <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から65535の範囲で指定します。指定しない場合、512です。
1053 <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です。
1055 <br><dt><samp><span class="option">-h</span></samp><dt><samp><span class="option">--help</span></samp><dd><kbd>casl2</kbd>の使用方法を表示して終了します。
1059 <a name="comet2"></a>
1061 Next: <a rel="next" accesskey="n" href="#dumpword">dumpword</a>,
1062 Previous: <a rel="previous" accesskey="p" href="#casl2">casl2</a>,
1063 Up: <a rel="up" accesskey="u" href="#Command-Manual">Command Manual</a>
1067 <h3 class="section">4.2 <kbd>comet2</kbd></h3>
1069 <p><a name="index-comet2-4"></a><a name="index-comet2-5"></a>
1070 <kbd>comet2</kbd>は、引数として指定されたオブジェクトファイルを仮想マシンCOMET II上で実行します。オブジェクトファイルは、<kbd>casl</kbd>に<samp><span class="option">-o</span></samp>または<samp><span class="option">-O</span></samp>を指定して出力します。
1072 <pre class="example">$ <kbd>comet2 hello.o</kbd>
1074 <p>引数で指定できるオブジェクトファイルは1つだけです。引数が指定されない場合は、エラーメッセージを表示して終了します。複数の引数を指定した場合、2番目以降の引数は無視されます。
1076 <h4 class="unnumberedsubsec">オプション</h4>
1078 <p><kbd>comet2</kbd>は、次のオプションを指定できます。
1081 <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>プログラム実行中のレジスタの値を次の形式で表示します。<code><値の10進数表現></code>は符号の付いた10進数です。範囲は-32768から32767です。
1083 <pre class="example"> <PR値の16進数表現>: <レジスタ>: <値の10進数表現> = <値の16進数表現> = <値の2進数表現>[ ='文字']
1086 <li><code><PR値の16進数表現></code>と<code><値の16進数表現></code>は、先頭に<code>#</code>が付いた4けたの16進数で表されます。範囲は、<code>#0000</code>から<code>#FFFF</code>です
1088 <li><code><値の2進数表現></code>は、16けたの2進数で表されます。範囲は、<code>0000000000000000</code>から<code>1111111111111111</code>です
1090 <li><code>[ ='文字']</code>は、レジストリの値が「文字の組」の範囲に含まれる場合に表示されます。
1095 <pre class="example"> #0002: GR1: 3 = #0003 = 0000000000000011
1097 <p>表示されるレジスタには、次の種類があります。
1100 <dt><code>GR0 GR1 GR2 GR3 GR4 GR5 GR6 GR7</code><dd>汎用レジスタ
1102 <br><dt><code>SP</code><dd>スタックポインタ
1104 <br><dt><code>PR</code><dd>プログラムレジスタ
1106 <br><dt><code>FR</code><dd>フラグレジスタ
1109 <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>と異なり、<code><値の10進数表現></code>は符号の付かない10進数です。値の範囲は0から65535です。
1111 <br><dt><samp><span class="option">-d</span></samp><dt><samp><span class="option">--dump</span></samp><dd>メモリの内容をすべて表示します。
1113 <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から65535の範囲で指定します。指定しない場合、512です。
1115 <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です。
1117 <br><dt><samp><span class="option">-h</span></samp><dt><samp><span class="option">--help</span></samp><dd><kbd>comet2</kbd>の使用方法を表示して終了します。
1121 <a name="dumpword"></a>
1123 Previous: <a rel="previous" accesskey="p" href="#comet2">comet2</a>,
1124 Up: <a rel="up" accesskey="u" href="#Command-Manual">Command Manual</a>
1128 <h3 class="section">4.3 <kbd>dumpword</kbd></h3>
1130 <p><a name="index-dumpword-6"></a><a name="index-dumpword-7"></a>
1131 <kbd>dumpword</kbd>は、引数として指定された数値を、整数、#0000〜#FFFFの範囲の16進数、2進数で表示します。文字の組に該当する場合は、「 = 」のうしろに文字が表示されます。引数は、10進数または先頭に「#」の付いた16進数で指定します。表示される整数は、オプションにより符号付きか符号なしかを指定します。オプションなしの場合は符号付きです。整数の範囲は、符号付きの場合は-32768から32767、符号なしの場合は0から65535です。
1133 <pre class="example">$ <kbd>dumpword 10</kbd>
1135 <p>引数で指定できる1つだけです。引数が指定されない場合は、使い方を表示して終了します。複数の引数を指定した場合、2番目以降の引数は無視されます。
1137 <h4 class="unnumberedsubsec">オプション</h4>
1139 <p><kbd>dumpword</kbd>は、次のオプションを指定できます。
1142 <dt><samp><span class="option">-a</span></samp><dt><samp><span class="option">--arithmetic</span></samp><dd>出力される整数の範囲を-32,768〜32,767にします。オプションなしの場合と同じです。
1144 <br><dt><samp><span class="option">-l</span></samp><dt><samp><span class="option">--logical</span></samp><dd>出力される整数の範囲を0〜65,535にします。
1146 <br><dt><samp><span class="option">-h</span></samp><dt><samp><span class="option">--help</span></samp><dd><kbd>dumpword</kbd>の使用方法を表示して終了します。
1150 <a name="CASL2LIB-Manual"></a>
1152 Previous: <a rel="previous" accesskey="p" href="#Command-Manual">Command Manual</a>,
1153 Up: <a rel="up" accesskey="u" href="#Top">Top</a>
1157 <h2 class="chapter">5 CASL2LIBマニュアル</h2>
1160 <li><a accesskey="1" href="#ABS">ABS</a>: <kbd>ABS</kbd> - <samp><span class="file">abs.casl</span></samp>
1161 <li><a accesskey="2" href="#DIVA">DIVA</a>: <kbd>DIVA</kbd> - <samp><span class="file">diva.casl</span></samp>
1162 <li><a accesskey="3" href="#DIVL">DIVL</a>: <kbd>DIVL</kbd> - <samp><span class="file">divl.casl</span></samp>
1163 <li><a accesskey="4" href="#INL">INL</a>: <kbd>INL</kbd> - <samp><span class="file">inl.casl</span></samp>
1164 <li><a accesskey="5" href="#L2STR">L2STR</a>: <kbd>L2STR</kbd> - <samp><span class="file">l2str.casl</span></samp>
1165 <li><a accesskey="6" href="#MAX">MAX</a>: <kbd>MAX</kbd> - <samp><span class="file">max.casl</span></samp>
1166 <li><a accesskey="7" href="#MINIM">MINIM</a>: <kbd>MINIM</kbd> - <samp><span class="file">minim.casl</span></samp>
1167 <li><a accesskey="8" href="#MULA">MULA</a>: <kbd>MULA</kbd> - <samp><span class="file">mula.casl</span></samp>
1168 <li><a accesskey="9" href="#MULL">MULL</a>: <kbd>MULL</kbd> - <samp><span class="file">mull.casl</span></samp>
1169 <li><a href="#OUTA">OUTA</a>: <kbd>OUTA</kbd> - <samp><span class="file">outa.casl</span></samp>
1170 <li><a href="#OUTB">OUTB</a>: <kbd>OUTB</kbd> - <samp><span class="file">outb.casl</span></samp>
1171 <li><a href="#OUTD_005fQ15">OUTD_Q15</a>: <kbd>OUTD_Q15</kbd> - <samp><span class="file">outd_q15.casl</span></samp>
1172 <li><a href="#OUTL">OUTL</a>: <kbd>OUTL</kbd> - <samp><span class="file">outl.casl</span></samp>
1173 <li><a href="#REV">REV</a>: <kbd>REV</kbd> - <samp><span class="file">rev.casl</span></samp>
1174 <li><a href="#STR2L">STR2L</a>: <kbd>STR2L</kbd> - <samp><span class="file">str2l.casl</span></samp>
1180 Next: <a rel="next" accesskey="n" href="#DIVA">DIVA</a>,
1181 Previous: <a rel="previous" accesskey="p" href="#CASL2LIB-Manual">CASL2LIB Manual</a>,
1182 Up: <a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1186 <h3 class="section">5.1 <kbd>ABS</kbd> - <samp><span class="file">abs.casl</span></samp></h3>
1188 <p>GR1を符号付き整数とみなし、絶対値に変換
1190 <h4 class="unnumberedsubsec">入力</h4>
1193 <dt><code>GR1</code><dd>符号付き整数
1196 <h4 class="unnumberedsubsec">出力</h4>
1199 <dt><code>GR1</code><dd>入力された値の絶対値
1201 <br><dt><code>OF</code><dd>入力された値が-32768の場合、1
1203 <br><dt><code>SF</code><dd>入力された値が負数(-32767から-1)の場合、1
1206 <h4 class="unnumberedsubsec">依存する副プログラム</h4>
1210 <h4 class="unnumberedsubsec">使用例</h4>
1212 <pre class="example"><pre class="verbatim">;;; CASL2LIB > ABSを呼び出し、-1の絶対値を表示
1221 <pre class="example">$ <kbd>casl2 call_abs.casl $CASL2LIB/abs.casl $CASL2LIB/outa.casl \
1222 $CASL2LIB/divl.casl $CASL2LIB/rev.casl</kbd>
1228 Next: <a rel="next" accesskey="n" href="#DIVL">DIVL</a>,
1229 Previous: <a rel="previous" accesskey="p" href="#ABS">ABS</a>,
1230 Up: <a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1234 <h3 class="section">5.2 <kbd>DIVA</kbd> - <samp><span class="file">diva.casl</span></samp></h3>
1236 <p>符号付き整数の割算を筆算方式で行う
1238 <h4 class="unnumberedsubsec">入力</h4>
1241 <dt><code>GR1</code><dd>被除数
1243 <br><dt><code>GR2</code><dd>除数
1246 <h4 class="unnumberedsubsec">出力</h4>
1249 <dt><code>GR0</code><dd>商
1251 <br><dt><code>GR3</code><dd>剰余
1253 <br><dt><code>OF</code><dd>次の場合、1
1262 <br><dt><code>SF</code><dd>商が負数(-32767から-1)の場合、1
1264 <br><dt><code>ZF</code><dd>商が0の場合、1
1267 <h4 class="unnumberedsubsec">依存する副プログラム</h4>
1270 <li><code>DIVL</code>
1273 <h4 class="unnumberedsubsec">使用例</h4>
1275 <pre class="example"><pre class="verbatim">;; CASL2LIB > DIVAを呼び出し、-32767 / 255 の商と剰余を表示
1294 <pre class="example">$ <kbd>casl2 call_diva.casl $CASL2LIB/diva.casl $CASL2LIB/divl.casl \
1295 $CASL2LIB/outa.casl $CASL2LIB/abs.casl $CASL2LIB/rev.casl</kbd>
1302 Next: <a rel="next" accesskey="n" href="#INL">INL</a>,
1303 Previous: <a rel="previous" accesskey="p" href="#DIVA">DIVA</a>,
1304 Up: <a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1308 <h3 class="section">5.3 <kbd>DIVL</kbd> - <samp><span class="file">divl.casl</span></samp></h3>
1310 <p>符号なし整数の割算を筆算方式で行う
1312 <h4 class="unnumberedsubsec">入力</h4>
1315 <dt><code>GR1</code><dd>被除数
1317 <br><dt><code>GR2</code><dd>除数
1320 <h4 class="unnumberedsubsec">出力</h4>
1323 <dt><code>GR0</code><dd>商
1325 <br><dt><code>GR3</code><dd>剰余
1327 <br><dt><code>OF</code><dd>GR2が0の場合、1
1329 <br><dt><code>SF</code><dd>商が32768から65535の場合、1
1331 <br><dt><code>ZF</code><dd>商が0の場合、1
1334 <h4 class="unnumberedsubsec">依存する副プログラム</h4>
1338 <h4 class="unnumberedsubsec">使用例</h4>
1340 <pre class="example"><pre class="verbatim">;; CASL2LIB > DIVLを呼び出し、65534 / 255 の商と剰余を表示
1359 <pre class="example">$ <kbd>casl2 call_divl.casl $CASL2LIB/divl.casl $CASL2LIB/outl.casl \
1360 $CASL2LIB/rev.casl</kbd>
1367 Next: <a rel="next" accesskey="n" href="#L2STR">L2STR</a>,
1368 Previous: <a rel="previous" accesskey="p" href="#DIVL">DIVL</a>,
1369 Up: <a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1373 <h3 class="section">5.4 <kbd>INL</kbd> - <samp><span class="file">inl.casl</span></samp></h3>
1377 <h4 class="unnumberedsubsec">入力</h4>
1380 <dt><code>標準入力</code><dd>符号なし整数
1383 <h4 class="unnumberedsubsec">出力</h4>
1386 <dt><code>GR1</code><dd>入力された符号なし整数
1388 <br><dt><code>GR0</code><dd>文字列の長さ。数字以外が入力された場合は<code>#FFFF</code>
1391 <h4 class="unnumberedsubsec">依存する副プログラム</h4>
1394 <li><code>STR2L</code>
1397 <h4 class="unnumberedsubsec">使用例</h4>
1399 <p>次のコマンドを実行すると、数値の入力が受け付けられ、入力された数値が表示される。
1401 <pre class="example"><pre class="verbatim">;;; casl2 -M1024 call_inl.casl $CASL2LIB/inl.casl $CASL2LIB/str2l.casl $CASL2LIB/mull.casl \
1402 ;;; $CASL2LIB/outl.casl $CASL2LIB/divl.casl $CASL2LIB/rev.casl
1404 LOOP CALL INL ; GR1に数値、GR0に文字列の長さ
1416 NAN OUT NANMSG,MLEN2
1418 LENOV OUT LENOVMSG,MLEN3
1420 OVMSG DC 'Over 65535'
1422 NANMSG DC 'Not integer'
1424 LENOVMSG DC 'Str too long. Stop'
1428 <pre class="example">$ <kbd>casl2 -M1024 call_inl.casl $CASL2LIB/inl.casl $CASL2LIB/str2l.casl $CASL2LIB/mull.casl \
1429 $CASL2LIB/outl.casl $CASL2LIB/divl.casl $CASL2LIB/rev.casl</kbd>
1432 <a name="L2STR"></a>
1434 Next: <a rel="next" accesskey="n" href="#MAX">MAX</a>,
1435 Previous: <a rel="previous" accesskey="p" href="#INL">INL</a>,
1436 Up: <a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1440 <h3 class="section">5.5 <kbd>L2STR</kbd> - <samp><span class="file">l2str.casl</span></samp></h3>
1444 <h4 class="unnumberedsubsec">入力</h4>
1447 <dt><code>GR1</code><dd>符号なし整数
1449 <br><dt><code>GR2</code><dd>変換した文字列を格納するアドレス
1452 <h4 class="unnumberedsubsec">出力</h4>
1455 <dt><code>GR0</code><dd>文字列の長さ
1458 <h4 class="unnumberedsubsec">依存する副プログラム</h4>
1461 <li><code>DIVL</code>
1467 Next: <a rel="next" accesskey="n" href="#MINIM">MINIM</a>,
1468 Previous: <a rel="previous" accesskey="p" href="#L2STR">L2STR</a>,
1469 Up: <a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1473 <h3 class="section">5.6 <kbd>MAX</kbd> - <samp><span class="file">max.casl</span></samp></h3>
1475 <p>連続した複数のWORDを符号付き整数とみなして最大値を返す
1477 <h4 class="unnumberedsubsec">入力</h4>
1480 <dt><code>GR1</code><dd>WORD値を格納したアドレス
1482 <br><dt><code>GR2</code><dd>値の個数
1485 <h4 class="unnumberedsubsec">出力</h4>
1488 <dt><code>GR0</code><dd>最大値
1491 <h4 class="unnumberedsubsec">依存する副プログラム</h4>
1496 <a name="MINIM"></a>
1498 Next: <a rel="next" accesskey="n" href="#MULA">MULA</a>,
1499 Previous: <a rel="previous" accesskey="p" href="#MAX">MAX</a>,
1500 Up: <a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1504 <h3 class="section">5.7 <kbd>MINIM</kbd> - <samp><span class="file">minim.casl</span></samp></h3>
1506 <p>連続した複数のWORDを符号付き整数とみなして最小値を返す
1508 <h4 class="unnumberedsubsec">入力</h4>
1511 <dt><code>GR1</code><dd>WORD値を格納したアドレス
1513 <br><dt><code>GR2</code><dd>値の個数
1516 <h4 class="unnumberedsubsec">出力</h4>
1519 <dt><code>GR0</code><dd>最小値
1522 <h4 class="unnumberedsubsec">依存する副プログラム</h4>
1529 Next: <a rel="next" accesskey="n" href="#MULL">MULL</a>,
1530 Previous: <a rel="previous" accesskey="p" href="#MINIM">MINIM</a>,
1531 Up: <a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1535 <h3 class="section">5.8 <kbd>MULA</kbd> - <samp><span class="file">mula.casl</span></samp></h3>
1540 Next: <a rel="next" accesskey="n" href="#OUTA">OUTA</a>,
1541 Previous: <a rel="previous" accesskey="p" href="#MULA">MULA</a>,
1542 Up: <a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1546 <h3 class="section">5.9 <kbd>MULL</kbd> - <samp><span class="file">mull.casl</span></samp></h3>
1551 Next: <a rel="next" accesskey="n" href="#OUTB">OUTB</a>,
1552 Previous: <a rel="previous" accesskey="p" href="#MULL">MULL</a>,
1553 Up: <a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1557 <h3 class="section">5.10 <kbd>OUTA</kbd> - <samp><span class="file">outa.casl</span></samp></h3>
1562 Next: <a rel="next" accesskey="n" href="#OUTD_005fQ15">OUTD_Q15</a>,
1563 Previous: <a rel="previous" accesskey="p" href="#OUTA">OUTA</a>,
1564 Up: <a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1568 <h3 class="section">5.11 <kbd>OUTB</kbd> - <samp><span class="file">outb.casl</span></samp></h3>
1571 <a name="OUTD_Q15"></a>
1572 <a name="OUTD_005fQ15"></a>
1574 Next: <a rel="next" accesskey="n" href="#OUTL">OUTL</a>,
1575 Previous: <a rel="previous" accesskey="p" href="#OUTB">OUTB</a>,
1576 Up: <a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1580 <h3 class="section">5.12 <kbd>OUTD_Q15</kbd> - <samp><span class="file">outd_q15.casl</span></samp></h3>
1585 Next: <a rel="next" accesskey="n" href="#REV">REV</a>,
1586 Previous: <a rel="previous" accesskey="p" href="#OUTD_005fQ15">OUTD_Q15</a>,
1587 Up: <a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1591 <h3 class="section">5.13 <kbd>OUTL</kbd> - <samp><span class="file">outl.casl</span></samp></h3>
1596 Next: <a rel="next" accesskey="n" href="#STR2L">STR2L</a>,
1597 Previous: <a rel="previous" accesskey="p" href="#OUTL">OUTL</a>,
1598 Up: <a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1602 <h3 class="section">5.14 <kbd>REV</kbd> - <samp><span class="file">rev.casl</span></samp></h3>
1605 <a name="STR2L"></a>
1607 Previous: <a rel="previous" accesskey="p" href="#REV">REV</a>,
1608 Up: <a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1612 <h3 class="section">5.15 <kbd>STR2L</kbd> - <samp><span class="file">str2l.casl</span></samp></h3>