1 \input texinfo @c -*-texinfo-*-
4 @documentlanguage ja_JP
6 @setfilename yacasl2.info
7 @documentencoding UTF-8
8 @settitle YACASL2 - CASL II処理システム
9 @firstparagraphindent insert
17 Copyright @copyright{} 2010-2011 j8takagi
27 @subtitle UNIX/Linuxのコマンドラインインターフェイスで動作するCASL II処理システム
33 @node Top, About, (dir), (dir)
37 * Install:: YACASL2のインストール
39 * Command Manual:: YACASL2コマンドマニュアル
40 * CASL2LIB Manual:: CASL2LIBマニュアル
43 --- The Detailed Node Listing ---
48 * Install:: YACASL2のインストール
50 * Command Manual:: YACASL2コマンドマニュアル
51 * CASL2LIB Manual:: CASL2LIBマニュアル
55 * Download:: YACASL2ファイルのダウンロード
56 * Verify:: YACASL2ファイルの検証
57 * Expand:: YACASL2ファイルの展開
58 * Build:: @kbd{casl2}、@kbd{comet2}、@kbd{dumpword}のビルド
59 * Simple Test:: @kbd{casl2}の実行テスト
60 * Detail Test:: 詳細なテスト
61 * Environment:: 環境変数の設定
65 * Simple Output:: 実行結果の出力だけを表示
66 * Assemble Result:: アセンブル結果の確認
67 * Register and Memory:: 実行時のレジスタとメモリを表示
68 * Only Assemble:: アセンブルと実行を別に行う
69 * Analyze Word:: 1語の解析
70 * Use CASL2LIB:: CASL2ライブラリの使用
74 * Register Specify:: 特定のレジスタを表示
75 * Ending Value:: プログラム終了時の値を表示
76 * Step Count:: プログラムのステップ数を表示
81 * comet2:: @kbd{comet2}
82 * dumpword:: @kbd{dumpword}
86 * ABS:: @kbd{ABS} - @file{abs.casl}
87 * DIVA:: @kbd{DIVA} - @file{diva.casl}
88 * DIVL:: @kbd{DIVL} - @file{divl.casl}
89 * INL:: @kbd{INL} - @file{inl.casl}
90 * L2STR:: @kbd{L2STR} - @file{l2str.casl}
91 * MAX:: @kbd{MAX} - @file{max.casl}
92 * MINIM:: @kbd{MINIM} - @file{minim.casl}
93 * MULA:: @kbd{MULA} - @file{mula.casl}
94 * MULL:: @kbd{MULL} - @file{mull.casl}
95 * OUTA:: @kbd{OUTA} - @file{outa.casl}
96 * OUTB:: @kbd{OUTB} - @file{outb.casl}
97 * OUTD_Q15:: @kbd{OUTD_Q15} - @file{outd_q15.casl}
98 * OUTL:: @kbd{OUTL} - @file{outl.casl}
99 * REV:: @kbd{REV} - @file{rev.casl}
100 * STR2L:: @kbd{STR2L} - @file{str2l.casl}
112 * Install:: YACASL2のインストール
113 * Usage:: YACASL2の使い方
114 * Command Manual:: YACASL2コマンドマニュアル
115 * CASL2LIB Manual:: CASL2LIBマニュアル
121 @node About, Install, Top, Top
124 YACASL2は、UNIX/Linuxのコマンドラインインターフェイスで動作するオープンソースのCASL II処理システムです。CASL IIは情報処理試験で用いられるアセンブラ言語で、次の資料により仕様が公開されています。
130 @uref{http://www.jitec.ipa.go.jp/1_00topic/topic_20081027_hani_yougo.pdf, 試験で使用する情報処理用語・プログラム言語など(2008年10月版)}[PDFファイル]
137 YACASL2は、CASL IIアセンブラ言語で記述されたファイルをアセンブルし、仮想マシンCOMET II上で実行します。アセンブルと実行は、連続で行うことも別々に行うことも可能です。
138 YACASL2の動作はCASL IIの仕様に準拠しているため、情報処理試験の問題をはじめ各種参考書やサイトに記載されたCASL IIのプログラムをそのままアセンブルして実行できます。また、本パッケージ中にCASL IIのサンプルプログラムが多数収録されています。
140 YACASL2は、「ふつうの処理系」として動作します。ほかの多くのCASL IIエミュレータと違い、デバッガとして動作したり、コンピュータ内部の模式図を表示したりすることはありません。そのかわり、YACASL2は、次のような動作内容をすべてテキストで出力します。
157 出力された動作内容は、GNU/Linuxのさまざまなツール、たとえば、@kbd{cat} @kbd{less} @kbd{grep} @kbd{wc}などを使って解析できます。
159 YACASL2の操作は、端末を開いてコマンドを入力・実行することで行います。
162 YACASL2は、LinuxやMac OS Xなど、UNIX系のOS上で動作します。現在動作を確認しているのは、次の環境です。
176 インストール時に、@kbd{tar} @kbd{gcc} @kbd{make}が必要です。Linuxでは多くの場合、標準でインストールされています。Mac OS Xの場合、@code{Xcode}をインストールするといっしょにインストールされます。
178 @node Install, Usage, About, Top
179 @chapter YACASL2のインストール
180 YACASL2をインストールするには、Linux上で次の作業をします。
183 * Download:: YACASL2ファイルのダウンロード
184 * Verify:: YACASL2ファイルの検証
185 * Expand:: YACASL2ファイルの展開
186 * Build:: @kbd{casl2} @kbd{comet2} @kbd{dumpword}のビルド
187 * Simple Test:: @kbd{casl2}の実行テスト
188 * Detail Test:: 詳細なテスト
189 * Environment:: 環境変数の設定
192 @node Download, Verify, Install, Install
193 @section YACASL2ファイルのダウンロード
195 @uref{http://www.j8takagi.net/yacasl2/, YACASL2のサイト}または@uref{http://github.com/j8takagi/YACASL2/downloads/, githubのダウンロードページ}から最新版の@file{tar.gz}ファイルをダウンロードします。
197 @node Verify, Expand, Download, Install
198 @section YACASL2ファイルの検証
200 ダウンロードが完了したら、@kbd{md5sum}と@kbd{diff}で正しくファイルがダウンロードができているかを検証します。
203 $ @kbd{openssl md5sum yacasl2.tar.gz | diff -s yacasl2.tar.gz.md5sum -}
204 Files yacasl2.tar.gz.md5sum and - are identical
207 @node Expand, Build, Verify, Install
208 @section YACASL2ファイルの展開
210 YACASL2ファイルをダウンロードしたら、次のコマンドで展開します。
213 $ @kbd{tar xvzf yacasl2.tar.gz}
216 @node Build, Simple Test, Expand, Install
217 @section @kbd{casl2} @kbd{comet2} @kbd{dumpword}のビルド
219 展開したら、次のコマンドで@kbd{casl2} @kbd{comet2} @kbd{dumpword}をビルドします。
225 make[1]: Entering directory ‘/home/kazubito/yacasl2/src’
226 gcc -c -g -Wall -I ../include casl2.c
227 gcc -c -g -Wall -I ../include word.c
228 gcc -c -g -Wall -I ../include hash.c
229 gcc -c -g -Wall -I ../include cerr.c
230 gcc -c -g -Wall -I ../include struct.c
231 gcc -c -g -Wall -I ../include cmd.c
232 gcc -c -g -Wall -I ../include assemble.c
233 gcc -c -g -Wall -I ../include token.c
234 gcc -c -g -Wall -I ../include label.c
235 gcc -c -g -Wall -I ../include macro.c
236 gcc -c -g -Wall -I ../include exec.c
237 gcc -c -g -Wall -I ../include dump.c
238 gcc -g -Wall -I ../include -o ../casl2 casl2.o word.o hash.o cerr.o st
239 ruct.o cmd.o assemble.o token.o label.o macro.o exec.o dump.o
240 gcc -c -g -Wall -I ../include comet2.c
241 gcc -g -Wall -I ../include -o ../comet2 comet2.o word.o hash.o cerr.o
242 struct.o cmd.o exec.o dump.o
243 gcc -c -g -Wall -I ../include dumpword.c
244 gcc -g -Wall -I ../include -o ../dumpword dumpword.o word.o cerr.o
245 make[1]: Leaving directory ‘/home/kazubito/yacasl2/src’
248 @node Simple Test, Detail Test, Build, Install
249 @section @kbd{casl2}の実行テスト
251 ビルドしたら、次のコマンドが正常に実行できるかを確認します。
252 正常に実行された場合は、「Hello, World!」と表示されます。
255 $ @kbd{./casl2 as/hello.casl}
259 @node Detail Test, Environment, Simple Test, Install
262 次のコマンドを実行すると、正常にビルドできているかどうかを詳細にテストできます。
266 195 / 195 tests passed. Details in /home/username/yacasl2/test/integra
268 All tests are succeded.
269 149 / 149 tests passed. Details in /home/username/yacasl2/test/integra
271 All tests are succeded.
272 4 / 4 tests passed. Details in /home/username/yacasl2/test/integration
274 All tests are succeded.
277 @node Environment, , Detail Test, Install
280 環境変数@code{PATH}や@code{CASL2LIB}を設定することで、YACASL2が使いやすくなります。環境変数は、使っているシェルを確認してから設定します。
282 @unnumberedsubsec シェルの確認
284 環境変数の設定方法は使っているシェルによって異なります。シェルは、次のコマンドで確認できます。
291 現在もっとも多く使われているシェルは、BASHでしょう。以下、BASHでの設定方法を説明します。
293 @unnumberedsubsec @code{PATH}にYACASL2のディレクトリを追加
295 @code{PATH}にYACASL2のディレクトリを追加すると、どのディレクトリでもディレクトリを指定せずに@kbd{casl2}、@kbd{comet2}、@kbd{dumpword}を実行できます。YACASL2をホームディレクトリ@code{~}にインストールしたときは、次のコマンドで設定できます。
298 $ @kbd{PATH=$PATH:~/yacasl2 && export PATH}
301 環境変数の設定は、シェルの初期設定ファイルに追加することでログインしたあと自動的に反映されるようになります。BASHではホームディレクトリにある@file{.bashrc}が初期設定ファイルです。次のコマンドで追加できます。
304 $ @kbd{echo ’PATH=$PATH:~/yacasl2 && export PATH’ >>~/.bashrc}
308 @unnumberedsubsec @code{CASL2LIB}の設定
310 環境変数@code{CASL2LIB}を設定しておけば、後述するCASL2LIBを利用するときの手間が小さくなります。YACASL2をホームディレクトリ@code{~}にインストールしたときは、次のコマンドで設定できます。
313 $ @kbd{CASL2LIB=~/yacasl2/as/casl2lib && export CASL2LIB}
316 BASHの初期設定ファイル@file{.bashrc}には、次のコマンドで追加できます。
319 $ @kbd{ echo 'CASL2LIB=~/yacasl2/as/casl2lib && export CASL2LIB' >>~/.bashrc}
323 @node Usage, Command Manual, Install, Top
325 YACASL2 は、テキストファイルに記述されたCASLプログラムを処理します。以下の例で用いられるCASLプログラムのファイルは、テキストエディタなどで作成してください。また、インストールしたディレクトリの中にある@file{as}ディレクトリからコピーして作成することもできます。
329 * Simple Output:: 実行結果の出力だけを表示
330 * Assemble Result:: アセンブル結果の確認
331 * Register and Memory:: 実行時のレジスタとメモリを表示
332 * Only Assemble:: アセンブルと実行を別に行う
333 * Analyze Word:: 1語の解析
334 * Use CASL2LIB:: CASL2ライブラリの使用
337 @node Simple Output, Assemble Result, Usage, Usage
338 @section 実行結果の出力だけを表示
340 インストール時にコマンド実行の確認に使った@file{hello.casl}は、次のような内容です。CASL IIのマクロ命令OUTは、文字列を出力します。
343 $ @kbd{cat hello.casl}
347 OBUF DC 'Hello, World!'
352 次のコマンドを実行すると、CASL II のアセンブルと仮想マシン COMET II 上での実行が連続で行われ、文字列が出力されます。
355 $ @kbd{casl2 hello.casl}
359 @file{addl.casl}は、3と1の和を求めます。
362 $ @kbd{cat addl.casl}
373 このプログラムには出力命令がないため、オプションなしで実行した場合には結果が出力されません。
376 $ @kbd{casl2 addl.casl}
380 実行内容を確認するには、後述のようにCPU 内にあるレジスタやメモリの内容を表示するか、結果を出力するための処理を追加する必要があります。
382 @node Assemble Result, Register and Memory, Simple Output, Usage
385 casl2の処理途中で行われるアセンブルの結果を表示するには、オプション@option{-a}を指定します。また、ラベルとアドレスの対応表を表示するには、オプション@option{-l}を指定します。
387 次のコマンドでは@file{hello.casl}の、ラベルとアドレスの対応表と、アセンブル結果と、実行結果が表示されます。OUTはアセンブラ命令で複数の機械語命令で構成されているため、命令行1行に対して、複数行のコードが生成されます。
390 $ @kbd{casl2 -a -l hello.casl}
392 Assemble hello.casl (0)
399 Assemble hello.casl (1)
400 hello.casl: 1:MAIN START
401 hello.casl: 2: OUT OBUF,LEN
424 hello.casl: 4:OBUF DC 'Hello, World!'
438 hello.casl: 5:LEN DC 13
444 @file{addl.casl}の、ラベルとアドレスの対応表と、アセンブル結果は、次のようになります。
447 $ @kbd{casl2 -a -l addl.casl}
449 Assemble addl.casl (0)
456 Assemble addl.casl (1)
457 addl.casl: 1:;;; ADDL r,adr
458 addl.casl: 2:MAIN START
459 addl.casl: 3: LD GR1,A
462 addl.casl: 4: ADDL GR1,B
474 なお、オプション@option{-A}を指定すると、アセンブル結果が表示される時点で処理が終了します。仮想マシンCOMET II での実行は行われません。
476 @node Register and Memory, Only Assemble, Assemble Result, Usage
477 @section 実行時のレジスタとメモリを表示
479 YACASL2では実行中のCPUのレジスタとメモリの内容をそれぞれ、@option{-t}と@option{-d}を指定することで表示できます。
481 また、@option{-M}で、仮想マシンCOMET II のメモリ容量を語(16 ビット)単位で指定できます。小さいプログラムを実行するときは、メモリ容量を小さくすれば結果が見やすくなります。
484 * Register Specify:: 特定のレジスタを表示
485 * Ending Value:: プログラム終了時の値を表示
486 * Step Count:: プログラムのステップ数を表示
489 @file{addl.casl}に必要なメモリ容量は8語のため、次のようにCPUのレジスタとメモリの内容を表示できます。
492 $ @kbd{casl2 -t -d -M8 addl.casl | less}
494 Assemble addl.casl (0)
496 Assemble addl.casl (1)
498 Executing machine codes
500 #0000: GR0: 0 = #0000 = 0000000000000000
501 #0000: GR1: 0 = #0000 = 0000000000000000
502 #0000: GR2: 0 = #0000 = 0000000000000000
503 #0000: GR3: 0 = #0000 = 0000000000000000
504 #0000: GR4: 0 = #0000 = 0000000000000000
505 #0000: GR5: 0 = #0000 = 0000000000000000
506 #0000: GR6: 0 = #0000 = 0000000000000000
507 #0000: GR7: 0 = #0000 = 0000000000000000
508 #0000: SP: 8 = #0008 = 0000000000001000
509 #0000: PR: 0 = #0000 = 0000000000000000
510 #0000: FR (OF SF ZF): 000
512 #0000: adr : 0000 0001 0002 0003 0004 0005 0006 0007
513 #0000: 0000: 1010 0005 2210 0006 8100 0003 0001 0000
515 #0002: GR0: 0 = #0000 = 0000000000000000
516 #0002: GR1: 3 = #0003 = 0000000000000011
517 #0002: GR2: 0 = #0000 = 0000000000000000
518 #0002: GR3: 0 = #0000 = 0000000000000000
519 #0002: GR4: 0 = #0000 = 0000000000000000
520 #0002: GR5: 0 = #0000 = 0000000000000000
521 #0002: GR6: 0 = #0000 = 0000000000000000
522 #0002: GR7: 0 = #0000 = 0000000000000000
523 #0002: SP: 8 = #0008 = 0000000000001000
524 #0002: PR: 2 = #0002 = 0000000000000010
525 #0002: FR (OF SF ZF): 000
527 #0002: adr : 0000 0001 0002 0003 0004 0005 0006 0007
528 #0002: 0000: 1010 0005 2210 0006 8100 0003 0001 0000
530 #0004: GR0: 0 = #0000 = 0000000000000000
531 #0004: GR1: 4 = #0004 = 0000000000000100
532 #0004: GR2: 0 = #0000 = 0000000000000000
533 #0004: GR3: 0 = #0000 = 0000000000000000
534 #0004: GR4: 0 = #0000 = 0000000000000000
535 #0004: GR5: 0 = #0000 = 0000000000000000
536 #0004: GR6: 0 = #0000 = 0000000000000000
537 #0004: GR7: 0 = #0000 = 0000000000000000
538 #0004: SP: 8 = #0008 = 0000000000001000
539 #0004: PR: 4 = #0004 = 0000000000000100
540 #0004: FR (OF SF ZF): 000
542 #0004: adr : 0000 0001 0002 0003 0004 0005 0006 0007
543 #0004: 0000: 1010 0005 2210 0006 8100 0003 0001 0000
546 @node Register Specify, Ending Value, Register and Memory, Register and Memory
547 @subsection 特定のレジスタを表示
549 @file{addl.casl}のレジスタやメモリの中で、実行中に値が変化しているのはGR1だけです。こうした場合は、@kbd{grep}を使って表示される内容を絞り込むことで動作を検証しやすくなります。
552 $ @kbd{casl2 -t addl.casl | grep 'GR1:'}
553 #0000: GR1: 0 = #0000 = 0000000000000000
554 #0002: GR1: 3 = #0003 = 0000000000000011
555 #0004: GR1: 4 = #0004 = 0000000000000100
558 この内容を、先に出力したアセンブル結果と引き比べてください。
559 次の表のように、PRとGR1、命令行が対応していることがわかります。
561 @multitable @columnfractions .3 .3 .4
562 @item PR @tab GR1 @tab 命令行
570 @tab @code{ADDL GR1,B}
573 @node Ending Value, Step Count, Register Specify, Register and Memory
574 @subsection プログラム終了時の値を表示
576 @kbd{grep}と@kbd{tail}を組み合わせれば、プログラム終了時の値を表示できます。
578 @file{addl.casl}でプログラム終了時の値を確認するには、次のようにします。
581 $ @kbd{casl2 -t addl.casl | grep 'GR1:' | tail -1}
582 #0004: GR1: 4 = #0004 = 0000000000000100
585 @file{sum_10.casl}は、1から10までの整数の和を求めます。
588 $ @kbd{cat sum_10.casl}
590 ;;; 出力 GR0: 1から10までの整数をすべて加算した値
594 LD GR1,FST ; GR1に初項を転送
595 LOOP ADDL GR0,GR1 ; ループ先頭
596 ADDL GR1,STEP ; GR1 <- GR1 + 公差
597 CPL GR1,LST ; GR1が末項より大きい場合は終了
608 @file{sum_10.casl}でファイル終了時の値を確認するには、次のようにします。
611 $ @kbd{casl2 -t sum_10.casl | grep 'GR0:' | tail -1}
612 #0010: GR0: 55 = #0037 = 0000000000110111 = '7'
615 @node Step Count, , Ending Value, Register and Memory
616 @subsection プログラムのステップ数を表示
618 @kbd{grep}と@kbd{wc}を組み合わせれば、プログラムのステップ数を表示できます。
621 $ @kbd{casl2 -t hello.casl | grep 'GR1:' | wc -l}
626 $ @kbd{casl2 -t addl.casl | grep 'GR1:' | wc -l}
630 @file{sum_10.casl}はプログラム内にループがあるため、ステップ数が大きくなります。
633 $ @kbd{casl2 -t sum_10.casl | grep 'GR0:' | wc -l}
637 @node Only Assemble, Analyze Word, Register and Memory, Usage
638 @section アセンブルと実行を別に行う
640 @kbd{casl2}に@option{-O}@file{ファイル名}を指定すると、オブジェクトファイルを作成できます。
643 $ @kbd{casl2 -Ohello.o hello.casl}
646 作成されたオブジェクトファイルの内容は、@kbd{od}を使って確認できます。テキストファイルではないため、@kbd{cat}などでは確認できません。
649 $ @kbd{od -t x2 hello.o}
650 0000000 7001 0000 7002 0000 1210 0013 1220 0020
651 0000020 f000 0002 1210 0021 1220 0022 f000 0002
652 0000040 7120 7110 8100 0048 0065 006c 006c 006f
653 0000060 002c 0020 0057 006f 0072 006c 0064 0021
654 0000100 000d 000a 0001
658 オブジェクトファイルの実行には、@kbd{comet2}を使います。
661 $ @kbd{comet2 hello.o}
665 @node Analyze Word, Use CASL2LIB, Only Assemble, Usage
668 CASL IIでは、1語(16ビット)を単位としてデータが処理されます。
669 @kbd{dumpword}は、指定した1語を10進数、16進数、2進数で表示します。
673 72: 72 = #0048 = 0000000001001000 = 'H'
676 マイナスの数は、次のように@kbd{--}を付けて指定します。
679 $ @kbd{dumpword -- -72}
680 -72: -72 = #FFB8 = 1111111110111000
683 16進数は、次のように次のように@kbd{'}で囲み@kbd{#}を付けて指定します。
686 $ @kbd{dumpword '#0048'}
687 #0048: 72 = #0048 = 0000000001001000 = 'H'
690 @node Use CASL2LIB, , Analyze Word, Usage
691 @section CASL2ライブラリの使用
693 YACASL2の@file{as/casl2lib}ディレクトリには、CASL IIで記述されたライブラリファイルが格納されています。
695 このフォルダには、たとえば次のようなプログラムが含まれています。
699 @file{outl.casl}。GR1に格納された値を、0〜65535の数値として出力します。
702 @file{outa.casl}。GR1に格納された値を、-32767〜32767の数値として出力します。
705 @file{mull.casl}。GR1とGR2に格納された値を0〜65535の整数と見なし、積をGR3に格納します。
708 @file{divl.casl}。GR1とGR2に格納された値を0〜65535の整数と見なし、商をGR3、剰余をGR0に格納します。
713 3と1の和を求める@file{addl.casl}で演算結果を出力するには、まず@file{addl.casl}を編集します。CASL IIの@kbd{CALL}命令で@kbd{OUTL}を副プログラムとして呼び出します。
716 $ @kbd{cat addl_outl.casl}
727 変更したら@kbd{casl2}を、複数のファイルを指定して実行します。
730 $ @kbd{casl2 addl_outl.casl ~/yacasl2/as/casl2lib/outl.casl}
734 @node Command Manual, CASL2LIB Manual, Usage, Top
735 @chapter YACASL2コマンドマニュアル
737 @cindex YACASL2コマンドマニュアル
739 YACASL2のコマンドとオプションについて解説します。
742 * casl2:: @kbd{casl2}
743 * comet2:: @kbd{comet2}
744 * dumpword:: @kbd{dumpword}
747 @node casl2, comet2, Command Manual, Command Manual
753 @kbd{casl2}は、引数として指定されたCASLファイルをアセンブルし、仮想マシンCOMET II上で実行します。CASLファイルは、アセンブラ言語CASL IIで記述されたテキストファイルです。引数が指定されない場合は、エラーメッセージを表示して終了します。
756 $ @kbd{casl2 hello.casl}
759 複数のCASLファイルを指定することで、副プログラムを呼び出せます。
762 $ @kbd{casl2 addl_outl.casl ~/yacasl2/as/casl2lib/outl.casl}
765 @unnumberedsubsec オプション
767 @kbd{casl2}は、次のオプションを指定できます。
776 ラベルの一覧を次の形式で表示します。表示後、ほかの作業を続行します。
779 <プログラム名>.<ラベル名> ---> <アドレスの16進数表現>
784 @option{-l}と同じ形式でラベルの一覧を表示します。表示後、ほかの作業は続行せず、終了します。
787 @itemx --assembledetail
788 アセンブル詳細結果を表示し、ほかの作業を続行します。
791 @itemx --assembledetailonly
795 @itemx --assembleout<OBJECTFILE>
796 アセンブル結果をオブジェクトファイル@file{<OBJECTFILE>}に出力し、ほかの作業を続行します。出力されたオブジェクトファイルは、@kbd{comet2}で実行できます。オブジェクトファイルを指定しない場合、出力先は@file{a.o}です。オブジェクトファイルは1つだけ指定できます。
798 @item -O[<OBJECTFILE>]
799 @itemx --assembleoutonly[<OBJECTFILE>]
800 アセンブル結果をオブジェクトファイル@file{<OBJECTFILE>}に出力し、終了します。出力されたオブジェクトファイルは、@kbd{comet2}で実行できます。オブジェクトファイルを指定しない場合、出力先は@file{a.o}です。オブジェクトファイルは1つだけ指定できます。
804 @itemx --tracearithmetic
805 プログラム実行中のレジスタの値を次の形式で表示します。
808 <PR値の16進数表現>: <レジスタ>: <値の10進数表現> =
809 <値の16進数表現> = <値の2進数表現>[ ='文字']
814 @code{<PR値の16進数表現>}と@code{<レジスタ>}、@code{<値の16進数表現>}は、4けたの16進数で表されます。@code{<PR値の16進数表現>}と@code{<値の16進数表現>}には、先頭に@code{#}が付きます。範囲は@code{#0000}から@code{#FFFF}です
817 @code{<値の10進数表現>}は符号の付いた10進数です。範囲は-32768から32767です。
820 @code{<値の2進数表現>}は、16けたの2進数で表されます。範囲は、@code{0000000000000000}から@code{1111111111111111}です
823 @code{[ ='文字']}は、レジストリの値が「文字の組」の範囲に含まれる場合に表示されます。
826 表示されるレジスタには、次の種類があります。
829 @item GR0 GR1 GR2 GR3 GR4 GR5 GR6 GR7
845 #0002: GR1: 3 = #0003 = 0000000000000011
849 @itemx --tracelogical
850 @option{-t}と同じように、プログラム実行中のレジスタの値を表示します。ただし、@option{-t}と異なり、@code{<値の10進数表現>}は符号の付かない10進数です。値の範囲は0から65535です。
856 @item -M <MEMORYSIZE>
857 @itemx --memorysize <MEMORYSIZE>
858 アセンブルおよび実行時のメモリサイズ@option{<MEMORYSIZE>}を0から65535の範囲で指定します。指定しない場合、512です。
861 @itemx --clocks <CLOCKS>
862 実行時のクロック周波数@option{<CLOCKS>}を0より大きい整数で指定します。指定しない場合、クロック周波数は5000000です。
866 @kbd{casl2}の使用方法を表示して終了します。
869 @node comet2, dumpword, casl2, Command Manual
870 @section @kbd{comet2}
875 @kbd{comet2}は、引数として指定されたオブジェクトファイルを仮想マシンCOMET II上で実行します。オブジェクトファイルは、@kbd{casl}に@option{-o}または@option{-O}を指定して出力します。
878 $ @kbd{comet2 hello.o}
881 引数で指定できるオブジェクトファイルは1つだけです。引数が指定されない場合は、エラーメッセージを表示して終了します。複数の引数を指定した場合、2番目以降の引数は無視されます。
883 @unnumberedsubsec オプション
885 @kbd{comet2}は、次のオプションを指定できます。
891 @itemx --tracearithmetic
892 プログラム実行中のレジスタの値を次の形式で表示します。@code{<値の10進数表現>}は符号の付いた10進数です。範囲は-32768から32767です。
895 <PR値の16進数表現>: <レジスタ>: <値の10進数表現> = <値の16進数表現> = <値の2進数表現>[ ='文字']
900 @code{<PR値の16進数表現>}と@code{<値の16進数表現>}は、先頭に@code{#}が付いた4けたの16進数で表されます。範囲は、@code{#0000}から@code{#FFFF}です
903 @code{<値の2進数表現>}は、16けたの2進数で表されます。範囲は、@code{0000000000000000}から@code{1111111111111111}です
906 @code{[ ='文字']}は、レジストリの値が「文字の組」の範囲に含まれる場合に表示されます。
912 #0002: GR1: 3 = #0003 = 0000000000000011
915 表示されるレジスタには、次の種類があります。
918 @item GR0 GR1 GR2 GR3 GR4 GR5 GR6 GR7
932 @itemx --tracelogical
933 @option{-t}と同じように、プログラム実行中のレジスタの値を表示します。ただし、@option{-t}と異なり、@code{<値の10進数表現>}は符号の付かない10進数です。値の範囲は0から65535です。
939 @item -M <MEMORYSIZE>
940 @itemx --memorysize <MEMORYSIZE>
941 実行時のメモリサイズ@option{<MEMORYSIZE>}を0から65535の範囲で指定します。指定しない場合、512です。
944 @itemx --clocks <CLOCKS>
945 実行時のクロック周波数@option{<CLOCKS>}を0より大きい整数で指定します。指定しない場合、5000000です。
949 @kbd{comet2}の使用方法を表示して終了します。
952 @node dumpword, , comet2, Command Manual
953 @section @kbd{dumpword}
958 @kbd{dumpword}は、引数として指定された数値を、整数、#0000〜#FFFFの範囲の16進数、2進数で表示します。文字の組に該当する場合は、「 = 」のうしろに文字が表示されます。引数は、10進数または先頭に「#」の付いた16進数で指定します。表示される整数は、オプションにより符号付きか符号なしかを指定します。オプションなしの場合は符号付きです。整数の範囲は、符号付きの場合は-32768から32767、符号なしの場合は0から65535です。
964 引数で指定できる1つだけです。引数が指定されない場合は、使い方を表示して終了します。複数の引数を指定した場合、2番目以降の引数は無視されます。
966 @unnumberedsubsec オプション
968 @kbd{dumpword}は、次のオプションを指定できます。
974 出力される整数の範囲を-32,768〜32,767にします。オプションなしの場合と同じです。
978 出力される整数の範囲を0〜65,535にします。
982 @kbd{dumpword}の使用方法を表示して終了します。
985 @node CASL2LIB Manual, , Command Manual, Top
986 @chapter CASL2LIBマニュアル
989 * ABS:: @kbd{ABS} - @file{abs.casl}
990 * DIVA:: @kbd{DIVA} - @file{diva.casl}
991 * DIVL:: @kbd{DIVL} - @file{divl.casl}
992 * INL:: @kbd{INL} - @file{inl.casl}
993 * L2STR:: @kbd{L2STR} - @file{l2str.casl}
994 * MAX:: @kbd{MAX} - @file{max.casl}
995 * MINIM:: @kbd{MINIM} - @file{minim.casl}
996 * MULA:: @kbd{MULA} - @file{mula.casl}
997 * MULL:: @kbd{MULL} - @file{mull.casl}
998 * OUTA:: @kbd{OUTA} - @file{outa.casl}
999 * OUTB:: @kbd{OUTB} - @file{outb.casl}
1000 * OUTD_Q15:: @kbd{OUTD_Q15} - @file{outd_q15.casl}
1001 * OUTL:: @kbd{OUTL} - @file{outl.casl}
1002 * REV:: @kbd{REV} - @file{rev.casl}
1003 * STR2L:: @kbd{STR2L} - @file{str2l.casl}
1006 @node ABS, DIVA, CASL2LIB Manual, CASL2LIB Manual
1007 @section @kbd{ABS} - @file{abs.casl}
1008 GR1を符号付き整数とみなし、絶対値に変換
1010 @unnumberedsubsec 入力
1016 @unnumberedsubsec 出力
1025 入力された値が負数(-32767から-1)の場合、1
1028 @unnumberedsubsec 依存する副プログラム
1031 @unnumberedsubsec 使用例
1033 @verbatiminclude casl2lib/abs/call_abs.casl
1037 $ @kbd{casl2 call_abs.casl $CASL2LIB/abs.casl $CASL2LIB/outa.casl \
1038 $CASL2LIB/divl.casl $CASL2LIB/rev.casl}
1042 @node DIVA, DIVL, ABS, CASL2LIB Manual
1043 @section @kbd{DIVA} - @file{diva.casl}
1046 @unnumberedsubsec 入力
1055 @unnumberedsubsec 出力
1077 商が負数(-32767から-1)の場合、1
1083 @unnumberedsubsec 依存する副プログラム
1088 @unnumberedsubsec 使用例
1090 @verbatiminclude casl2lib/diva/call_diva.casl
1094 $ @kbd{casl2 call_diva.casl $CASL2LIB/diva.casl $CASL2LIB/divl.casl \
1095 $CASL2LIB/outa.casl $CASL2LIB/abs.casl $CASL2LIB/rev.casl}
1100 @node DIVL, INL, DIVA, CASL2LIB Manual
1101 @section @kbd{DIVL} - @file{divl.casl}
1104 @unnumberedsubsec 入力
1113 @unnumberedsubsec 出力
1131 @unnumberedsubsec 依存する副プログラム
1134 @unnumberedsubsec 使用例
1136 @verbatiminclude casl2lib/divl/call_divl.casl
1140 $ @kbd{casl2 call_divl.casl $CASL2LIB/divl.casl $CASL2LIB/outl.casl \
1146 @node INL, L2STR, DIVL, CASL2LIB Manual
1147 @section @kbd{INL} - @file{inl.casl}
1151 @unnumberedsubsec 入力
1157 @unnumberedsubsec 出力
1163 文字列の長さ。数字以外が入力された場合は@code{#FFFF}
1166 @unnumberedsubsec 依存する副プログラム
1172 @unnumberedsubsec 使用例
1173 次のコマンドを実行すると、数値の入力が受け付けられ、入力された数値が表示される。
1176 @verbatiminclude casl2lib/inl/call_inl.casl
1180 $ @kbd{casl2 -M1024 call_inl.casl $CASL2LIB/inl.casl $CASL2LIB/str2l.casl $CASL2LIB/mull.casl \
1181 $CASL2LIB/outl.casl $CASL2LIB/divl.casl $CASL2LIB/rev.casl}
1184 @node L2STR, MAX, INL, CASL2LIB Manual
1185 @section @kbd{L2STR} - @file{l2str.casl}
1189 @unnumberedsubsec 入力
1198 @unnumberedsubsec 出力
1204 @unnumberedsubsec 依存する副プログラム
1210 @node MAX, MINIM, L2STR, CASL2LIB Manual
1211 @section @kbd{MAX} - @file{max.casl}
1213 連続した複数のWORDを符号付き整数とみなして最大値を返す
1215 @unnumberedsubsec 入力
1224 @unnumberedsubsec 出力
1230 @unnumberedsubsec 依存する副プログラム
1233 @node MINIM, MULA, MAX, CASL2LIB Manual
1234 @section @kbd{MINIM} - @file{minim.casl}
1236 連続した複数のWORDを符号付き整数とみなして最小値を返す
1238 @unnumberedsubsec 入力
1247 @unnumberedsubsec 出力
1253 @unnumberedsubsec 依存する副プログラム
1256 @node MULA, MULL, MINIM, CASL2LIB Manual
1257 @section @kbd{MULA} - @file{mula.casl}
1259 @node MULL, OUTA, MULA, CASL2LIB Manual
1260 @section @kbd{MULL} - @file{mull.casl}
1262 @node OUTA, OUTB, MULL, CASL2LIB Manual
1263 @section @kbd{OUTA} - @file{outa.casl}
1265 @node OUTB, OUTD_Q15, OUTA, CASL2LIB Manual
1266 @section @kbd{OUTB} - @file{outb.casl}
1268 @node OUTD_Q15, OUTL, OUTB, CASL2LIB Manual
1269 @section @kbd{OUTD_Q15} - @file{outd_q15.casl}
1271 @node OUTL, REV, OUTD_Q15, CASL2LIB Manual
1272 @section @kbd{OUTL} - @file{outl.casl}
1274 @node REV, STR2L, OUTL, CASL2LIB Manual
1275 @section @kbd{REV} - @file{rev.casl}
1277 @node STR2L, , REV, CASL2LIB Manual
1278 @section @kbd{STR2L} - @file{str2l.casl}