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