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