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