データ構造の名前を変更
[YACASL2.git] / doc / yacasl2.html
1 <html lang="en">
2 <head>
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">
9 <!--
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; } 
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     color: inherit;
36     background-color: #DDF;
37 }
38
39 .menu, .node {
40     color: inherit;
41     background-color: #DDF;
42 }
43
44 h2 {
45     padding: 0.25em;
46     color: white;
47     background-color: navy;
48 }
49
50 .contents {
51     background-color: #DDF;
52     border: 4px double #000;
53 }
54
55 .contents h2 {
56     margin-left: 0;
57     color: black;
58     background-color: #DDF;
59 }
60
61 .shortcontents {
62     background-color: #DDF;
63     border: 4px double #000;
64  }
65
66 .shortcontents h2{
67     display: none;
68 }
69
70 .shortcontents a {
71    margin-right: 1em;
72 }
73
74 h3, h4, h5 {
75     color: navy;
76     margin-left: -1em;
77 }
78
79 h5 {
80     font-size: 100%;
81 }
82
83 p {
84     line-height: 1.25em;
85     margin-top: 0;
86     margin-bottom: 0.5em;
87 }
88
89 a:hover {
90     color: red;
91     text-decoration: underline;
92 }
93
94 pre.example {
95     padding: 0.5em 1em 0.5em 1em;
96     color: #CCC;
97     background: black;
98     font-size: 90%;
99 }
100
101 a {
102     text-decoration: none;
103 }
104
105 blockquote {
106     line-height: 1.25em;
107     border: 1px solid #00F;
108 }
109
110 kbd {
111     font-family: monospace;
112 }
113
114 kbd, code, .file {
115     margin-left:0.5em;
116     margin-right: 0.5em;
117 }
118
119 table, th, td {
120     border: 1px solid #CCC;
121     border-collapse: collapse; /* 枠線の表示方法 */
122 }
123
124 table.cartouche, table.cartouche th, table.cartouche td  {
125     border: none;
126 }
127
128 pre.example .command, pre.example .option, pre.example kbd {
129     font-weight: bold;
130     font-family: monospace;
131     background-color: inherit;
132     color: white;
133     margin-left:0;
134     margin-right: 0;
135 }
136
137 pre.example strong {
138     font: inherit;
139     border: 2px solid green;
140 }
141
142 dt {
143     font-weight: bold;
144 }--></style>
145 </head>
146 <body>
147 <h1 class="settitle">YACASL2 - CASL II処理システム</h1>
148 <div class="node">
149 <a name="Top"></a>
150 <p><hr>
151 Next:&nbsp;<a rel="next" accesskey="n" href="#About">About</a>
152
153 </div>
154
155 <ul class="menu">
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マニュアル
161 </ul>
162
163  <div class="contents">
164 <h2>Table of Contents</h2>
165 <ul>
166 <li><a name="toc_About" href="#About">1 YACASL2の概要</a>
167 <ul>
168 <li><a href="#About">要件</a>
169 </li></ul>
170 <li><a name="toc_Install" href="#Install">2 YACASL2のインストール</a>
171 <ul>
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>
179 <ul>
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>
183 </li></ul>
184 </li></ul>
185 <li><a name="toc_Usage" href="#Usage">3 YACASL2の使い方</a>
186 <ul>
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>
190 <ul>
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>
194 </li></ul>
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>
198 <ul>
199 <li><a href="#Use-CASL2LIB">3.6.1 数値を出力する</a>
200 </li></ul>
201 </li></ul>
202 <li><a name="toc_Command-Manual" href="#Command-Manual">4 YACASL2コマンドマニュアル</a>
203 <ul>
204 <li><a href="#casl2">4.1 <kbd>casl2</kbd></a>
205 <ul>
206 <li><a href="#casl2">オプション</a>
207 </li></ul>
208 <li><a href="#comet2">4.2 <kbd>comet2</kbd></a>
209 <ul>
210 <li><a href="#comet2">オプション</a>
211 </li></ul>
212 <li><a href="#dumpword">4.3 <kbd>dumpword</kbd></a>
213 <ul>
214 <li><a href="#dumpword">オプション</a>
215 </li></ul>
216 </li></ul>
217 <li><a name="toc_CASL2LIB-Manual" href="#CASL2LIB-Manual">5 CASL2LIBマニュアル</a>
218 <ul>
219 <li><a href="#ABS">5.1 <kbd>ABS</kbd> - <samp><span class="file">abs.casl</span></samp></a>
220 <ul>
221 <li><a href="#ABS">入力</a>
222 <li><a href="#ABS">出力</a>
223 <li><a href="#ABS">依存する副プログラム</a>
224 <li><a href="#ABS">使用例</a>
225 </li></ul>
226 <li><a href="#DIVA">5.2 <kbd>DIVA</kbd> - <samp><span class="file">diva.casl</span></samp></a>
227 <ul>
228 <li><a href="#DIVA">入力</a>
229 <li><a href="#DIVA">出力</a>
230 <li><a href="#DIVA">依存する副プログラム</a>
231 <li><a href="#DIVA">使用例</a>
232 </li></ul>
233 <li><a href="#DIVL">5.3 <kbd>DIVL</kbd> - <samp><span class="file">divl.casl</span></samp></a>
234 <ul>
235 <li><a href="#DIVL">入力</a>
236 <li><a href="#DIVL">出力</a>
237 <li><a href="#DIVL">依存する副プログラム</a>
238 <li><a href="#DIVL">使用例</a>
239 </li></ul>
240 <li><a href="#INL">5.4 <kbd>INL</kbd> - <samp><span class="file">inl.casl</span></samp></a>
241 <ul>
242 <li><a href="#INL">入力</a>
243 <li><a href="#INL">出力</a>
244 <li><a href="#INL">依存する副プログラム</a>
245 <li><a href="#INL">使用例</a>
246 </li></ul>
247 <li><a href="#L2STR">5.5 <kbd>L2STR</kbd> - <samp><span class="file">l2str.casl</span></samp></a>
248 <ul>
249 <li><a href="#L2STR">入力</a>
250 <li><a href="#L2STR">出力</a>
251 <li><a href="#L2STR">依存する副プログラム</a>
252 </li></ul>
253 <li><a href="#MAX">5.6 <kbd>MAX</kbd> - <samp><span class="file">max.casl</span></samp></a>
254 <ul>
255 <li><a href="#MAX">入力</a>
256 <li><a href="#MAX">出力</a>
257 <li><a href="#MAX">依存する副プログラム</a>
258 </li></ul>
259 <li><a href="#MINIM">5.7 <kbd>MINIM</kbd> - <samp><span class="file">minim.casl</span></samp></a>
260 <ul>
261 <li><a href="#MINIM">入力</a>
262 <li><a href="#MINIM">出力</a>
263 <li><a href="#MINIM">依存する副プログラム</a>
264 </li></ul>
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>
273 </li></ul>
274 </li></ul>
275 </div>
276
277 <div class="node">
278 <a name="About"></a>
279 <p><hr>
280 Next:&nbsp;<a rel="next" accesskey="n" href="#Install">Install</a>,
281 Previous:&nbsp;<a rel="previous" accesskey="p" href="#Top">Top</a>,
282 Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
283
284 </div>
285
286 <h2 class="chapter">1 YACASL2の概要</h2>
287
288  <p>YACASL2は、UNIX/Linuxのコマンドラインインターフェイスで動作するオープンソースのCASL II処理システムです。CASL IIは情報処理試験で用いられるアセンブラ言語で、次の資料により仕様が公開されています。
289
290  <blockquote>
291 <a href="http://www.jitec.ipa.go.jp/1_00topic/topic_20081027_hani_yougo.pdf">試験で使用する情報処理用語・プログラム言語など(2008年10月版)</a>[PDFファイル]
292 別紙 1 アセンブラ言語の仕様
293 </blockquote>
294
295  <p>YACASL2は、CASL IIアセンブラ言語で記述されたファイルをアセンブルし、仮想マシンCOMET II上で実行します。アセンブルと実行は、連続で行うことも別々に行うことも可能です。
296 YACASL2の動作はCASL IIの仕様に準拠しているため、情報処理試験の問題をはじめ各種参考書やサイトに記載されたCASL IIのプログラムをそのままアセンブルして実行できます。また、本パッケージ中にCASL IIのサンプルプログラムが多数収録されています。
297
298  <p>YACASL2は、「ふつうの処理系」として動作します。ほかの多くのCASL IIエミュレータと違い、デバッガとして動作したり、コンピュータ内部の模式図を表示したりすることはありません。そのかわり、YACASL2は、次のような動作内容をすべてテキストで出力します。
299
300      <ul>
301 <li>ラベルとアドレスの対応
302
303      <li>アセンブル結果
304
305      <li>実行時のレジスタの内容
306
307      <li>実行時のメモリの内容
308 </ul>
309
310  <p>出力された動作内容は、GNU/Linuxのさまざまなツール、たとえば、<kbd>cat</kbd> <kbd>less</kbd> <kbd>grep</kbd> <kbd>wc</kbd>などを使って解析できます。
311
312  <p>YACASL2の操作は、端末を開いてコマンドを入力・実行することで行います。
313
314 <h3 class="unnumberedsec">要件</h3>
315
316  <p>YACASL2は、LinuxやMac OS Xなど、UNIX系のOS上で動作します。現在動作を確認しているのは、次の環境です。
317
318      <ul>
319 <li>Ubuntu Linux 10.04
320
321      <li>Vine Linux 5.2
322
323      <li>Mac OS X 10.6.5
324 </ul>
325
326  <p>インストール時に、<kbd>tar</kbd> <kbd>gcc</kbd> <kbd>make</kbd>が必要です。Linuxでは多くの場合、標準でインストールされています。Mac OS Xの場合、<code>Xcode</code>をインストールするといっしょにインストールされます。
327
328 <div class="node">
329 <a name="Install"></a>
330 <p><hr>
331 Next:&nbsp;<a rel="next" accesskey="n" href="#Usage">Usage</a>,
332 Previous:&nbsp;<a rel="previous" accesskey="p" href="#About">About</a>,
333 Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
334
335 </div>
336
337 <h2 class="chapter">2 YACASL2のインストール</h2>
338
339  <p>YACASL2をインストールするには、Linux上で次の作業をします。
340
341 <ul class="menu">
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>:                  環境変数の設定
349 </ul>
350
351 <div class="node">
352 <a name="Download"></a>
353 <p><hr>
354 Next:&nbsp;<a rel="next" accesskey="n" href="#Verify">Verify</a>,
355 Previous:&nbsp;<a rel="previous" accesskey="p" href="#Install">Install</a>,
356 Up:&nbsp;<a rel="up" accesskey="u" href="#Install">Install</a>
357
358 </div>
359
360 <h3 class="section">2.1 YACASL2ファイルのダウンロード</h3>
361
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>ファイルをダウンロードします。
363
364 <div class="node">
365 <a name="Verify"></a>
366 <p><hr>
367 Next:&nbsp;<a rel="next" accesskey="n" href="#Expand">Expand</a>,
368 Previous:&nbsp;<a rel="previous" accesskey="p" href="#Download">Download</a>,
369 Up:&nbsp;<a rel="up" accesskey="u" href="#Install">Install</a>
370
371 </div>
372
373 <h3 class="section">2.2 YACASL2ファイルの検証</h3>
374
375  <p>ダウンロードが完了したら、<kbd>md5sum</kbd>と<kbd>diff</kbd>で正しくファイルがダウンロードができているかを検証します。
376
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
379 </pre>
380  <div class="node">
381 <a name="Expand"></a>
382 <p><hr>
383 Next:&nbsp;<a rel="next" accesskey="n" href="#Build">Build</a>,
384 Previous:&nbsp;<a rel="previous" accesskey="p" href="#Verify">Verify</a>,
385 Up:&nbsp;<a rel="up" accesskey="u" href="#Install">Install</a>
386
387 </div>
388
389 <h3 class="section">2.3 YACASL2ファイルの展開</h3>
390
391  <p>YACASL2ファイルをダウンロードしたら、次のコマンドで展開します。
392
393 <pre class="example">$ <kbd>tar xvzf yacasl2.tar.gz</kbd>
394 </pre>
395  <div class="node">
396 <a name="Build"></a>
397 <p><hr>
398 Next:&nbsp;<a rel="next" accesskey="n" href="#Simple-Test">Simple Test</a>,
399 Previous:&nbsp;<a rel="previous" accesskey="p" href="#Expand">Expand</a>,
400 Up:&nbsp;<a rel="up" accesskey="u" href="#Install">Install</a>
401
402 </div>
403
404 <h3 class="section">2.4 <kbd>casl2</kbd> <kbd>comet2</kbd> <kbd>dumpword</kbd>のビルド</h3>
405
406  <p>展開したら、次のコマンドで<kbd>casl2</kbd> <kbd>comet2</kbd> <kbd>dumpword</kbd>をビルドします。
407
408 <pre class="example">$ <kbd>cd yacasl2</kbd>
409 $ <kbd>make</kbd>
410 make -C src
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’
432 </pre>
433  <div class="node">
434 <a name="Simple-Test"></a>
435 <p><hr>
436 Next:&nbsp;<a rel="next" accesskey="n" href="#Detail-Test">Detail Test</a>,
437 Previous:&nbsp;<a rel="previous" accesskey="p" href="#Build">Build</a>,
438 Up:&nbsp;<a rel="up" accesskey="u" href="#Install">Install</a>
439
440 </div>
441
442 <h3 class="section">2.5 <kbd>casl2</kbd>の実行テスト</h3>
443
444  <p>ビルドしたら、次のコマンドが正常に実行できるかを確認します。
445 正常に実行された場合は、「Hello, World!」と表示されます。
446
447 <pre class="example">$ <kbd>./casl2 as/hello.casl</kbd>
448 Hello, World!
449 </pre>
450  <div class="node">
451 <a name="Detail-Test"></a>
452 <p><hr>
453 Next:&nbsp;<a rel="next" accesskey="n" href="#Environment">Environment</a>,
454 Previous:&nbsp;<a rel="previous" accesskey="p" href="#Simple-Test">Simple Test</a>,
455 Up:&nbsp;<a rel="up" accesskey="u" href="#Install">Install</a>
456
457 </div>
458
459 <h3 class="section">2.6 詳細なテスト</h3>
460
461  <p>次のコマンドを実行すると、正常にビルドできているかどうかを詳細にテストできます。
462
463 <pre class="example">$ <kbd>make check</kbd>
464 195 / 195 tests passed. Details in /home/username/yacasl2/test/integra
465 tion/casl2/Test.log
466 All tests are succeded.
467 149 / 149 tests passed. Details in /home/username/yacasl2/test/integra
468 tion/comet2/Test.log
469 All tests are succeded.
470 4 / 4 tests passed. Details in /home/username/yacasl2/test/integration
471 /dumpword/Test.log
472 All tests are succeded.
473 </pre>
474  <div class="node">
475 <a name="Environment"></a>
476 <p><hr>
477 Previous:&nbsp;<a rel="previous" accesskey="p" href="#Detail-Test">Detail Test</a>,
478 Up:&nbsp;<a rel="up" accesskey="u" href="#Install">Install</a>
479
480 </div>
481
482 <h3 class="section">2.7 環境変数の設定</h3>
483
484  <p>環境変数<code>PATH</code>や<code>CASL2LIB</code>を設定することで、YACASL2が使いやすくなります。環境変数は、使っているシェルを確認してから設定します。
485
486 <h4 class="unnumberedsubsec">シェルの確認</h4>
487
488  <p>環境変数の設定方法は使っているシェルによって異なります。シェルは、次のコマンドで確認できます。
489
490 <pre class="example">$ <kbd>echo $SHELL</kbd>
491 /bin/bash
492 </pre>
493  <p>現在もっとも多く使われているシェルは、BASHでしょう。以下、BASHでの設定方法を説明します。
494
495 <h4 class="unnumberedsubsec"><code>PATH</code>にYACASL2のディレクトリを追加</h4>
496
497  <p><code>PATH</code>にYACASL2のディレクトリを追加すると、どのディレクトリでもディレクトリを指定せずに<kbd>casl2</kbd>、<kbd>comet2</kbd>、<kbd>dumpword</kbd>を実行できます。YACASL2をホームディレクトリ<code>~</code>にインストールしたときは、次のコマンドで設定できます。
498
499 <pre class="example">$ <kbd>PATH=$PATH:~/yacasl2 &amp;&amp; export PATH</kbd>
500 </pre>
501  <p>環境変数の設定は、シェルの初期設定ファイルに追加することでログインしたあと自動的に反映されるようになります。BASHではホームディレクトリにある<samp><span class="file">.bashrc</span></samp>が初期設定ファイルです。次のコマンドで追加できます。
502
503 <pre class="example">$ <kbd>echo ’PATH=$PATH:~/yacasl2 &amp;&amp; export PATH’ &gt;&gt;~/.bashrc</kbd>
504 </pre>
505  <h4 class="unnumberedsubsec"><code>CASL2LIB</code>の設定</h4>
506
507  <p>環境変数<code>CASL2LIB</code>を設定しておけば、後述するCASL2LIBを利用するときの手間が小さくなります。YACASL2をホームディレクトリ<code>~</code>にインストールしたときは、次のコマンドで設定できます。
508
509 <pre class="example">$ <kbd>CASL2LIB=~/yacasl2/as/casl2lib &amp;&amp; export CASL2LIB</kbd>
510 </pre>
511  <p>BASHの初期設定ファイル<samp><span class="file">.bashrc</span></samp>には、次のコマンドで追加できます。
512
513 <pre class="example">$ <kbd> echo 'CASL2LIB=~/yacasl2/as/casl2lib &amp;&amp; export CASL2LIB' &gt;&gt;~/.bashrc</kbd>
514 </pre>
515  <div class="node">
516 <a name="Usage"></a>
517 <p><hr>
518 Next:&nbsp;<a rel="next" accesskey="n" href="#Command-Manual">Command Manual</a>,
519 Previous:&nbsp;<a rel="previous" accesskey="p" href="#Install">Install</a>,
520 Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
521
522 </div>
523
524 <h2 class="chapter">3 YACASL2の使い方</h2>
525
526  <p>YACASL2 は、テキストファイルに記述されたCASLプログラムを処理します。以下の例で用いられるCASLプログラムのファイルは、テキストエディタなどで作成してください。また、インストールしたディレクトリの中にある<samp><span class="file">as</span></samp>ディレクトリからコピーして作成することもできます。
527
528 <ul class="menu">
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ライブラリの使用
535 </ul>
536
537 <div class="node">
538 <a name="Simple-Output"></a>
539 <p><hr>
540 Next:&nbsp;<a rel="next" accesskey="n" href="#Assemble-Result">Assemble Result</a>,
541 Previous:&nbsp;<a rel="previous" accesskey="p" href="#Usage">Usage</a>,
542 Up:&nbsp;<a rel="up" accesskey="u" href="#Usage">Usage</a>
543
544 </div>
545
546 <h3 class="section">3.1 実行結果の出力だけを表示</h3>
547
548  <p>インストール時にコマンド実行の確認に使った<samp><span class="file">hello.casl</span></samp>は、次のような内容です。CASL IIのマクロ命令OUTは、文字列を出力します。
549
550 <pre class="example">$ <kbd>cat hello.casl</kbd>
551 MAIN     START
552          OUT     OBUF,LEN
553          RET
554 OBUF     DC      'Hello, World!'
555 LEN      DC      13
556          END
557 </pre>
558  <p>次のコマンドを実行すると、CASL II のアセンブルと仮想マシン COMET II 上での実行が連続で行われ、文字列が出力されます。
559
560 <pre class="example">$ <kbd>casl2 hello.casl</kbd>
561 Hello, World!
562 </pre>
563  <p><samp><span class="file">addl.casl</span></samp>は、3と1の和を求めます。
564
565 <pre class="example">$ <kbd>cat addl.casl</kbd>
566 ;;; ADDL r,adr
567 MAIN     START
568          LD      GR1,A
569          ADDL    GR1,B
570          RET
571 A        DC      3
572 B        DC      1
573          END
574 </pre>
575  <p>このプログラムには出力命令がないため、オプションなしで実行した場合には結果が出力されません。
576
577 <pre class="example">$ <kbd>casl2 addl.casl</kbd>
578 $
579 </pre>
580  <p>実行内容を確認するには、後述のようにCPU 内にあるレジスタやメモリの内容を表示するか、結果を出力するための処理を追加する必要があります。
581
582 <div class="node">
583 <a name="Assemble-Result"></a>
584 <p><hr>
585 Next:&nbsp;<a rel="next" accesskey="n" href="#Register-and-Memory">Register and Memory</a>,
586 Previous:&nbsp;<a rel="previous" accesskey="p" href="#Simple-Output">Simple Output</a>,
587 Up:&nbsp;<a rel="up" accesskey="u" href="#Usage">Usage</a>
588
589 </div>
590
591 <h3 class="section">3.2 アセンブル結果の確認</h3>
592
593  <p>casl2の処理途中で行われるアセンブルの結果を表示するには、オプション<samp><span class="option">-a</span></samp>を指定します。また、ラベルとアドレスの対応表を表示するには、オプション<samp><span class="option">-l</span></samp>を指定します。
594
595  <p>次のコマンドでは<samp><span class="file">hello.casl</span></samp>の、ラベルとアドレスの対応表と、アセンブル結果と、実行結果が表示されます。OUTはアセンブラ命令で複数の機械語命令で構成されているため、命令行1行に対して、複数行のコードが生成されます。
596
597 <pre class="example">$ <kbd>casl2 -a -l hello.casl</kbd>
598
599 Assemble hello.casl (0)
600
601 Label::::
602 MAIN.LEN ---&gt; #0020
603 MAIN ---&gt; #0000
604 MAIN.OBUF ---&gt; #0013
605
606 Assemble hello.casl (1)
607 hello.casl:    1:MAIN    START
608 hello.casl:    2:        OUT     OBUF,LEN
609     #0000   #7001
610     #0001   #0000
611     #0002   #7002
612     #0003   #0000
613     #0004   #1210
614     #0005   #0013
615     #0006   #1220
616     #0007   #0020
617     #0008   #F000
618     #0009   #0002
619     #000A   #1210
620     #000B   #0021
621     #0021   #000A
622     #000C   #1220
623     #000D   #0022
624     #0022   #0001
625     #000E   #F000
626     #000F   #0002
627     #0010   #7120
628     #0011   #7110
629 hello.casl:    3:        RET
630     #0012   #8100
631 hello.casl:    4:OBUF    DC      'Hello, World!'
632     #0013   #0048
633     #0014   #0065
634     #0015   #006C
635     #0016   #006C
636     #0017   #006F
637     #0018   #002C
638     #0019   #0020
639     #001A   #0057
640     #001B   #006F
641     #001C   #0072
642     #001D   #006C
643     #001E   #0064
644     #001F   #0021
645 hello.casl:    5:LEN     DC      13
646     #0020   #000D
647 hello.casl:    6:        END
648 Hello, World!
649 </pre>
650  <p><samp><span class="file">addl.casl</span></samp>の、ラベルとアドレスの対応表と、アセンブル結果は、次のようになります。
651
652 <pre class="example">$ <kbd>casl2 -a -l addl.casl</kbd>
653
654 Assemble addl.casl (0)
655
656 Label::::
657 MAIN.A ---&gt; #0005
658 MAIN.B ---&gt; #0006
659 MAIN ---&gt; #0000
660
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
665     #0000   #1010
666     #0001   #0005
667 addl.casl:    4:        ADDL    GR1,B
668     #0002   #2210
669     #0003   #0006
670 addl.casl:    5:        RET
671     #0004   #8100
672 addl.casl:    6:A       DC      3
673     #0005   #0003
674 addl.casl:    7:B       DC      1
675     #0006   #0001
676 addl.casl:    8:        END
677 </pre>
678  <p>なお、オプション<samp><span class="option">-A</span></samp>を指定すると、アセンブル結果が表示される時点で処理が終了します。仮想マシンCOMET II での実行は行われません。
679
680 <div class="node">
681 <a name="Register-and-Memory"></a>
682 <p><hr>
683 Next:&nbsp;<a rel="next" accesskey="n" href="#Only-Assemble">Only Assemble</a>,
684 Previous:&nbsp;<a rel="previous" accesskey="p" href="#Assemble-Result">Assemble Result</a>,
685 Up:&nbsp;<a rel="up" accesskey="u" href="#Usage">Usage</a>
686
687 </div>
688
689 <h3 class="section">3.3 実行時のレジスタとメモリを表示</h3>
690
691  <p>YACASL2では実行中のCPUのレジスタとメモリの内容をそれぞれ、<samp><span class="option">-t</span></samp>と<samp><span class="option">-d</span></samp>を指定することで表示できます。
692
693  <p>また、<samp><span class="option">-M</span></samp>で、仮想マシンCOMET II のメモリ容量を語(16 ビット)単位で指定できます。小さいプログラムを実行するときは、メモリ容量を小さくすれば結果が見やすくなります。
694
695 <ul class="menu">
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>:                   プログラムのステップ数を表示
699 </ul>
700
701  <p><samp><span class="file">addl.casl</span></samp>に必要なメモリ容量は8語のため、次のようにCPUのレジスタとメモリの内容を表示できます。
702
703 <pre class="example">$ <kbd>casl2 -t -d -M8 addl.casl | less</kbd>
704
705 Assemble addl.casl (0)
706
707 Assemble addl.casl (1)
708
709 Executing machine codes
710 #0000: Register::::
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
722 #0000: Memory::::
723 #0000: adr : 0000 0001 0002 0003 0004 0005 0006 0007
724 #0000: 0000: 1010 0005 2210 0006 8100 0003 0001 0000
725 #0002: Register::::
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
737 #0002: Memory::::
738 #0002: adr : 0000 0001 0002 0003 0004 0005 0006 0007
739 #0002: 0000: 1010 0005 2210 0006 8100 0003 0001 0000
740 #0004: Register::::
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
752 #0004: Memory::::
753 #0004: adr : 0000 0001 0002 0003 0004 0005 0006 0007
754 #0004: 0000: 1010 0005 2210 0006 8100 0003 0001 0000
755 </pre>
756  <div class="node">
757 <a name="Register-Specify"></a>
758 <p><hr>
759 Next:&nbsp;<a rel="next" accesskey="n" href="#Ending-Value">Ending Value</a>,
760 Previous:&nbsp;<a rel="previous" accesskey="p" href="#Register-and-Memory">Register and Memory</a>,
761 Up:&nbsp;<a rel="up" accesskey="u" href="#Register-and-Memory">Register and Memory</a>
762
763 </div>
764
765 <h4 class="subsection">3.3.1 特定のレジスタを表示</h4>
766
767  <p><samp><span class="file">addl.casl</span></samp>のレジスタやメモリの中で、実行中に値が変化しているのはGR1だけです。こうした場合は、<kbd>grep</kbd>を使って表示される内容を絞り込むことで動作を検証しやすくなります。
768
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
773 </pre>
774  <p>この内容を、先に出力したアセンブル結果と引き比べてください。
775 次の表のように、PRとGR1、命令行が対応していることがわかります。
776
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>
787
788 <div class="node">
789 <a name="Ending-Value"></a>
790 <p><hr>
791 Next:&nbsp;<a rel="next" accesskey="n" href="#Step-Count">Step Count</a>,
792 Previous:&nbsp;<a rel="previous" accesskey="p" href="#Register-Specify">Register Specify</a>,
793 Up:&nbsp;<a rel="up" accesskey="u" href="#Register-and-Memory">Register and Memory</a>
794
795 </div>
796
797 <h4 class="subsection">3.3.2 プログラム終了時の値を表示</h4>
798
799  <p><kbd>grep</kbd>と<kbd>tail</kbd>を組み合わせれば、プログラム終了時の値を表示できます。
800
801  <p><samp><span class="file">addl.casl</span></samp>でプログラム終了時の値を確認するには、次のようにします。
802
803 <pre class="example">$ <kbd>casl2 -t addl.casl | grep 'GR1:' | tail -1</kbd>
804 #0004: GR1:      4 = #0004 = 0000000000000100
805 </pre>
806  <p><samp><span class="file">sum_10.casl</span></samp>は、1から10までの整数の和を求めます。
807
808 <pre class="example">$ <kbd>cat sum_10.casl</kbd>
809 ;;; sum_10.casl
810 ;;; 出力 GR0: 1から10までの整数をすべて加算した値
811 MAIN    START
812         PUSH    0,GR1
813         LAD     GR0,0           ; GR0を初期化
814         LD      GR1,FST         ; GR1に初項を転送
815 LOOP    ADDL    GR0,GR1         ; ループ先頭
816         ADDL    GR1,STEP        ; GR1 &lt;- GR1 + 公差
817         CPL     GR1,LST         ; GR1が末項より大きい場合は終了
818         JPL     FIN             ; ↓
819         JUMP    LOOP            ; ループ終端
820 FIN     POP     GR1
821         RET
822 FST     DC      1               ; 初項
823 LST     DC      10              ; 末項
824 STEP    DC      1               ; 公差
825         END
826 </pre>
827  <p><samp><span class="file">sum_10.casl</span></samp>でファイル終了時の値を確認するには、次のようにします。
828
829 <pre class="example">$ <kbd>casl2 -t sum_10.casl | grep 'GR0:' | tail -1</kbd>
830 #0010: GR0:     55 = #0037 = 0000000000110111 = '7'
831 </pre>
832  <div class="node">
833 <a name="Step-Count"></a>
834 <p><hr>
835 Previous:&nbsp;<a rel="previous" accesskey="p" href="#Ending-Value">Ending Value</a>,
836 Up:&nbsp;<a rel="up" accesskey="u" href="#Register-and-Memory">Register and Memory</a>
837
838 </div>
839
840 <h4 class="subsection">3.3.3 プログラムのステップ数を表示</h4>
841
842  <p><kbd>grep</kbd>と<kbd>wc</kbd>を組み合わせれば、プログラムのステップ数を表示できます。
843
844 <pre class="example">$ <kbd>casl2 -t hello.casl | grep 'GR1:' | wc -l</kbd>
845 11
846 </pre>
847  <pre class="example">$ <kbd>casl2 -t addl.casl | grep 'GR1:' | wc -l</kbd>
848 3
849 </pre>
850  <p><samp><span class="file">sum_10.casl</span></samp>はプログラム内にループがあるため、ステップ数が大きくなります。
851
852 <pre class="example">$ <kbd>casl2 -t sum_10.casl | grep 'GR0:' | wc -l</kbd>
853 54
854 </pre>
855  <div class="node">
856 <a name="Only-Assemble"></a>
857 <p><hr>
858 Next:&nbsp;<a rel="next" accesskey="n" href="#Analyze-Word">Analyze Word</a>,
859 Previous:&nbsp;<a rel="previous" accesskey="p" href="#Register-and-Memory">Register and Memory</a>,
860 Up:&nbsp;<a rel="up" accesskey="u" href="#Usage">Usage</a>
861
862 </div>
863
864 <h3 class="section">3.4 アセンブルと実行を別に行う</h3>
865
866  <p><kbd>casl2</kbd>に<samp><span class="option">-O</span></samp><samp><span class="file">ファイル名</span></samp>を指定すると、オブジェクトファイルを作成できます。
867
868 <pre class="example">$ <kbd>casl2 -Ohello.o hello.casl</kbd>
869 </pre>
870  <p>作成されたオブジェクトファイルの内容は、<kbd>od</kbd>を使って確認できます。テキストファイルではないため、<kbd>cat</kbd>などでは確認できません。
871
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
878 0000106
879 </pre>
880  <p>オブジェクトファイルの実行には、<kbd>comet2</kbd>を使います。
881
882 <pre class="example">$ <kbd>comet2 hello.o</kbd>
883 Hello, World!
884 </pre>
885  <div class="node">
886 <a name="Analyze-Word"></a>
887 <p><hr>
888 Next:&nbsp;<a rel="next" accesskey="n" href="#Use-CASL2LIB">Use CASL2LIB</a>,
889 Previous:&nbsp;<a rel="previous" accesskey="p" href="#Only-Assemble">Only Assemble</a>,
890 Up:&nbsp;<a rel="up" accesskey="u" href="#Usage">Usage</a>
891
892 </div>
893
894 <h3 class="section">3.5 1語の解析</h3>
895
896  <p>CASL IIでは、1語(16ビット)を単位としてデータが処理されます。
897 <kbd>dumpword</kbd>は、指定した1語を10進数、16進数、2進数で表示します。
898
899 <pre class="example">$ <kbd>dumpword 72</kbd>
900     72:     72 = #0048 = 0000000001001000 = 'H'
901 </pre>
902  <p>マイナスの数は、次のように<kbd>--</kbd>を付けて指定します。
903
904 <pre class="example">$ <kbd>dumpword -- -72</kbd>
905    -72:    -72 = #FFB8 = 1111111110111000
906 </pre>
907  <p>16進数は、次のように次のように<kbd>'</kbd>で囲み<kbd>#</kbd>を付けて指定します。
908
909 <pre class="example">$ <kbd>dumpword '#0048'</kbd>
910  #0048:     72 = #0048 = 0000000001001000 = 'H'
911 </pre>
912  <div class="node">
913 <a name="Use-CASL2LIB"></a>
914 <p><hr>
915 Previous:&nbsp;<a rel="previous" accesskey="p" href="#Analyze-Word">Analyze Word</a>,
916 Up:&nbsp;<a rel="up" accesskey="u" href="#Usage">Usage</a>
917
918 </div>
919
920 <h3 class="section">3.6 CASL2ライブラリの使用</h3>
921
922  <p>YACASL2の<samp><span class="file">as/casl2lib</span></samp>ディレクトリには、CASL IIで記述されたライブラリファイルが格納されています。
923
924  <p>このフォルダには、たとえば次のようなプログラムが含まれています。
925
926      <dl>
927 <dt><samp><span class="option">OUTL</span></samp><dd><samp><span class="file">outl.casl</span></samp>。GR1に格納された値を、0〜65535の数値として出力します。
928
929      <br><dt><samp><span class="option">OUTA</span></samp><dd><samp><span class="file">outa.casl</span></samp>。GR1に格納された値を、-32767〜32767の数値として出力します。
930
931      <br><dt><samp><span class="option">MULL</span></samp><dd><samp><span class="file">mull.casl</span></samp>。GR1とGR2に格納された値を0〜65535の整数と見なし、積をGR3に格納します。
932
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に格納します。
934 </dl>
935
936 <h4 class="subsection">3.6.1 数値を出力する</h4>
937
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>を副プログラムとして呼び出します。
939
940 <pre class="example">$ <kbd>cat addl_outl.casl</kbd>
941 MAIN    START
942         LD      GR1,A
943         ADDL    GR1,B
944         <em>CALL    OUTL</em>
945         RET
946 A       DC      3
947 B       DC      1
948         END
949 </pre>
950  <p>変更したら<kbd>casl2</kbd>を、複数のファイルを指定して実行します。
951
952 <pre class="example">$ <kbd>casl2 addl_outl.casl ~/yacasl2/as/casl2lib/outl.casl</kbd>
953 4
954 </pre>
955  <div class="node">
956 <a name="Command-Manual"></a>
957 <p><hr>
958 Next:&nbsp;<a rel="next" accesskey="n" href="#CASL2LIB-Manual">CASL2LIB Manual</a>,
959 Previous:&nbsp;<a rel="previous" accesskey="p" href="#Usage">Usage</a>,
960 Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
961
962 </div>
963
964 <h2 class="chapter">4 YACASL2コマンドマニュアル</h2>
965
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のコマンドとオプションについて解説します。
968
969 <ul class="menu">
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>
973 </ul>
974
975 <div class="node">
976 <a name="casl2"></a>
977 <p><hr>
978 Next:&nbsp;<a rel="next" accesskey="n" href="#comet2">comet2</a>,
979 Previous:&nbsp;<a rel="previous" accesskey="p" href="#Command-Manual">Command Manual</a>,
980 Up:&nbsp;<a rel="up" accesskey="u" href="#Command-Manual">Command Manual</a>
981
982 </div>
983
984 <h3 class="section">4.1 <kbd>casl2</kbd></h3>
985
986  <p><a name="index-casl2-2"></a><a name="index-casl2-3"></a>
987 <kbd>casl2</kbd>は、引数として指定されたCASLファイルをアセンブルし、仮想マシンCOMET II上で実行します。CASLファイルは、アセンブラ言語CASL IIで記述されたテキストファイルです。引数が指定されない場合は、エラーメッセージを表示して終了します。
988
989 <pre class="example">$ <kbd>casl2 hello.casl</kbd>
990 </pre>
991  <p>複数のCASLファイルを指定することで、副プログラムを呼び出せます。
992
993 <pre class="example">$ <kbd>casl2 addl_outl.casl ~/yacasl2/as/casl2lib/outl.casl</kbd>
994 </pre>
995  <h4 class="unnumberedsubsec">オプション</h4>
996
997  <p><kbd>casl2</kbd>は、次のオプションを指定できます。
998
999      <dl>
1000 <dt><samp><span class="option">-s</span></samp><dt><samp><span class="option">--source</span></samp><dd>CASLファイルの内容を表示します。
1001
1002      <br><dt><samp><span class="option">-l</span></samp><dt><samp><span class="option">--label</span></samp><dd>ラベルの一覧を次の形式で表示します。表示後、ほかの作業を続行します。
1003
1004      <pre class="example">     &lt;プログラム名&gt;.&lt;ラベル名&gt; ---&gt; &lt;アドレスの16進数表現&gt;
1005 </pre>
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>と同じ形式でラベルの一覧を表示します。表示後、ほかの作業は続行せず、終了します。
1007
1008      <br><dt><samp><span class="option">-a</span></samp><dt><samp><span class="option">--assembledetail</span></samp><dd>アセンブル詳細結果を表示し、ほかの作業を続行します。
1009
1010      <br><dt><samp><span class="option">-A</span></samp><dt><samp><span class="option">--assembledetailonly</span></samp><dd>アセンブル詳細結果を表示して終了します。
1011
1012      <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つだけ指定できます。
1013
1014      <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つだけ指定できます。
1015
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>プログラム実行中のレジスタの値を次の形式で表示します。
1017
1018      <pre class="example">     &lt;PR値の16進数表現&gt;: &lt;レジスタ&gt;: &lt;値の10進数表現&gt; =
1019      &lt;値の16進数表現&gt; = &lt;値の2進数表現&gt;[ ='文字']
1020 </pre>
1021           <ul>
1022 <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>です
1023
1024           <li><code>&lt;値の10進数表現&gt;</code>は符号の付いた10進数です。範囲は-32768から32767です。
1025
1026           <li><code>&lt;値の2進数表現&gt;</code>は、16けたの2進数で表されます。範囲は、<code>0000000000000000</code>から<code>1111111111111111</code>です
1027
1028           <li><code>[ ='文字']</code>は、レジストリの値が「文字の組」の範囲に含まれる場合に表示されます。
1029 </ul>
1030
1031      <p>表示されるレジスタには、次の種類があります。
1032
1033           <dl>
1034 <dt><code>GR0 GR1 GR2 GR3 GR4 GR5 GR6 GR7</code><dd>汎用レジスタ
1035
1036           <br><dt><code>SP</code><dd>スタックポインタ
1037
1038           <br><dt><code>PR</code><dd>プログラムレジスタ
1039
1040           <br><dt><code>FR</code><dd>フラグレジスタ
1041 </dl>
1042
1043      <p>例えば、次のように表示されます。
1044
1045      <pre class="example">     #0002: GR1:      3 = #0003 = 0000000000000011
1046 </pre>
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>&lt;値の10進数表現&gt;</code>は符号の付かない10進数です。値の範囲は0から65535です。
1048
1049      <br><dt><samp><span class="option">-d</span></samp><dt><samp><span class="option">--dump</span></samp><dd>メモリの内容をすべて表示します。
1050
1051      <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です。
1052
1053      <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です。
1054
1055      <br><dt><samp><span class="option">-h</span></samp><dt><samp><span class="option">--help</span></samp><dd><kbd>casl2</kbd>の使用方法を表示して終了します。
1056 </dl>
1057
1058 <div class="node">
1059 <a name="comet2"></a>
1060 <p><hr>
1061 Next:&nbsp;<a rel="next" accesskey="n" href="#dumpword">dumpword</a>,
1062 Previous:&nbsp;<a rel="previous" accesskey="p" href="#casl2">casl2</a>,
1063 Up:&nbsp;<a rel="up" accesskey="u" href="#Command-Manual">Command Manual</a>
1064
1065 </div>
1066
1067 <h3 class="section">4.2 <kbd>comet2</kbd></h3>
1068
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>を指定して出力します。
1071
1072 <pre class="example">$ <kbd>comet2 hello.o</kbd>
1073 </pre>
1074  <p>引数で指定できるオブジェクトファイルは1つだけです。引数が指定されない場合は、エラーメッセージを表示して終了します。複数の引数を指定した場合、2番目以降の引数は無視されます。
1075
1076 <h4 class="unnumberedsubsec">オプション</h4>
1077
1078  <p><kbd>comet2</kbd>は、次のオプションを指定できます。
1079
1080      <dl>
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>&lt;値の10進数表現&gt;</code>は符号の付いた10進数です。範囲は-32768から32767です。
1082
1083      <pre class="example">     &lt;PR値の16進数表現&gt;: &lt;レジスタ&gt;: &lt;値の10進数表現&gt; = &lt;値の16進数表現&gt; = &lt;値の2進数表現&gt;[ ='文字']
1084 </pre>
1085           <ul>
1086 <li><code>&lt;PR値の16進数表現&gt;</code>と<code>&lt;値の16進数表現&gt;</code>は、先頭に<code>#</code>が付いた4けたの16進数で表されます。範囲は、<code>#0000</code>から<code>#FFFF</code>です
1087
1088           <li><code>&lt;値の2進数表現&gt;</code>は、16けたの2進数で表されます。範囲は、<code>0000000000000000</code>から<code>1111111111111111</code>です
1089
1090           <li><code>[ ='文字']</code>は、レジストリの値が「文字の組」の範囲に含まれる場合に表示されます。
1091 </ul>
1092
1093      <p>例えば、次のように表示されます。
1094
1095      <pre class="example">     #0002: GR1:      3 = #0003 = 0000000000000011
1096 </pre>
1097      <p>表示されるレジスタには、次の種類があります。
1098
1099           <dl>
1100 <dt><code>GR0 GR1 GR2 GR3 GR4 GR5 GR6 GR7</code><dd>汎用レジスタ
1101
1102           <br><dt><code>SP</code><dd>スタックポインタ
1103
1104           <br><dt><code>PR</code><dd>プログラムレジスタ
1105
1106           <br><dt><code>FR</code><dd>フラグレジスタ
1107 </dl>
1108
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>&lt;値の10進数表現&gt;</code>は符号の付かない10進数です。値の範囲は0から65535です。
1110
1111      <br><dt><samp><span class="option">-d</span></samp><dt><samp><span class="option">--dump</span></samp><dd>メモリの内容をすべて表示します。
1112
1113      <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です。
1114
1115      <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です。
1116
1117      <br><dt><samp><span class="option">-h</span></samp><dt><samp><span class="option">--help</span></samp><dd><kbd>comet2</kbd>の使用方法を表示して終了します。
1118 </dl>
1119
1120 <div class="node">
1121 <a name="dumpword"></a>
1122 <p><hr>
1123 Previous:&nbsp;<a rel="previous" accesskey="p" href="#comet2">comet2</a>,
1124 Up:&nbsp;<a rel="up" accesskey="u" href="#Command-Manual">Command Manual</a>
1125
1126 </div>
1127
1128 <h3 class="section">4.3 <kbd>dumpword</kbd></h3>
1129
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です。
1132
1133 <pre class="example">$ <kbd>dumpword 10</kbd>
1134 </pre>
1135  <p>引数で指定できる1つだけです。引数が指定されない場合は、使い方を表示して終了します。複数の引数を指定した場合、2番目以降の引数は無視されます。
1136
1137 <h4 class="unnumberedsubsec">オプション</h4>
1138
1139  <p><kbd>dumpword</kbd>は、次のオプションを指定できます。
1140
1141      <dl>
1142 <dt><samp><span class="option">-a</span></samp><dt><samp><span class="option">--arithmetic</span></samp><dd>出力される整数の範囲を-32,768〜32,767にします。オプションなしの場合と同じです。
1143
1144      <br><dt><samp><span class="option">-l</span></samp><dt><samp><span class="option">--logical</span></samp><dd>出力される整数の範囲を0〜65,535にします。
1145
1146      <br><dt><samp><span class="option">-h</span></samp><dt><samp><span class="option">--help</span></samp><dd><kbd>dumpword</kbd>の使用方法を表示して終了します。
1147 </dl>
1148
1149 <div class="node">
1150 <a name="CASL2LIB-Manual"></a>
1151 <p><hr>
1152 Previous:&nbsp;<a rel="previous" accesskey="p" href="#Command-Manual">Command Manual</a>,
1153 Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
1154
1155 </div>
1156
1157 <h2 class="chapter">5 CASL2LIBマニュアル</h2>
1158
1159 <ul class="menu">
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>
1175 </ul>
1176
1177 <div class="node">
1178 <a name="ABS"></a>
1179 <p><hr>
1180 Next:&nbsp;<a rel="next" accesskey="n" href="#DIVA">DIVA</a>,
1181 Previous:&nbsp;<a rel="previous" accesskey="p" href="#CASL2LIB-Manual">CASL2LIB Manual</a>,
1182 Up:&nbsp;<a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1183
1184 </div>
1185
1186 <h3 class="section">5.1 <kbd>ABS</kbd> - <samp><span class="file">abs.casl</span></samp></h3>
1187
1188  <p>GR1を符号付き整数とみなし、絶対値に変換
1189
1190 <h4 class="unnumberedsubsec">入力</h4>
1191
1192      <dl>
1193 <dt><code>GR1</code><dd>符号付き整数
1194 </dl>
1195
1196 <h4 class="unnumberedsubsec">出力</h4>
1197
1198      <dl>
1199 <dt><code>GR1</code><dd>入力された値の絶対値
1200
1201      <br><dt><code>OF</code><dd>入力された値が-32768の場合、1
1202
1203      <br><dt><code>SF</code><dd>入力された値が負数(-32767から-1)の場合、1
1204 </dl>
1205
1206 <h4 class="unnumberedsubsec">依存する副プログラム</h4>
1207
1208  <p>なし
1209
1210 <h4 class="unnumberedsubsec">使用例</h4>
1211
1212 <pre class="example"><pre class="verbatim">;;; CASL2LIB > ABSを呼び出し、-1の絶対値を表示
1213 MAIN    START
1214         LD      GR1,A
1215         CALL    ABS
1216         CALL    OUTA
1217         RET
1218 A       DC      -1
1219         END
1220 </pre></pre>
1221  <pre class="example">$ <kbd>casl2 call_abs.casl $CASL2LIB/abs.casl $CASL2LIB/outa.casl \
1222   $CASL2LIB/divl.casl $CASL2LIB/rev.casl</kbd>
1223 1
1224 </pre>
1225  <div class="node">
1226 <a name="DIVA"></a>
1227 <p><hr>
1228 Next:&nbsp;<a rel="next" accesskey="n" href="#DIVL">DIVL</a>,
1229 Previous:&nbsp;<a rel="previous" accesskey="p" href="#ABS">ABS</a>,
1230 Up:&nbsp;<a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1231
1232 </div>
1233
1234 <h3 class="section">5.2 <kbd>DIVA</kbd> - <samp><span class="file">diva.casl</span></samp></h3>
1235
1236  <p>符号付き整数の割算を筆算方式で行う
1237
1238 <h4 class="unnumberedsubsec">入力</h4>
1239
1240      <dl>
1241 <dt><code>GR1</code><dd>被除数
1242
1243      <br><dt><code>GR2</code><dd>除数
1244 </dl>
1245
1246 <h4 class="unnumberedsubsec">出力</h4>
1247
1248      <dl>
1249 <dt><code>GR0</code><dd>商
1250
1251      <br><dt><code>GR3</code><dd>剰余
1252
1253      <br><dt><code>OF</code><dd>次の場合、1
1254           <ul>
1255 <li>GR2が0
1256
1257           <li>GR1が-32768
1258
1259           <li>GR2が-32768
1260 </ul>
1261
1262      <br><dt><code>SF</code><dd>商が負数(-32767から-1)の場合、1
1263
1264      <br><dt><code>ZF</code><dd>商が0の場合、1
1265 </dl>
1266
1267 <h4 class="unnumberedsubsec">依存する副プログラム</h4>
1268
1269      <ul>
1270 <li><code>DIVL</code>
1271 </ul>
1272
1273 <h4 class="unnumberedsubsec">使用例</h4>
1274
1275 <pre class="example"><pre class="verbatim">;; CASL2LIB > DIVAを呼び出し、-32767 / 255 の商と剰余を表示
1276 MAIN    START
1277 BEGIN   LD      GR1,A
1278         LD      GR2,B
1279         CALL    DIVA
1280         JOV     ERR
1281         LD      GR1,GR0
1282         CALL    OUTA
1283         LD      GR1,GR3
1284         CALL    OUTA
1285         JUMP    FIN
1286 ERR     OUT     EMSG,ELEN
1287 FIN     RET
1288 A       DC      -32767
1289 B       DC      255
1290 EMSG    DC      'error'
1291 ELEN    DC      5
1292         END
1293 </pre></pre>
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>
1296 -128
1297 -127
1298 </pre>
1299  <div class="node">
1300 <a name="DIVL"></a>
1301 <p><hr>
1302 Next:&nbsp;<a rel="next" accesskey="n" href="#INL">INL</a>,
1303 Previous:&nbsp;<a rel="previous" accesskey="p" href="#DIVA">DIVA</a>,
1304 Up:&nbsp;<a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1305
1306 </div>
1307
1308 <h3 class="section">5.3 <kbd>DIVL</kbd> - <samp><span class="file">divl.casl</span></samp></h3>
1309
1310  <p>符号なし整数の割算を筆算方式で行う
1311
1312 <h4 class="unnumberedsubsec">入力</h4>
1313
1314      <dl>
1315 <dt><code>GR1</code><dd>被除数
1316
1317      <br><dt><code>GR2</code><dd>除数
1318 </dl>
1319
1320 <h4 class="unnumberedsubsec">出力</h4>
1321
1322      <dl>
1323 <dt><code>GR0</code><dd>商
1324
1325      <br><dt><code>GR3</code><dd>剰余
1326
1327      <br><dt><code>OF</code><dd>GR2が0の場合、1
1328
1329      <br><dt><code>SF</code><dd>商が32768から65535の場合、1
1330
1331      <br><dt><code>ZF</code><dd>商が0の場合、1
1332 </dl>
1333
1334 <h4 class="unnumberedsubsec">依存する副プログラム</h4>
1335
1336  <p>なし
1337
1338 <h4 class="unnumberedsubsec">使用例</h4>
1339
1340 <pre class="example"><pre class="verbatim">;; CASL2LIB > DIVLを呼び出し、65534 / 255 の商と剰余を表示
1341 MAIN    START
1342 BEGIN   LD      GR1,A
1343         LD      GR2,B
1344         CALL    DIVL
1345         JOV     ERR
1346         LD      GR1,GR0
1347         CALL    OUTL
1348         LD      GR1,GR3
1349         CALL    OUTL
1350         JUMP    FIN        
1351 ERR     OUT     EMSG,ELEN
1352 FIN     RET
1353 A       DC      65534
1354 B       DC      255
1355 EMSG    DC      'error'
1356 ELEN    DC      5
1357         END
1358 </pre></pre>
1359  <pre class="example">$ <kbd>casl2 call_divl.casl $CASL2LIB/divl.casl $CASL2LIB/outl.casl \
1360   $CASL2LIB/rev.casl</kbd>
1361 256
1362 254
1363 </pre>
1364  <div class="node">
1365 <a name="INL"></a>
1366 <p><hr>
1367 Next:&nbsp;<a rel="next" accesskey="n" href="#L2STR">L2STR</a>,
1368 Previous:&nbsp;<a rel="previous" accesskey="p" href="#DIVL">DIVL</a>,
1369 Up:&nbsp;<a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1370
1371 </div>
1372
1373 <h3 class="section">5.4 <kbd>INL</kbd> - <samp><span class="file">inl.casl</span></samp></h3>
1374
1375  <p>符号なし整数の入力を受け付ける
1376
1377 <h4 class="unnumberedsubsec">入力</h4>
1378
1379      <dl>
1380 <dt><code>標準入力</code><dd>符号なし整数
1381 </dl>
1382
1383 <h4 class="unnumberedsubsec">出力</h4>
1384
1385      <dl>
1386 <dt><code>GR1</code><dd>入力された符号なし整数
1387
1388      <br><dt><code>GR0</code><dd>文字列の長さ。数字以外が入力された場合は<code>#FFFF</code>
1389 </dl>
1390
1391 <h4 class="unnumberedsubsec">依存する副プログラム</h4>
1392
1393      <ul>
1394 <li><code>STR2L</code>
1395 </ul>
1396
1397 <h4 class="unnumberedsubsec">使用例</h4>
1398
1399  <p>次のコマンドを実行すると、数値の入力が受け付けられ、入力された数値が表示される。
1400
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
1403 MAIN    START
1404 LOOP    CALL    INL             ; GR1に数値、GR0に文字列の長さ
1405         JOV     OV
1406         AND     GR0,GR0
1407         JZE     FIN
1408         CPL     GR0,=#FFFF
1409         JZE     NAN
1410         CALL    OUTL
1411         JUMP    LOOP
1412 OV      CPL     GR0,=#FFFF
1413         JZE     LENOV
1414         OUT     OVMSG,MLEN1
1415         JUMP    LOOP
1416 NAN     OUT     NANMSG,MLEN2
1417         JUMP    LOOP
1418 LENOV   OUT     LENOVMSG,MLEN3
1419 FIN     RET
1420 OVMSG   DC      'Over 65535'
1421 MLEN1   DC      10
1422 NANMSG  DC      'Not integer'
1423 MLEN2   DC      11
1424 LENOVMSG DC     'Str too long. Stop'
1425 MLEN3   DC      18
1426         END
1427 </pre></pre>
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>
1430 </pre>
1431  <div class="node">
1432 <a name="L2STR"></a>
1433 <p><hr>
1434 Next:&nbsp;<a rel="next" accesskey="n" href="#MAX">MAX</a>,
1435 Previous:&nbsp;<a rel="previous" accesskey="p" href="#INL">INL</a>,
1436 Up:&nbsp;<a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1437
1438 </div>
1439
1440 <h3 class="section">5.5 <kbd>L2STR</kbd> - <samp><span class="file">l2str.casl</span></samp></h3>
1441
1442  <p>符号なし整数を文字列に変換する
1443
1444 <h4 class="unnumberedsubsec">入力</h4>
1445
1446      <dl>
1447 <dt><code>GR1</code><dd>符号なし整数
1448
1449      <br><dt><code>GR2</code><dd>変換した文字列を格納するアドレス
1450 </dl>
1451
1452 <h4 class="unnumberedsubsec">出力</h4>
1453
1454      <dl>
1455 <dt><code>GR0</code><dd>文字列の長さ
1456 </dl>
1457
1458 <h4 class="unnumberedsubsec">依存する副プログラム</h4>
1459
1460      <ul>
1461 <li><code>DIVL</code>
1462 </ul>
1463
1464 <div class="node">
1465 <a name="MAX"></a>
1466 <p><hr>
1467 Next:&nbsp;<a rel="next" accesskey="n" href="#MINIM">MINIM</a>,
1468 Previous:&nbsp;<a rel="previous" accesskey="p" href="#L2STR">L2STR</a>,
1469 Up:&nbsp;<a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1470
1471 </div>
1472
1473 <h3 class="section">5.6 <kbd>MAX</kbd> - <samp><span class="file">max.casl</span></samp></h3>
1474
1475  <p>連続した複数のWORDを符号付き整数とみなして最大値を返す
1476
1477 <h4 class="unnumberedsubsec">入力</h4>
1478
1479      <dl>
1480 <dt><code>GR1</code><dd>WORD値を格納したアドレス
1481
1482      <br><dt><code>GR2</code><dd>値の個数
1483 </dl>
1484
1485 <h4 class="unnumberedsubsec">出力</h4>
1486
1487      <dl>
1488 <dt><code>GR0</code><dd>最大値
1489 </dl>
1490
1491 <h4 class="unnumberedsubsec">依存する副プログラム</h4>
1492
1493  <p>なし
1494
1495 <div class="node">
1496 <a name="MINIM"></a>
1497 <p><hr>
1498 Next:&nbsp;<a rel="next" accesskey="n" href="#MULA">MULA</a>,
1499 Previous:&nbsp;<a rel="previous" accesskey="p" href="#MAX">MAX</a>,
1500 Up:&nbsp;<a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1501
1502 </div>
1503
1504 <h3 class="section">5.7 <kbd>MINIM</kbd> - <samp><span class="file">minim.casl</span></samp></h3>
1505
1506  <p>連続した複数のWORDを符号付き整数とみなして最小値を返す
1507
1508 <h4 class="unnumberedsubsec">入力</h4>
1509
1510      <dl>
1511 <dt><code>GR1</code><dd>WORD値を格納したアドレス
1512
1513      <br><dt><code>GR2</code><dd>値の個数
1514 </dl>
1515
1516 <h4 class="unnumberedsubsec">出力</h4>
1517
1518      <dl>
1519 <dt><code>GR0</code><dd>最小値
1520 </dl>
1521
1522 <h4 class="unnumberedsubsec">依存する副プログラム</h4>
1523
1524  <p>なし
1525
1526 <div class="node">
1527 <a name="MULA"></a>
1528 <p><hr>
1529 Next:&nbsp;<a rel="next" accesskey="n" href="#MULL">MULL</a>,
1530 Previous:&nbsp;<a rel="previous" accesskey="p" href="#MINIM">MINIM</a>,
1531 Up:&nbsp;<a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1532
1533 </div>
1534
1535 <h3 class="section">5.8 <kbd>MULA</kbd> - <samp><span class="file">mula.casl</span></samp></h3>
1536
1537 <div class="node">
1538 <a name="MULL"></a>
1539 <p><hr>
1540 Next:&nbsp;<a rel="next" accesskey="n" href="#OUTA">OUTA</a>,
1541 Previous:&nbsp;<a rel="previous" accesskey="p" href="#MULA">MULA</a>,
1542 Up:&nbsp;<a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1543
1544 </div>
1545
1546 <h3 class="section">5.9 <kbd>MULL</kbd> - <samp><span class="file">mull.casl</span></samp></h3>
1547
1548 <div class="node">
1549 <a name="OUTA"></a>
1550 <p><hr>
1551 Next:&nbsp;<a rel="next" accesskey="n" href="#OUTB">OUTB</a>,
1552 Previous:&nbsp;<a rel="previous" accesskey="p" href="#MULL">MULL</a>,
1553 Up:&nbsp;<a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1554
1555 </div>
1556
1557 <h3 class="section">5.10 <kbd>OUTA</kbd> - <samp><span class="file">outa.casl</span></samp></h3>
1558
1559 <div class="node">
1560 <a name="OUTB"></a>
1561 <p><hr>
1562 Next:&nbsp;<a rel="next" accesskey="n" href="#OUTD_005fQ15">OUTD_Q15</a>,
1563 Previous:&nbsp;<a rel="previous" accesskey="p" href="#OUTA">OUTA</a>,
1564 Up:&nbsp;<a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1565
1566 </div>
1567
1568 <h3 class="section">5.11 <kbd>OUTB</kbd> - <samp><span class="file">outb.casl</span></samp></h3>
1569
1570 <div class="node">
1571 <a name="OUTD_Q15"></a>
1572 <a name="OUTD_005fQ15"></a>
1573 <p><hr>
1574 Next:&nbsp;<a rel="next" accesskey="n" href="#OUTL">OUTL</a>,
1575 Previous:&nbsp;<a rel="previous" accesskey="p" href="#OUTB">OUTB</a>,
1576 Up:&nbsp;<a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1577
1578 </div>
1579
1580 <h3 class="section">5.12 <kbd>OUTD_Q15</kbd> - <samp><span class="file">outd_q15.casl</span></samp></h3>
1581
1582 <div class="node">
1583 <a name="OUTL"></a>
1584 <p><hr>
1585 Next:&nbsp;<a rel="next" accesskey="n" href="#REV">REV</a>,
1586 Previous:&nbsp;<a rel="previous" accesskey="p" href="#OUTD_005fQ15">OUTD_Q15</a>,
1587 Up:&nbsp;<a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1588
1589 </div>
1590
1591 <h3 class="section">5.13 <kbd>OUTL</kbd> - <samp><span class="file">outl.casl</span></samp></h3>
1592
1593 <div class="node">
1594 <a name="REV"></a>
1595 <p><hr>
1596 Next:&nbsp;<a rel="next" accesskey="n" href="#STR2L">STR2L</a>,
1597 Previous:&nbsp;<a rel="previous" accesskey="p" href="#OUTL">OUTL</a>,
1598 Up:&nbsp;<a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1599
1600 </div>
1601
1602 <h3 class="section">5.14 <kbd>REV</kbd> - <samp><span class="file">rev.casl</span></samp></h3>
1603
1604 <div class="node">
1605 <a name="STR2L"></a>
1606 <p><hr>
1607 Previous:&nbsp;<a rel="previous" accesskey="p" href="#REV">REV</a>,
1608 Up:&nbsp;<a rel="up" accesskey="u" href="#CASL2LIB-Manual">CASL2LIB Manual</a>
1609
1610 </div>
1611
1612 <h3 class="section">5.15 <kbd>STR2L</kbd> - <samp><span class="file">str2l.casl</span></samp></h3>
1613
1614 </body></html>
1615
1616 <!--
1617 \1f
1618 Local Variables:
1619 coding: utf-8
1620 End:
1621
1622 -->