Merge branch 'master' of dragon:/home/dav/yacasl2
[YACASL2.git] / doc / yacasl2.html
1 <html lang="en">
2 <head>
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.13">
7 <link title="Top" rel="top" href="#Top">
8 <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
9 <!--
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; } 
22 body {
23     margin-left: 6em;
24     margin-right: 12em;
25     color: black;
26     background-color: #EEE;
27 }
28
29 h1, h2 {
30     margin-left: -2em;
31 }
32
33 .node{
34     margin-left: -3em;
35 }
36
37 h2 {
38     padding: 0.25em;
39     color: white;
40     background-color: navy;
41 }
42
43 h3, h4 {
44     color: navy;
45     margin-left: -1em;
46 }
47
48 p {
49     line-height: 1.5em;
50     margin-top: 0;
51     margin-bottom: 0.5em;
52 }
53
54 a:hover {
55     color: red;
56     text-decoration: underline;
57 }
58
59 kbd {
60     font-family: monospace;
61 }
62
63 table.cartouche {
64     width: 60%;
65 }
66
67 pre.example {
68     padding: 0.5em 1em 0.5em 1em;
69     color: #CCC;
70     background: black;
71     font-size: 90%;
72 }
73
74 a {
75     text-decoration: none;
76 }
77
78 blockquote.p {
79     margin-top:0;
80     padding-top:0;
81     line-height: 100%;
82 }
83
84 table, th, td {
85     border: 1px solid #CCC;
86     border-collapse: collapse; /* 枠線の表示方法 */
87 }
88
89 table.cartouche, table.cartouche th, table.cartouche td  {
90     border: none;
91 }
92
93 pre.example kbd, pre.example .option {
94     font-weight: bold;
95     background-color: inherit;
96     color: white;
97 }
98
99 pre.example em {
100     font: inherit;
101     border: 2px solid green;
102 }
103 --></style>
104 </head>
105 <body>
106 <h1 class="settitle">YACASL2 - Linux上のCASL II処理系</h1>
107 <a name="Top"></a>
108
109 <div class="contents">
110 <h2>Table of Contents</h2>
111 <ul>
112 <li><a name="toc_About" href="#About">1 YACASL2の概要</a>
113 <ul>
114 <li><a href="#About">要件</a>
115 </li></ul>
116 <li><a name="toc_Install" href="#Install">2 YACASL2のインストール</a>
117 <ul>
118 <li><a href="#Download">2.1 YACASL2ファイルのダウンロード</a>
119 <li><a href="#Verify">2.2 YACASL2ファイルの検証</a>
120 <li><a href="#Expand">2.3 YACASL2ファイルの展開</a>
121 <li><a href="#Build">2.4 <kbd>casl2</kbd>、<kbd>comet2</kbd>、<kbd>dumpword</kbd>のビルド</a>
122 <li><a href="#Simple-Test">2.5 <kbd>casl2</kbd>の実行テスト</a>
123 <li><a href="#Detail-Test">2.6 詳細なテスト</a>
124 <li><a href="#Environment">2.7 環境変数の設定</a>
125 <ul>
126 <li><a href="#Environment">シェルの確認</a>
127 <li><a href="#Environment"><code>PATH</code>にYACASL2のディレクトリを追加</a>
128 <li><a href="#Environment"><code>CASL2LIB</code>の設定</a>
129 </li></ul>
130 </li></ul>
131 <li><a name="toc_Usage" href="#Usage">3 YACASL2の使い方</a>
132 <ul>
133 <li><a href="#Simple-Output">3.1 実行結果の出力だけを表示</a>
134 <li><a href="#Assemble-Result">3.2 アセンブル結果の確認</a>
135 <li><a href="#Register-and-Memory">3.3 実行時のレジスタとメモリを表示</a>
136 <ul>
137 <li><a href="#Register-Specify">3.3.1 特定のレジスタを表示</a>
138 <li><a href="#Ending-Value">3.3.2 プログラム終了時の値を表示</a>
139 <li><a href="#Step-Count">3.3.3 プログラムのステップ数を表示</a>
140 </li></ul>
141 <li><a href="#Only-Assemble">3.4 アセンブルと実行を別に行う</a>
142 <li><a href="#Analyze-Word">3.5 1語の解析</a>
143 <li><a href="#CASL2lib">3.6 CASL2ライブラリの使用</a>
144 <ul>
145 <li><a href="#CASL2lib">3.6.1 数値を出力する</a>
146 </li></ul>
147 </li></ul>
148 <li><a name="toc_Command-Manual" href="#Command-Manual">4 YACASL2コマンドマニュアル</a>
149 <ul>
150 <li><a href="#casl2">4.1 <kbd>casl2</kbd></a>
151 <ul>
152 <li><a href="#casl2">オプション</a>
153 </li></ul>
154 <li><a href="#comet2">4.2 <kbd>comet2</kbd></a>
155 <ul>
156 <li><a href="#comet2">オプション</a>
157 </li></ul>
158 <li><a href="#dumpword">4.3 <kbd>dumpword</kbd></a>
159 <ul>
160 <li><a href="#dumpword">オプション</a>
161 </li></ul>
162 </li></ul>
163 <li><a name="toc_CASL2LIB-Manual" href="#CASL2LIB-Manual">5 CASL2LIBマニュアル</a>
164 <ul>
165 <li><a href="#ABS">5.1 <kbd>ABS</kbd> - <samp><span class="file">abs.casl</span></samp></a>
166 <ul>
167 <li><a href="#ABS">入力</a>
168 <li><a href="#ABS">出力</a>
169 <li><a href="#ABS">依存する副プログラム</a>
170 <li><a href="#ABS">使用例</a>
171 </li></ul>
172 <li><a href="#DIVA">5.2 <kbd>DIVA</kbd> - <samp><span class="file">diva.casl</span></samp></a>
173 <ul>
174 <li><a href="#DIVA">入力</a>
175 <li><a href="#DIVA">出力</a>
176 <li><a href="#DIVA">依存する副プログラム</a>
177 <li><a href="#DIVA">使用例</a>
178 </li></ul>
179 <li><a href="#DIVL">5.3 <kbd>DIVL</kbd> - <samp><span class="file">divl.casl</span></samp></a>
180 <ul>
181 <li><a href="#DIVL">入力</a>
182 <li><a href="#DIVL">出力</a>
183 <li><a href="#DIVL">依存する副プログラム</a>
184 <li><a href="#DIVL">使用例</a>
185 </li></ul>
186 <li><a href="#INL">5.4 <kbd>INL</kbd> - <samp><span class="file">inl.casl</span></samp></a>
187 <ul>
188 <li><a href="#INL">入力</a>
189 <li><a href="#INL">出力</a>
190 <li><a href="#INL">依存する副プログラム</a>
191 <li><a href="#INL">使用例</a>
192 </li></ul>
193 <li><a href="#L2STR">5.5 <kbd>L2STR</kbd> - <samp><span class="file">l2str.casl</span></samp></a>
194 <li><a href="#MAX">5.6 <kbd>MAX</kbd> - <samp><span class="file">max.casl</span></samp></a>
195 <li><a href="#MINIM">5.7 <kbd>MINIM</kbd> - <samp><span class="file">minim.casl</span></samp></a>
196 <li><a href="#MULA">5.8 <kbd>MULA</kbd> - <samp><span class="file">mula.casl</span></samp></a>
197 <li><a href="#MULL">5.9 <kbd>MULL</kbd> - <samp><span class="file">mull.casl</span></samp></a>
198 <li><a href="#OUTA">5.10 <kbd>OUTA</kbd> - <samp><span class="file">outa.casl</span></samp></a>
199 <li><a href="#OUTB">5.11 <kbd>OUTB</kbd> - <samp><span class="file">outb.casl</span></samp></a>
200 <li><a href="#OUTD_005fQ15">5.12 <kbd>OUTD_Q15</kbd> - <samp><span class="file">outd_q15.casl</span></samp></a>
201 <li><a href="#OUTL">5.13 <kbd>OUTL</kbd> - <samp><span class="file">outl.casl</span></samp></a>
202 <li><a href="#REV">5.14 <kbd>REV</kbd> - <samp><span class="file">rev.casl</span></samp></a>
203 <li><a href="#STR2L">5.15 <kbd>STR2L</kbd> - <samp><span class="file">str2l.casl</span></samp></a>
204 </li></ul>
205 </li></ul>
206 </div>
207
208 <p><a name="About"></a>
209
210 <h2 class="chapter">1 YACASL2の概要</h2>
211
212 <p>YACASL2は、UNIX/Linuxのコマンドラインインターフェイスで動作するオープンソースのCASL II処理システムです。CASL IIは情報処理試験で用いられるアセンブラ言語で、次の資料により仕様が公開されています。
213
214  <blockquote>
215 <a href="http://www.jitec.ipa.go.jp/1_00topic/topic_20081027_hani_yougo.pdf">試験で使用する情報処理用語・プログラム言語など(2008年10月版)</a>[PDFファイル]
216 別紙 1 アセンブラ言語の仕様
217 </blockquote>
218
219  <p>YACASL2は、CASL IIアセンブラ言語で記述されたファイルをアセンブルし、仮想マシンCOMET II上で実行します。アセンブルと実行は、連続で行うことも別々に行うことも可能です。
220 YACASL2の動作はCASL IIの仕様に準拠しているため、情報処理試験の問題をはじめ各種参考書やサイトに記載されたCASL IIのプログラムをそのままアセンブルして実行できます。また、本パッケージ中にCASL IIのサンプルプログラムが多数収録されています。
221
222  <p>YACASL2は、「ふつうの処理系」として動作します。ほかの多くのCASL IIエミュレータと違い、デバッガとして動作したり、コンピュータ内部の模式図を表示したりすることはありません。そのかわり、YACASL2は、次のような動作内容をすべてテキストで出力します。
223
224      <ul>
225 <li>ラベルとアドレスの対応
226
227      <li>アセンブル結果
228
229      <li>実行時のレジスタの内容
230
231      <li>実行時のメモリの内容
232 </ul>
233
234  <p>出力された動作内容は、GNU/Linuxのさまざまなツール、たとえば<kbd>cat</kbd>、<kbd>less</kbd>、<kbd>grep</kbd>、<kbd>wc</kbd>などを使って解析できます。
235
236  <p>YACASL2の操作は、端末を開いてコマンドを入力・実行することで行います。
237
238 <h3 class="unnumberedsec">要件</h3>
239
240 <p>YACASL2は、LinuxやMac OS Xなど、UNIX系のOS上で動作します。現在動作を確認しているのは、次の環境です。
241
242      <ul>
243 <li>Ubuntu Linux 10.04
244
245      <li>Vine Linux 5.2
246
247      <li>Mac OS X 10.6.5
248 </ul>
249
250  <p>インストール時に、<kbd>tar</kbd>、<kbd>gcc</kbd>、<kbd>make</kbd>が必要です。Linuxの場合は、標準でインストールされていることが多いと思います。Mac OS Xの場合、<code>Xcode</code>をインストールしてください。
251
252 <p><a name="Install"></a>
253
254 <h2 class="chapter">2 YACASL2のインストール</h2>
255
256 <p>YACASL2をインストールするには、Linux上で次の作業をします。
257
258 <p><a name="Download"></a>
259
260 <h3 class="section">2.1 YACASL2ファイルのダウンロード</h3>
261
262 <p>次の場所から最新版の<samp><span class="file">tar.gz</span></samp>ファイルをダウンロードします。
263 <blockquote>
264 <a href="http://github.com/j8takagi/YACASL2">GitHub/j8takagi/YACASL2</a>の<a href="http://github.com/j8takagi/YACASL2/downloads">ダウンロードページ</a>
265 </blockquote>
266
267  <p>続けて、対応する<samp><span class="file">md5sum</span></samp>ファイルをダウンロードします。
268
269 <p><a name="Verify"></a>
270
271 <h3 class="section">2.2 YACASL2ファイルの検証</h3>
272
273 <p>ダウンロードが完了したら、<kbd>md5sum</kbd>と<kbd>diff</kbd>で正しくファイルがダウンロードができているかを検証します。
274
275 <pre class="example">  $ <kbd>md5sum yacasl2.tar.gz | diff -s yacasl2.tar.gz.md5sum -</kbd>
276   Files yacasl2.tar.gz.md5sum and - are identical
277 </pre>
278  <p><a name="Expand"></a>
279
280 <h3 class="section">2.3 YACASL2ファイルの展開</h3>
281
282 <p>YACASL2ファイルをダウンロードしたら、次のコマンドで展開します。
283
284 <pre class="example">  $ <kbd>tar xvzf yacasl2.tar.gz</kbd>
285 </pre>
286  <p><a name="Build"></a>
287
288 <h3 class="section">2.4 <kbd>casl2</kbd>、<kbd>comet2</kbd>、<kbd>dumpword</kbd>のビルド</h3>
289
290 <p>展開したら、次のコマンドで<kbd>casl2</kbd>、<kbd>comet2</kbd>、<kbd>dumpword</kbd>をビルドします。
291
292 <pre class="example">  $ <kbd>cd yacasl2</kbd>
293   $ <kbd>make</kbd>
294   make -C src
295   make[1]: Entering directory ‘/home/kazubito/yacasl2/src’
296   gcc -c -g -Wall -I ../include casl2.c
297   gcc -c -g -Wall -I ../include word.c
298   gcc -c -g -Wall -I ../include hash.c
299   gcc -c -g -Wall -I ../include cerr.c
300   gcc -c -g -Wall -I ../include struct.c
301   gcc -c -g -Wall -I ../include cmd.c
302   gcc -c -g -Wall -I ../include assemble.c
303   gcc -c -g -Wall -I ../include token.c
304   gcc -c -g -Wall -I ../include label.c
305   gcc -c -g -Wall -I ../include macro.c
306   gcc -c -g -Wall -I ../include exec.c
307   gcc -c -g -Wall -I ../include dump.c
308   gcc -g -Wall -I ../include -o ../casl2 casl2.o word.o hash.o cerr.o st
309   ruct.o cmd.o assemble.o token.o label.o macro.o exec.o dump.o
310   gcc -c -g -Wall -I ../include comet2.c
311   gcc -g -Wall -I ../include -o ../comet2 comet2.o word.o hash.o cerr.o
312   struct.o cmd.o exec.o dump.o
313   gcc -c -g -Wall -I ../include dumpword.c
314   gcc -g -Wall -I ../include -o ../dumpword dumpword.o word.o cerr.o
315   make[1]: Leaving directory ‘/home/kazubito/yacasl2/src’
316 </pre>
317  <p><a name="Simple-Test"></a>
318
319 <h3 class="section">2.5 <kbd>casl2</kbd>の実行テスト</h3>
320
321 <p>ビルドしたら、次のコマンドが正常に実行できるかを確認します。
322 正常に実行された場合は、「Hello, World!」と表示されます。
323
324 <pre class="example">  $ <kbd>./casl2 as/hello.casl</kbd>
325   Hello, World!
326 </pre>
327  <p><a name="Detail-Test"></a>
328
329 <h3 class="section">2.6 詳細なテスト</h3>
330
331 <p>次のコマンドを実行すると、正常にビルドできているかどうかを詳細にテストできます。
332
333 <pre class="example">  $ <kbd>make check</kbd>
334   195 / 195 tests passed. Details in /home/username/yacasl2/test/integra
335   tion/casl2/Test.log
336   All tests are succeded.
337   149 / 149 tests passed. Details in /home/username/yacasl2/test/integra
338   tion/comet2/Test.log
339   All tests are succeded.
340   4 / 4 tests passed. Details in /home/username/yacasl2/test/integration
341   /dumpword/Test.log
342   All tests are succeded.
343 </pre>
344  <p><a name="Environment"></a>
345
346 <h3 class="section">2.7 環境変数の設定</h3>
347
348 <p>環境変数を設定することで、YACASL2が使いやすくなります。環境変数の設定は、シェルの初期設定ファイルに追加することでログインしたあと自動的に反映されます。
349 するときは、
350 環境変数<code>PATH</code>にYACASL2のディレクトリを追加すると、どのディレクトリでも<kbd>casl2</kbd>、<kbd>comet2</kbd>、<kbd>dumpword</kbd>を実行できます。また、
351
352 <h4 class="unnumberedsubsec">シェルの確認</h4>
353
354 <p>環境変数の設定方法は使っているシェルによって異なります。シェルは、次のコマンドで確認できます。
355
356 <pre class="example">  $ <kbd>echo $SHELL</kbd>
357   /bin/bash
358 </pre>
359  <p>現在もっとも多く使われているシェルは、BASHでしょう。以下、BASHでの設定方法を記載します。
360
361 <h4 class="unnumberedsubsec"><code>PATH</code>にYACASL2のディレクトリを追加</h4>
362
363 <p><code>PATH</code>にYACASL2のディレクトリを追加すると、どのディレクトリでもディレクトリを指定せずに<kbd>casl2</kbd>、<kbd>comet2</kbd>、<kbd>dumpword</kbd>を実行できます。YACASL2をホームディレクトリ<code>~</code>にインストールしたときは、次のコマンドで設定できます。
364
365 <pre class="example">  $ <kbd>PATH=$PATH:~/yacasl2 &amp;&amp; export PATH</kbd>
366 </pre>
367  <p>BASHではホームディレクトリにある<samp><span class="file">.bashrc</span></samp>が初期設定ファイルです。次のコマンドで追加できます。
368
369 <pre class="example">  $ <kbd>echo ’PATH=$PATH:~/yacasl2 &amp;&amp; export PATH’ &gt;&gt;~/.bashrc</kbd>
370 </pre>
371  <h4 class="unnumberedsubsec"><code>CASL2LIB</code>の設定</h4>
372
373 <p>環境変数<code>CASL2LIB</code>を設定しておけば、後述するCASL2LIBを利用するときの手間が小さくなります。YACASL2をホームディレクトリ<code>~</code>にインストールしたときは、次のコマンドで設定できます。
374
375 <pre class="example">  $ <kbd>CASL2LIB=~/yacasl2/as/casl2lib &amp;&amp; export CASL2LIB</kbd>
376 </pre>
377  <p>BASHの初期設定ファイル<samp><span class="file">.bashrc</span></samp>には、次のコマンドで追加できます。
378
379 <pre class="example">  $ <kbd> echo 'CASL2LIB=~/yacasl2/as/casl2lib &amp;&amp; export CASL2LIB' &gt;&gt;~/.bashrc</kbd>
380 </pre>
381  <p><a name="Usage"></a>
382
383 <h2 class="chapter">3 YACASL2の使い方</h2>
384
385 <p>YACASL2 は、テキストファイルに記述されたCASLプログラムを処理します。以下の例で用いられるCASLプログラムのファイルは、テキストエディタなどで作成してください。また、インストールしたディレクトリの中にある<samp><span class="file">as</span></samp>ディレクトリからコピーして作成することもできます。
386
387 <p><a name="Simple-Output"></a>
388
389 <h3 class="section">3.1 実行結果の出力だけを表示</h3>
390
391 <p>インストール時にコマンド実行の確認に使った<samp><span class="file">hello.casl</span></samp>は、次のような内容です。CASL IIのマクロ命令OUTは、文字列を出力します。
392
393 <pre class="example">  $ <kbd>cat hello.casl</kbd>
394   MAIN     START
395            OUT     OBUF,LEN
396            RET
397   OBUF     DC      'Hello, World!'
398   LEN      DC      13
399            END
400 </pre>
401  <p>次のコマンドを実行すると、CASL II のアセンブルと仮想マシン COMET II 上での実行が連続で行われ、文字列が出力されます。
402
403 <pre class="example">  $ <kbd>casl2 hello.casl</kbd>
404   Hello, World!
405 </pre>
406  <p><samp><span class="file">addl.casl</span></samp>は、3と1の和を求めます。
407
408 <pre class="example">  $ <kbd>cat addl.casl</kbd>
409   ;;; ADDL r,adr
410   MAIN     START
411            LD      GR1,A
412            ADDL    GR1,B
413            RET
414   A        DC      3
415   B        DC      1
416            END
417 </pre>
418  <p>このプログラムには出力命令がないため、オプションなしで実行した場合には結果が出力されません。
419
420 <pre class="example">  $ <kbd>casl2 addl.casl</kbd>
421   $
422 </pre>
423  <p>実行内容を確認するには、後述のようにCPU 内にあるレジスタやメモリの内容を表示するか、結果を出力するための処理を追加する必要があります。
424
425 <p><a name="Assemble-Result"></a>
426
427 <h3 class="section">3.2 アセンブル結果の確認</h3>
428
429 <p>casl2の処理途中で行われるアセンブルの結果を表示するには、オプション<samp><span class="option">-a</span></samp>を指定します。また、ラベルとアドレスの対応表を表示するには、オプション<samp><span class="option">-l</span></samp>を指定します。
430
431  <p>次のコマンドでは<samp><span class="file">hello.casl</span></samp>の、ラベルとアドレスの対応表と、アセンブル結果と、実行結果が表示されます。OUTはアセンブラ命令で複数の機械語命令で構成されているため、命令行1行に対して、複数行のコードが生成されます。
432
433 <pre class="example">  $ <kbd>casl2 -a -l hello.casl</kbd>
434   
435   Assemble hello.casl (0)
436   
437   Label::::
438   MAIN.LEN ---&gt; #0020
439   MAIN ---&gt; #0000
440   MAIN.OBUF ---&gt; #0013
441   
442   Assemble hello.casl (1)
443   hello.casl:    1:MAIN    START
444   hello.casl:    2:        OUT     OBUF,LEN
445       #0000   #7001
446       #0001   #0000
447       #0002   #7002
448       #0003   #0000
449       #0004   #1210
450       #0005   #0013
451       #0006   #1220
452       #0007   #0020
453       #0008   #F000
454       #0009   #0002
455       #000A   #1210
456       #000B   #0021
457       #0021   #000A
458       #000C   #1220
459       #000D   #0022
460       #0022   #0001
461       #000E   #F000
462       #000F   #0002
463       #0010   #7120
464       #0011   #7110
465   hello.casl:    3:        RET
466       #0012   #8100
467   hello.casl:    4:OBUF    DC      'Hello, World!'
468       #0013   #0048
469       #0014   #0065
470       #0015   #006C
471       #0016   #006C
472       #0017   #006F
473       #0018   #002C
474       #0019   #0020
475       #001A   #0057
476       #001B   #006F
477       #001C   #0072
478       #001D   #006C
479       #001E   #0064
480       #001F   #0021
481   hello.casl:    5:LEN     DC      13
482       #0020   #000D
483   hello.casl:    6:        END
484   Hello, World!
485 </pre>
486  <p><samp><span class="file">addl.casl</span></samp>の、ラベルとアドレスの対応表と、アセンブル結果は、次のようになります。
487
488 <pre class="example">  $ <kbd>casl2 -a -l addl.casl</kbd>
489   
490   Assemble addl.casl (0)
491   
492   Label::::
493   MAIN.A ---&gt; #0005
494   MAIN.B ---&gt; #0006
495   MAIN ---&gt; #0000
496   
497   Assemble addl.casl (1)
498   addl.casl:    1:;;; ADDL r,adr
499   addl.casl:    2:MAIN    START
500   addl.casl:    3:        LD      GR1,A
501       #0000   #1010
502       #0001   #0005
503   addl.casl:    4:        ADDL    GR1,B
504       #0002   #2210
505       #0003   #0006
506   addl.casl:    5:        RET
507       #0004   #8100
508   addl.casl:    6:A       DC      3
509       #0005   #0003
510   addl.casl:    7:B       DC      1
511       #0006   #0001
512   addl.casl:    8:        END
513 </pre>
514  <p>なお、オプション<samp><span class="option">-A</span></samp>を指定すると、アセンブル結果が表示される時点で処理が終了します。仮想マシンCOMET II での実行は行われません。
515
516 <p><a name="Register-and-Memory"></a>
517
518 <h3 class="section">3.3 実行時のレジスタとメモリを表示</h3>
519
520 <p>YACASL2では実行中のCPUのレジスタとメモリの内容をそれぞれ、<samp><span class="option">-t</span></samp>と<samp><span class="option">-d</span></samp>を指定することで表示できます。
521
522  <p>また、<samp><span class="option">-M</span></samp>で、仮想マシンCOMET II のメモリ容量を語(16 ビット)単位で指定できます。小さいプログラムを実行するときは、メモリ容量を小さくすれば結果が見やすくなります。
523
524  <p><samp><span class="file">addl.casl</span></samp>に必要なメモリ容量は8語のため、次のようにCPUのレジスタとメモリの内容を表示できます。
525
526 <pre class="example">  $ <kbd>casl2 -t -d -M8 addl.casl | less</kbd>
527   
528   Assemble addl.casl (0)
529   
530   Assemble addl.casl (1)
531   
532   Executing machine codes
533   #0000: Register::::
534   #0000: GR0:      0 = #0000 = 0000000000000000
535   #0000: GR1:      0 = #0000 = 0000000000000000
536   #0000: GR2:      0 = #0000 = 0000000000000000
537   #0000: GR3:      0 = #0000 = 0000000000000000
538   #0000: GR4:      0 = #0000 = 0000000000000000
539   #0000: GR5:      0 = #0000 = 0000000000000000
540   #0000: GR6:      0 = #0000 = 0000000000000000
541   #0000: GR7:      0 = #0000 = 0000000000000000
542   #0000: SP:       8 = #0008 = 0000000000001000
543   #0000: PR:       0 = #0000 = 0000000000000000
544   #0000: FR (OF SF ZF): 000
545   #0000: Memory::::
546   #0000: adr : 0000 0001 0002 0003 0004 0005 0006 0007
547   #0000: 0000: 1010 0005 2210 0006 8100 0003 0001 0000
548   #0002: Register::::
549   #0002: GR0:      0 = #0000 = 0000000000000000
550   #0002: GR1:      3 = #0003 = 0000000000000011
551   #0002: GR2:      0 = #0000 = 0000000000000000
552   #0002: GR3:      0 = #0000 = 0000000000000000
553   #0002: GR4:      0 = #0000 = 0000000000000000
554   #0002: GR5:      0 = #0000 = 0000000000000000
555   #0002: GR6:      0 = #0000 = 0000000000000000
556   #0002: GR7:      0 = #0000 = 0000000000000000
557   #0002: SP:       8 = #0008 = 0000000000001000
558   #0002: PR:       2 = #0002 = 0000000000000010
559   #0002: FR (OF SF ZF): 000
560   #0002: Memory::::
561   #0002: adr : 0000 0001 0002 0003 0004 0005 0006 0007
562   #0002: 0000: 1010 0005 2210 0006 8100 0003 0001 0000
563   #0004: Register::::
564   #0004: GR0:      0 = #0000 = 0000000000000000
565   #0004: GR1:      4 = #0004 = 0000000000000100
566   #0004: GR2:      0 = #0000 = 0000000000000000
567   #0004: GR3:      0 = #0000 = 0000000000000000
568   #0004: GR4:      0 = #0000 = 0000000000000000
569   #0004: GR5:      0 = #0000 = 0000000000000000
570   #0004: GR6:      0 = #0000 = 0000000000000000
571   #0004: GR7:      0 = #0000 = 0000000000000000
572   #0004: SP:       8 = #0008 = 0000000000001000
573   #0004: PR:       4 = #0004 = 0000000000000100
574   #0004: FR (OF SF ZF): 000
575   #0004: Memory::::
576   #0004: adr : 0000 0001 0002 0003 0004 0005 0006 0007
577   #0004: 0000: 1010 0005 2210 0006 8100 0003 0001 0000
578 </pre>
579  <p><a name="Register-Specify"></a>
580
581 <h4 class="subsection">3.3.1 特定のレジスタを表示</h4>
582
583 <p><samp><span class="file">addl.casl</span></samp>のレジスタやメモリの中で、実行中に値が変化しているのはGR1だけです。こうした場合は、<kbd>grep</kbd>を使って表示される内容を絞り込むことで動作を検証しやすくなります。
584
585 <pre class="example">  $ <kbd>casl2 -t addl.casl | grep 'GR1:'</kbd>
586   #0000: GR1:      0 = #0000 = 0000000000000000
587   #0002: GR1:      3 = #0003 = 0000000000000011
588   #0004: GR1:      4 = #0004 = 0000000000000100
589 </pre>
590  <p>この内容を、先に出力したアセンブル結果と引き比べてください。
591 次の表のように、PRとGR1、命令行が対応していることがわかります。
592
593  <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%">命令行
594 <br></td></tr><tr align="left"><td valign="top" width="30%">#0000
595 </td><td valign="top" width="30%">#0000
596 <br></td></tr><tr align="left"><td valign="top" width="30%">#0002
597 </td><td valign="top" width="30%">#0003
598 </td><td valign="top" width="40%"><code>LD GR1,A</code>
599 <br></td></tr><tr align="left"><td valign="top" width="30%">#0004
600 </td><td valign="top" width="30%">#0004
601 </td><td valign="top" width="40%"><code>ADDL GR1,B</code>
602  <br></td></tr></table>
603
604 <p><a name="Ending-Value"></a>
605
606 <h4 class="subsection">3.3.2 プログラム終了時の値を表示</h4>
607
608 <p><kbd>grep</kbd>と<kbd>tail</kbd>を組み合わせれば、プログラム終了時の値を表示できます。
609
610  <p><samp><span class="file">addl.casl</span></samp>でプログラム終了時の値を確認するには、次のようにします。
611
612 <pre class="example">  $ <kbd>casl2 -t addl.casl | grep 'GR1:' | tail -1</kbd>
613   #0004: GR1:      4 = #0004 = 0000000000000100
614 </pre>
615  <p><samp><span class="file">sum_10.casl</span></samp>は、1から10までの整数の和を求めます。
616
617 <pre class="example">  $ <kbd>cat sum_10.casl</kbd>
618   ;;; sum_10.casl
619   ;;; 出力 GR0: 1から10までの整数をすべて加算した値
620   MAIN    START
621           PUSH    0,GR1
622           LAD     GR0,0           ; GR0を初期化
623           LD      GR1,FST         ; GR1に初項を転送
624   LOOP    ADDL    GR0,GR1         ; ループ先頭
625           ADDL    GR1,STEP        ; GR1 &lt;- GR1 + 公差
626           CPL     GR1,LST         ; GR1が末項より大きい場合は終了
627           JPL     FIN             ; ↓
628           JUMP    LOOP            ; ループ終端
629   FIN     POP     GR1
630           RET
631   FST     DC      1               ; 初項
632   LST     DC      10              ; 末項
633   STEP    DC      1               ; 公差
634           END
635 </pre>
636  <p><samp><span class="file">sum_10.casl</span></samp>でファイル終了時の値を確認するには、次のようにします。
637
638 <pre class="example">  $ <kbd>casl2 -t sum_10.casl | grep 'GR0:' | tail -1</kbd>
639   #0010: GR0:     55 = #0037 = 0000000000110111 = '7'
640 </pre>
641  <p><a name="Step-Count"></a>
642
643 <h4 class="subsection">3.3.3 プログラムのステップ数を表示</h4>
644
645 <p><kbd>grep</kbd>と<kbd>wc</kbd>を組み合わせれば、プログラムのステップ数を表示できます。
646
647 <pre class="example">  $ <kbd>casl2 -t hello.casl | grep 'GR1:' | wc -l</kbd>
648   11
649 </pre>
650  <pre class="example">  $ <kbd>casl2 -t addl.casl | grep 'GR1:' | wc -l</kbd>
651   3
652 </pre>
653  <p><samp><span class="file">sum_10.casl</span></samp>はプログラム内にループがあるため、ステップ数が大きくなります。
654
655 <pre class="example">  $ <kbd>casl2 -t sum_10.casl | grep 'GR0:' | wc -l</kbd>
656   54
657 </pre>
658  <p><a name="Only-Assemble"></a>
659
660 <h3 class="section">3.4 アセンブルと実行を別に行う</h3>
661
662 <p><kbd>casl2</kbd>に<samp><span class="option">-O</span></samp><samp><span class="file">ファイル名</span></samp>を指定すると、オブジェクトファイルを作成できます。
663
664 <pre class="example">  $ <kbd>casl2 -Ohello.o hello.casl</kbd>
665 </pre>
666  <p>作成されたオブジェクトファイルの内容は、<kbd>od</kbd>を使って確認できます。テキストファイルではないため、<kbd>cat</kbd>などでは確認できません。
667
668 <pre class="example">  $ <kbd>od -t x2 hello.o</kbd>
669   0000000 7001 0000 7002 0000 1210 0013 1220 0020
670   0000020 f000 0002 1210 0021 1220 0022 f000 0002
671   0000040 7120 7110 8100 0048 0065 006c 006c 006f
672   0000060 002c 0020 0057 006f 0072 006c 0064 0021
673   0000100 000d 000a 0001
674   0000106
675 </pre>
676  <p>オブジェクトファイルの実行には、<kbd>comet2</kbd>を使います。
677
678 <pre class="example">  $ <kbd>comet2 hello.o</kbd>
679   Hello, World!
680 </pre>
681  <p><a name="Analyze-Word"></a>
682
683 <h3 class="section">3.5 1語の解析</h3>
684
685 <p>CASL IIでは、1語(16ビット)を単位としてデータが処理されます。
686 <kbd>dumpword</kbd>は、指定した1語を10進数、16進数、2進数で表示します。
687
688 <pre class="example">  $ <kbd>dumpword 72</kbd>
689       72:     72 = #0048 = 0000000001001000 = 'H'
690 </pre>
691  <p>マイナスの数は、次のように<kbd>--</kbd>を付けて指定します。
692
693 <pre class="example">  $ <kbd>dumpword -- -72</kbd>
694      -72:    -72 = #FFB8 = 1111111110111000
695 </pre>
696  <p>16進数は、次のように次のように<kbd>'</kbd>で囲み<kbd>#</kbd>を付けて指定します。
697
698 <pre class="example">  $ <kbd>dumpword '#0048'</kbd>
699    #0048:     72 = #0048 = 0000000001001000 = 'H'
700 </pre>
701  <p><a name="CASL2lib"></a>
702
703 <h3 class="section">3.6 CASL2ライブラリの使用</h3>
704
705 <p>YACASL2の<samp><span class="file">as/casl2lib</span></samp>ディレクトリには、CASL IIで記述されたライブラリファイルが格納されています。
706
707  <p>このフォルダには、たとえば次のようなプログラムが含まれています。
708
709      <dl>
710 <dt><samp><span class="option">OUTL</span></samp><dd><samp><span class="file">outl.casl</span></samp>。GR1に格納された値を、0〜65535の数値として出力します。
711
712      <br><dt><samp><span class="option">OUTA</span></samp><dd><samp><span class="file">outa.casl</span></samp>。GR1に格納された値を、-32767〜32767の数値として出力します。
713
714      <br><dt><samp><span class="option">MULL</span></samp><dd><samp><span class="file">mull.casl</span></samp>。GR1とGR2に格納された値を0〜65535の整数と見なし、積をGR3に格納します。
715
716      <br><dt><samp><span class="option">DIVL</span></samp><dd><samp><span class="file">divl.casl</span></samp>。GR1とGR2に格納された値を0〜65535の整数と見なし、商をGR3、剰余をGR0に格納します。
717 </dl>
718
719 <h4 class="subsection">3.6.1 数値を出力する</h4>
720
721 <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>を副プログラムとして呼び出します。
722
723 <pre class="example">  $ <kbd>cat addl_outl.casl</kbd>
724   MAIN    START
725           LD      GR1,A
726           ADDL    GR1,B
727           <em>CALL    OUTL</em>
728           RET
729   A       DC      3
730   B       DC      1
731           END
732 </pre>
733  <p>変更したら<kbd>casl2</kbd>を、複数のファイルを指定して実行します。
734
735 <pre class="example">  $ <kbd>casl2 addl_outl.casl ~/yacasl2/as/casl2lib/outl.casl</kbd>
736   4
737 </pre>
738  <p><a name="Command-Manual"></a>
739
740 <h2 class="chapter">4 YACASL2コマンドマニュアル</h2>
741
742 <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>
743 YACASL2のコマンドとオプションについて解説します。
744
745 <p><a name="casl2"></a>
746
747 <h3 class="section">4.1 <kbd>casl2</kbd></h3>
748
749 <p><a name="index-casl2-2"></a><a name="index-casl2-3"></a>
750 <kbd>casl2</kbd>は、引数として指定されたCASLファイルをアセンブルし、仮想マシンCOMET II上で実行します。CASLファイルは、アセンブラ言語CASL IIで記述されたテキストファイルです。引数が指定されない場合は、エラーメッセージを表示して終了します。
751
752 <pre class="example">  $ <kbd>casl2 hello.casl</kbd>
753 </pre>
754  <p>複数のCASLファイルを指定することで、副プログラムを呼び出せます。
755
756 <pre class="example">  $ <kbd>casl2 addl_outl.casl ~/yacasl2/as/casl2lib/outl.casl</kbd>
757 </pre>
758  <h4 class="unnumberedsubsec">オプション</h4>
759
760 <p><kbd>casl2</kbd>は、次のオプションを指定できます。
761
762      <dl>
763 <dt><samp><span class="option">-s</span></samp><dt><samp><span class="option">--source</span></samp><dd>CASLファイルの内容を表示します。
764
765      <br><dt><samp><span class="option">-l</span></samp><dt><samp><span class="option">--label</span></samp><dd>ラベルの一覧を次の形式で表示します。表示後、ほかの作業を続行します。
766
767      <pre class="example">       &lt;プログラム名&gt;.&lt;ラベル名&gt; ---&gt; &lt;アドレスの16進数表現&gt;
768 </pre>
769      <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>と同じ形式でラベルの一覧を表示します。表示後、ほかの作業は続行せず、終了します。
770
771      <br><dt><samp><span class="option">-a</span></samp><dt><samp><span class="option">--assembledetail</span></samp><dd>アセンブル詳細結果を表示し、ほかの作業を続行します。
772
773      <br><dt><samp><span class="option">-A</span></samp><dt><samp><span class="option">--assembledetailonly</span></samp><dd>アセンブル詳細結果を表示して終了します。
774
775      <br><dt><samp><span class="option">-o&lt;OBJECTFILE&gt;</span></samp><dt><samp><span class="option">--assembleout&lt;OBJECTFILE&gt;</span></samp><dd>アセンブル結果をオブジェクトファイル<samp><span class="file">&lt;OBJECTFILE&gt;</span></samp>に出力し、ほかの作業を続行します。出力されたオブジェクトファイルは、<kbd>comet2</kbd>で実行できます。オブジェクトファイルを指定しない場合、出力先は<samp><span class="file">a.o</span></samp>です。オブジェクトファイルは1つだけ指定できます。
776
777      <br><dt><samp><span class="option">-O[&lt;OBJECTFILE&gt;]</span></samp><dt><samp><span class="option">--assembleoutonly[&lt;OBJECTFILE&gt;]</span></samp><dd>アセンブル結果をオブジェクトファイル<samp><span class="file">&lt;OBJECTFILE&gt;</span></samp>に出力し、終了します。出力されたオブジェクトファイルは、<kbd>comet2</kbd>で実行できます。オブジェクトファイルを指定しない場合、出力先は<samp><span class="file">a.o</span></samp>です。オブジェクトファイルは1つだけ指定できます。
778
779      <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>プログラム実行中のレジスタの値を次の形式で表示します。
780
781      <pre class="example">       &lt;PR値の16進数表現&gt;: &lt;レジスタ&gt;: &lt;値の10進数表現&gt; =
782        &lt;値の16進数表現&gt; = &lt;値の2進数表現&gt;[ ='文字']
783 </pre>
784           <ul>
785 <li><code>&lt;PR値の16進数表現&gt;</code>と<code>&lt;レジスタ&gt;</code>、<code>&lt;値の16進数表現&gt;</code>は、4けたの16進数で表されます。<code>&lt;PR値の16進数表現&gt;</code>と<code>&lt;値の16進数表現&gt;</code>には、先頭に<code>#</code>が付きます。範囲は<code>#0000</code>から<code>#FFFF</code>です
786
787           <li><code>&lt;値の10進数表現&gt;</code>は符号の付いた10進数です。範囲は-32768から32767です。
788
789           <li><code>&lt;値の2進数表現&gt;</code>は、16けたの2進数で表されます。範囲は、<code>0000000000000000</code>から<code>1111111111111111</code>です
790
791           <li><code>[ ='文字']</code>は、レジストリの値が「文字の組」の範囲に含まれる場合に表示されます。
792 </ul>
793
794      <p>表示されるレジスタには、次の種類があります。
795
796           <dl>
797 <dt><code>GR0 GR1 GR2 GR3 GR4 GR5 GR6 GR7</code><dd>汎用レジスタ
798
799           <br><dt><code>SP</code><dd>スタックポインタ
800
801           <br><dt><code>PR</code><dd>プログラムレジスタ
802
803           <br><dt><code>FR</code><dd>フラグレジスタ
804 </dl>
805
806      <p>例えば、次のように表示されます。
807
808      <pre class="example">       #0002: GR1:      3 = #0003 = 0000000000000011
809 </pre>
810      <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>&lt;値の10進数表現&gt;</code>は符号の付かない10進数です。値の範囲は0から65535です。
811
812      <br><dt><samp><span class="option">-d</span></samp><dt><samp><span class="option">--dump</span></samp><dd>メモリの内容をすべて表示します。
813
814      <br><dt><samp><span class="option">-M &lt;MEMORYSIZE&gt;</span></samp><dt><samp><span class="option">--memorysize &lt;MEMORYSIZE&gt;</span></samp><dd>アセンブルおよび実行時のメモリサイズ<samp><span class="option">&lt;MEMORYSIZE&gt;</span></samp>を0から65535の範囲で指定します。指定しない場合、512です。
815
816      <br><dt><samp><span class="option">-C &lt;CLOCKS&gt;</span></samp><dt><samp><span class="option">--clocks &lt;CLOCKS&gt;</span></samp><dd>実行時のクロック周波数<samp><span class="option">&lt;CLOCKS&gt;</span></samp>を0より大きい整数で指定します。指定しない場合、クロック周波数は5000000です。
817
818      <br><dt><samp><span class="option">-h</span></samp><dt><samp><span class="option">--help</span></samp><dd><kbd>casl2</kbd>の使用方法を表示して終了します。
819 </dl>
820
821 <p><a name="comet2"></a>
822
823 <h3 class="section">4.2 <kbd>comet2</kbd></h3>
824
825 <p><a name="index-comet2-4"></a><a name="index-comet2-5"></a>
826 <kbd>comet2</kbd>は、引数として指定されたオブジェクトファイルを仮想マシンCOMET II上で実行します。オブジェクトファイルは、<kbd>casl</kbd>に<samp><span class="option">-o</span></samp>または<samp><span class="option">-O</span></samp>を指定して出力します。
827
828 <pre class="example">  $ <kbd>comet2 hello.o</kbd>
829 </pre>
830  <p>引数で指定できるオブジェクトファイルは1つだけです。引数が指定されない場合は、エラーメッセージを表示して終了します。複数の引数を指定した場合、2番目以降の引数は無視されます。
831
832 <h4 class="unnumberedsubsec">オプション</h4>
833
834 <p><kbd>comet2</kbd>は、次のオプションを指定できます。
835
836      <dl>
837 <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>&lt;値の10進数表現&gt;</code>は符号の付いた10進数です。範囲は-32768から32767です。
838
839      <pre class="example">       &lt;PR値の16進数表現&gt;: &lt;レジスタ&gt;: &lt;値の10進数表現&gt; = &lt;値の16進数表現&gt; = &lt;値の2進数表現&gt;[ ='文字']
840 </pre>
841           <ul>
842 <li><code>&lt;PR値の16進数表現&gt;</code>と<code>&lt;値の16進数表現&gt;</code>は、先頭に<code>#</code>が付いた4けたの16進数で表されます。範囲は、<code>#0000</code>から<code>#FFFF</code>です
843
844           <li><code>&lt;値の2進数表現&gt;</code>は、16けたの2進数で表されます。範囲は、<code>0000000000000000</code>から<code>1111111111111111</code>です
845
846           <li><code>[ ='文字']</code>は、レジストリの値が「文字の組」の範囲に含まれる場合に表示されます。
847 </ul>
848
849      <p>例えば、次のように表示されます。
850
851      <pre class="example">       #0002: GR1:      3 = #0003 = 0000000000000011
852 </pre>
853      <p>表示されるレジスタには、次の種類があります。
854
855           <dl>
856 <dt><code>GR0 GR1 GR2 GR3 GR4 GR5 GR6 GR7</code><dd>汎用レジスタ
857
858           <br><dt><code>SP</code><dd>スタックポインタ
859
860           <br><dt><code>PR</code><dd>プログラムレジスタ
861
862           <br><dt><code>FR</code><dd>フラグレジスタ
863 </dl>
864
865      <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>&lt;値の10進数表現&gt;</code>は符号の付かない10進数です。値の範囲は0から65535です。
866
867      <br><dt><samp><span class="option">-d</span></samp><dt><samp><span class="option">--dump</span></samp><dd>メモリの内容をすべて表示します。
868
869      <br><dt><samp><span class="option">-M &lt;MEMORYSIZE&gt;</span></samp><dt><samp><span class="option">--memorysize &lt;MEMORYSIZE&gt;</span></samp><dd>実行時のメモリサイズ<samp><span class="option">&lt;MEMORYSIZE&gt;</span></samp>を0から65535の範囲で指定します。指定しない場合、512です。
870
871      <br><dt><samp><span class="option">-C &lt;CLOCKS&gt;</span></samp><dt><samp><span class="option">--clocks &lt;CLOCKS&gt;</span></samp><dd>実行時のクロック周波数<samp><span class="option">&lt;CLOCKS&gt;</span></samp>を0より大きい整数で指定します。指定しない場合、5000000です。
872
873      <br><dt><samp><span class="option">-h</span></samp><dt><samp><span class="option">--help</span></samp><dd><kbd>comet2</kbd>の使用方法を表示して終了します。
874 </dl>
875
876 <p><a name="dumpword"></a>
877
878 <h3 class="section">4.3 <kbd>dumpword</kbd></h3>
879
880 <p><a name="index-dumpword-6"></a><a name="index-dumpword-7"></a>
881 <kbd>dumpword</kbd>は、引数として指定された数値を、整数、#0000〜#FFFFの範囲の16進数、2進数で表示します。文字の組に該当する場合は、「 = 」のうしろに文字が表示されます。引数は、10進数または先頭に「#」の付いた16進数で指定します。表示される整数は、オプションにより符号付きか符号なしかを指定します。オプションなしの場合は符号付きです。整数の範囲は、符号付きの場合は-32768から32767、符号なしの場合は0から65535です。
882
883 <pre class="example">  $ <kbd>dumpword 10</kbd>
884 </pre>
885  <p>引数で指定できる1つだけです。引数が指定されない場合は、使い方を表示して終了します。複数の引数を指定した場合、2番目以降の引数は無視されます。
886
887 <h4 class="unnumberedsubsec">オプション</h4>
888
889 <p><kbd>dumpword</kbd>は、次のオプションを指定できます。
890
891      <dl>
892 <dt><samp><span class="option">-a</span></samp><dt><samp><span class="option">--arithmetic</span></samp><dd>出力される整数の範囲を-32,768〜32,767にします。オプションなしの場合と同じです。
893
894      <br><dt><samp><span class="option">-l</span></samp><dt><samp><span class="option">--logical</span></samp><dd>出力される整数の範囲を0〜65,535にします。
895
896      <br><dt><samp><span class="option">-h</span></samp><dt><samp><span class="option">--help</span></samp><dd><kbd>dumpword</kbd>の使用方法を表示して終了します。
897 </dl>
898
899 <p><a name="CASL2LIB-Manual"></a>
900
901 <h2 class="chapter">5 CASL2LIBマニュアル</h2>
902
903 <p><a name="ABS"></a>
904
905 <h3 class="section">5.1 <kbd>ABS</kbd> - <samp><span class="file">abs.casl</span></samp></h3>
906
907 <p>GR1を符号付き整数とみなし、絶対値に変換
908
909 <h4 class="unnumberedsubsec">入力</h4>
910
911      <dl>
912 <dt><code>GR1</code><dd>符号付き整数
913 </dl>
914
915 <h4 class="unnumberedsubsec">出力</h4>
916
917      <dl>
918 <dt><code>GR1</code><dd>入力された値の絶対値
919
920      <br><dt><code>OF</code><dd>入力された値が-32768の場合、1
921
922      <br><dt><code>SF</code><dd>入力された値が負数(-32767から-1)の場合、1
923 </dl>
924
925 <h4 class="unnumberedsubsec">依存する副プログラム</h4>
926
927 <p>なし
928
929 <h4 class="unnumberedsubsec">使用例</h4>
930
931 <pre class="example"><pre class="verbatim">  ;;; CASL2LIB > ABSを呼び出し、-1の絶対値を表示
932   MAIN    START
933           LD      GR1,A
934           CALL    ABS
935           CALL    OUTA
936           RET
937   A       DC      -1
938           END
939 </pre></pre>
940 <pre class="example">  $ <kbd>casl2 call_abs.casl $CASL2LIBDIR/abs.casl $CASL2LIBDIR/outa.casl \
941     $CASL2LIBDIR/divl.casl $CASL2LIBDIR/rev.casl</kbd>
942   1
943 </pre>
944  <p><a name="DIVA"></a>
945
946 <h3 class="section">5.2 <kbd>DIVA</kbd> - <samp><span class="file">diva.casl</span></samp></h3>
947
948 <p>符号付き整数の割算を筆算方式で行う
949
950 <h4 class="unnumberedsubsec">入力</h4>
951
952      <dl>
953 <dt><code>GR1</code><dd>被除数
954
955      <br><dt><code>GR2</code><dd>除数
956 </dl>
957
958 <h4 class="unnumberedsubsec">出力</h4>
959
960      <dl>
961 <dt><code>GR0</code><dd>商
962
963      <br><dt><code>GR3</code><dd>剰余
964
965      <br><dt><code>OF</code><dd>次の場合、1
966           <ul>
967 <li>GR2が0
968
969           <li>GR1が-32768
970
971           <li>GR2が-32768
972 </ul>
973
974      <br><dt><code>SF</code><dd>商が負数(-32767から-1)の場合、1
975
976      <br><dt><code>ZF</code><dd>商が0の場合、1
977 </dl>
978
979 <h4 class="unnumberedsubsec">依存する副プログラム</h4>
980
981      <ul>
982 <li><code>DIVL</code>
983 </ul>
984
985 <h4 class="unnumberedsubsec">使用例</h4>
986
987 <pre class="example"><pre class="verbatim">  ;; CASL2LIB > DIVAを呼び出し、-32767 / 255 の商と剰余を表示
988   MAIN    START
989   BEGIN   LD      GR1,A
990           LD      GR2,B
991           CALL    DIVA
992           JOV     ERR
993           LD      GR1,GR0
994           CALL    OUTA
995           LD      GR1,GR3
996           CALL    OUTA
997           JUMP    FIN
998   ERR     OUT     EMSG,ELEN
999   FIN     RET
1000   A       DC      -32767
1001   B       DC      255
1002   EMSG    DC      'error'
1003   ELEN    DC      5
1004           END
1005 </pre></pre>
1006 <pre class="example">  $ <kbd>casl2 call_diva.casl $CASL2LIBDIR/diva.casl $CASL2LIBDIR/divl.casl \
1007     $CASL2LIBDIR/outa.casl $CASL2LIBDIR/abs.casl $CASL2LIBDIR/rev.casl</kbd>
1008   -128
1009   -127
1010 </pre>
1011  <p><a name="DIVL"></a>
1012
1013 <h3 class="section">5.3 <kbd>DIVL</kbd> - <samp><span class="file">divl.casl</span></samp></h3>
1014
1015 <p>符号なし整数の割算を筆算方式で行う
1016
1017 <h4 class="unnumberedsubsec">入力</h4>
1018
1019      <dl>
1020 <dt><code>GR1</code><dd>被除数
1021
1022      <br><dt><code>GR2</code><dd>除数
1023 </dl>
1024
1025 <h4 class="unnumberedsubsec">出力</h4>
1026
1027      <dl>
1028 <dt><code>GR0</code><dd>商
1029
1030      <br><dt><code>GR3</code><dd>剰余
1031
1032      <br><dt><code>OF</code><dd>GR2が0の場合、1
1033
1034      <br><dt><code>SF</code><dd>商が32768から65535の場合、1
1035
1036      <br><dt><code>ZF</code><dd>商が0の場合、1
1037 </dl>
1038
1039 <h4 class="unnumberedsubsec">依存する副プログラム</h4>
1040
1041 <p>なし
1042
1043 <h4 class="unnumberedsubsec">使用例</h4>
1044
1045 <pre class="example"><pre class="verbatim">  ;; CASL2LIB > DIVLを呼び出し、65534 / 255 の商と剰余を表示
1046   MAIN    START
1047   BEGIN   LD      GR1,A
1048           LD      GR2,B
1049           CALL    DIVL
1050           JOV     ERR
1051           LD      GR1,GR0
1052           CALL    OUTL
1053           LD      GR1,GR3
1054           CALL    OUTL
1055           JUMP    FIN        
1056   ERR     OUT     EMSG,ELEN
1057   FIN     RET
1058   A       DC      65534
1059   B       DC      255
1060   EMSG    DC      'error'
1061   ELEN  DC      5
1062           END
1063 </pre></pre>
1064 <pre class="example">  $ <kbd>casl2 call_divl.casl $CASL2LIBDIR/divl.casl $CASL2LIBDIR/outl.casl \
1065     $CASL2LIBDIR/rev.casl</kbd>
1066   256
1067   254
1068 </pre>
1069  <p><a name="INL"></a>
1070
1071 <h3 class="section">5.4 <kbd>INL</kbd> - <samp><span class="file">inl.casl</span></samp></h3>
1072
1073 <p>符号なし整数の入力を受け付ける
1074
1075 <h4 class="unnumberedsubsec">入力</h4>
1076
1077      <dl>
1078 <dt><code>標準入力</code><dd>符号なし整数
1079 </dl>
1080
1081 <h4 class="unnumberedsubsec">出力</h4>
1082
1083      <dl>
1084 <dt><code>GR1</code><dd>入力された符号なし整数
1085
1086      <br><dt><code>GR0</code><dd>文字列の長さ。数字以外が入力された場合は<code>#FFFF</code>
1087 </dl>
1088
1089 <h4 class="unnumberedsubsec">依存する副プログラム</h4>
1090
1091      <ul>
1092 <li><code>STR2L</code>
1093 </ul>
1094
1095 <h4 class="unnumberedsubsec">使用例</h4>
1096
1097 <pre class="example"><pre class="verbatim">  ;; CASL2LIB > DIVLを呼び出し、65534 / 255 の商と剰余を表示
1098   MAIN    START
1099   BEGIN   LD      GR1,A
1100           LD      GR2,B
1101           CALL    DIVL
1102           JOV     ERR
1103           LD      GR1,GR0
1104           CALL    OUTL
1105           LD      GR1,GR3
1106           CALL    OUTL
1107           JUMP    FIN        
1108   ERR     OUT     EMSG,ELEN
1109   FIN     RET
1110   A       DC      65534
1111   B       DC      255
1112   EMSG    DC      'error'
1113   ELEN  DC      5
1114           END
1115 </pre></pre>
1116 <pre class="example">  $ <kbd>casl2 call_divl.casl $CASL2LIBDIR/divl.casl $CASL2LIBDIR/outl.casl \
1117     $CASL2LIBDIR/rev.casl</kbd>
1118   256
1119   254
1120 </pre>
1121  <p><a name="L2STR"></a>
1122
1123 <h3 class="section">5.5 <kbd>L2STR</kbd> - <samp><span class="file">l2str.casl</span></samp></h3>
1124
1125 <p><a name="MAX"></a>
1126
1127 <h3 class="section">5.6 <kbd>MAX</kbd> - <samp><span class="file">max.casl</span></samp></h3>
1128
1129 <p><a name="MINIM"></a>
1130
1131 <h3 class="section">5.7 <kbd>MINIM</kbd> - <samp><span class="file">minim.casl</span></samp></h3>
1132
1133 <p><a name="MULA"></a>
1134
1135 <h3 class="section">5.8 <kbd>MULA</kbd> - <samp><span class="file">mula.casl</span></samp></h3>
1136
1137 <p><a name="MULL"></a>
1138
1139 <h3 class="section">5.9 <kbd>MULL</kbd> - <samp><span class="file">mull.casl</span></samp></h3>
1140
1141 <p><a name="OUTA"></a>
1142
1143 <h3 class="section">5.10 <kbd>OUTA</kbd> - <samp><span class="file">outa.casl</span></samp></h3>
1144
1145 <p><a name="OUTB"></a>
1146
1147 <h3 class="section">5.11 <kbd>OUTB</kbd> - <samp><span class="file">outb.casl</span></samp></h3>
1148
1149 <p><a name="OUTD_Q15"></a>
1150 <a name="OUTD_005fQ15"></a>
1151
1152 <h3 class="section">5.12 <kbd>OUTD_Q15</kbd> - <samp><span class="file">outd_q15.casl</span></samp></h3>
1153
1154 <p><a name="OUTL"></a>
1155
1156 <h3 class="section">5.13 <kbd>OUTL</kbd> - <samp><span class="file">outl.casl</span></samp></h3>
1157
1158 <p><a name="REV"></a>
1159
1160 <h3 class="section">5.14 <kbd>REV</kbd> - <samp><span class="file">rev.casl</span></samp></h3>
1161
1162 <p><a name="STR2L"></a>
1163
1164 <h3 class="section">5.15 <kbd>STR2L</kbd> - <samp><span class="file">str2l.casl</span></samp></h3>
1165
1166 </body></html>
1167
1168 <!--
1169 \1f
1170 Local Variables:
1171 coding: utf-8
1172 End:
1173
1174 -->