\input texinfo @c -*-texinfo-*-
@c %**start of header
+@ifnottex
+@documentlanguage ja_JP
+@end ifnottex
@setfilename yacasl2.info
-@settitle YACASL2 - Linux上のCASL II処理系
+@documentencoding UTF-8
+@settitle YACASL2 - CASL II処理システム
@firstparagraphindent insert
@paragraphindent 1
+@ifhtml
+@exampleindent 0
+@end ifhtml
@c %**end of header
@copying
-Copyright @copyright{} 2010 j8takagi
+Copyright @copyright{} 2010-2011 j8takagi
@end copying
-@exampleindent 2
-
@dircategory Basics
@direntry
* YACASL2: (yacasl2).
@titlepage
@title YACASL2
-@subtitle Linux上のCASL II処理系
+@subtitle UNIX/Linuxのコマンドラインインターフェイスで動作するCASL II処理システム
@author j8takagi
@insertcopying
@end titlepage
-@ifnottex
-@node Top
-@end ifnottex
+@ifinfo
+@node Top, About, (dir), (dir)
@menu
-* YACASL2の概要::
-* YACASL2のインストール::
-* YACASL2の使い方::
+* About:: YACASL2の概要
+* Install:: YACASL2のインストール
+* Usage:: YACASL2の使い方
+* Command Manual:: YACASL2コマンドマニュアル
+* CASL2LIB Manual:: CASL2LIBマニュアル
+
+@detailmenu
+ --- The Detailed Node Listing ---
+
+
+
+* About:: YACASL2の概要
+* Install:: YACASL2のインストール
+* Usage:: YACASL2の使い方
+* Command Manual:: YACASL2コマンドマニュアル
+* CASL2LIB Manual:: CASL2LIBマニュアル
+
+YACASL2のインストール
+
+* Download:: YACASL2ファイルのダウンロード
+* Verify:: YACASL2ファイルの検証
+* Expand:: YACASL2ファイルの展開
+* Build:: @kbd{casl2}、@kbd{comet2}、@kbd{dumpword}のビルド
+* Simple Test:: @kbd{casl2}の実行テスト
+* Detail Test:: 詳細なテスト
+* Environment:: 環境変数の設定
+
+YACASL2の使い方
+
+* Simple Output:: 実行結果の出力だけを表示
+* Assemble Result:: アセンブル結果の確認
+* Register and Memory:: 実行時のレジスタとメモリを表示
+* Only Assemble:: アセンブルと実行を別に行う
+* Analyze Word:: 1語の解析
+* Use CASL2LIB:: CASL2ライブラリの使用
+
+実行時のレジスタとメモリを表示
+
+* Register Specify:: 特定のレジスタを表示
+* Ending Value:: プログラム終了時の値を表示
+* Step Count:: プログラムのステップ数を表示
+
+YACASL2コマンドマニュアル
+
+* casl2:: @kbd{casl2}
+* comet2:: @kbd{comet2}
+* dumpword:: @kbd{dumpword}
+
+CASL2LIBマニュアル
+
+* ABS:: @kbd{ABS} - @file{abs.casl}
+* DIVA:: @kbd{DIVA} - @file{diva.casl}
+* DIVL:: @kbd{DIVL} - @file{divl.casl}
+* INL:: @kbd{INL} - @file{inl.casl}
+* L2STR:: @kbd{L2STR} - @file{l2str.casl}
+* MAX:: @kbd{MAX} - @file{max.casl}
+* MINIM:: @kbd{MINIM} - @file{minim.casl}
+* MULA:: @kbd{MULA} - @file{mula.casl}
+* MULL:: @kbd{MULL} - @file{mull.casl}
+* OUTA:: @kbd{OUTA} - @file{outa.casl}
+* OUTB:: @kbd{OUTB} - @file{outb.casl}
+* OUTD_Q15:: @kbd{OUTD_Q15} - @file{outd_q15.casl}
+* OUTL:: @kbd{OUTL} - @file{outl.casl}
+* REV:: @kbd{REV} - @file{rev.casl}
+* STR2L:: @kbd{STR2L} - @file{str2l.casl}
+
+@end detailmenu
+@end menu
+
+@end ifinfo
+
+@ifnotinfo
+@node Top, About
+
+@menu
+* About:: YACASL2の概要
+* Install:: YACASL2のインストール
+* Usage:: YACASL2の使い方
+* Command Manual:: YACASL2コマンドマニュアル
+* CASL2LIB Manual:: CASL2LIBマニュアル
@end menu
@contents
+@end ifnotinfo
-@node YACASL2の概要, YACASL2のインストール, Top, Top
+@node About, Install, Top, Top
@chapter YACASL2の概要
-YACASL2は、Linux上で動作するオープンソースのCASL II処理系です。CASL IIは情報処理試験で用いられるアセンブラ言語で、次の資料により仕様が公開されています。
+YACASL2は、UNIX/Linuxのコマンドラインインターフェイスで動作するオープンソースのCASL II処理システムです。CASL IIは情報処理試験で用いられるアセンブラ言語で、次の資料により仕様が公開されています。
+@iftex
+@cartouche
+@end iftex
@quotation
@uref{http://www.jitec.ipa.go.jp/1_00topic/topic_20081027_hani_yougo.pdf, 試験で使用する情報処理用語・プログラム言語など(2008年10月版)}[PDFファイル]
別紙 1 アセンブラ言語の仕様
@end quotation
+@iftex
+@end cartouche
+@end iftex
YACASL2は、CASL IIアセンブラ言語で記述されたファイルをアセンブルし、仮想マシンCOMET II上で実行します。アセンブルと実行は、連続で行うことも別々に行うことも可能です。
YACASL2の動作はCASL IIの仕様に準拠しているため、情報処理試験の問題をはじめ各種参考書やサイトに記載されたCASL IIのプログラムをそのままアセンブルして実行できます。また、本パッケージ中にCASL IIのサンプルプログラムが多数収録されています。
-YACASL2ã\81¯ã\80\81ã\80\8cã\81µã\81¤ã\81\86ã\81®å\87¦ç\90\86ç³»ã\80\8dã\81¨ã\81\97ã\81¦å\8b\95ä½\9cã\81\97ã\81¾ã\81\99ã\80\82ã\81»ã\81\8bã\81®å¤\9aã\81\8fã\81®CASL IIã\82¨ã\83\9fã\83¥ã\83¬ã\83¼ã\82¿ã\83¼ã\81¨é\81\95ã\81\84ã\80\81ã\83\87ã\83\90ã\83\83ã\82¬ã\83¼ã\81¨ã\81\97ã\81¦å\8b\95ä½\9cã\81\97ã\81\9fã\82\8aã\80\81ã\82³ã\83³ã\83\94ã\83¥ã\83¼ã\82¿ã\83¼内部の模式図を表示したりすることはありません。そのかわり、YACASL2は、次のような動作内容をすべてテキストで出力します。
+YACASL2ã\81¯ã\80\81ã\80\8cã\81µã\81¤ã\81\86ã\81®å\87¦ç\90\86ç³»ã\80\8dã\81¨ã\81\97ã\81¦å\8b\95ä½\9cã\81\97ã\81¾ã\81\99ã\80\82ã\81»ã\81\8bã\81®å¤\9aã\81\8fã\81®CASL IIã\82¨ã\83\9fã\83¥ã\83¬ã\83¼ã\82¿ã\81¨é\81\95ã\81\84ã\80\81ã\83\87ã\83\90ã\83\83ã\82¬ã\81¨ã\81\97ã\81¦å\8b\95ä½\9cã\81\97ã\81\9fã\82\8aã\80\81ã\82³ã\83³ã\83\94ã\83¥ã\83¼ã\82¿内部の模式図を表示したりすることはありません。そのかわり、YACASL2は、次のような動作内容をすべてテキストで出力します。
@itemize @bullet
実行時のメモリの内容
@end itemize
-出力された動作内容は、GNU/Linuxのさまざまなツール、たとえば@command{cat}、@command{less}、@command{grep}、@command{wc}などを使って解析できます。
+出力された動作内容は、GNU/Linuxのさまざまなツール、たとえば、@kbd{cat} @kbd{less} @kbd{grep} @kbd{wc}などを使って解析できます。
+
+YACASL2の操作は、端末を開いてコマンドを入力・実行することで行います。
@unnumberedsec 要件
-YACASL2は、Linux上で動作します。現在動作を確認しているのは、次のディストリビューションです。
+YACASL2は、LinuxやMac OS Xなど、UNIX系のOS上で動作します。現在動作を確認しているのは、次の環境です。
@itemize @bullet
@item
-Ubuntu Linux 9.04 / 8.04
+Ubuntu Linux 10.04
@item
-Vine Linux 4.2
+Vine Linux 5.2
+
+@item
+Mac OS X 10.6.5
@end itemize
-インストール時に、@command{tar}、@command{gcc}、@command{make}が必要です。
+インストール時に、@kbd{tar} @kbd{gcc} @kbd{make}が必要です。Linuxでは多くの場合、標準でインストールされています。Mac OS Xの場合、@code{Xcode}をインストールするといっしょにインストールされます。
-@node YACASL2のインストール, YACASL2の使い方, YACASL2の概要, Top
+@node Install, Usage, About, Top
@chapter YACASL2のインストール
YACASL2をインストールするには、Linux上で次の作業をします。
-@enumerate
-
-@item
-@file{yacasl2.tar.gz}のダウンロード
-
-@item
-@file{yacasl2.tar.gz}の検証
-
-@item
-@file{yacasl2.tar.gz}の展開
-
-@item
-@command{casl2}、@command{comet2}、@command{dumpword}のビルド
-
-@item
-@command{casl2}の実行テスト
-
-@item
-詳細なテスト
-
-@item
-環境変数@var{PATH}の設定
-@end enumerate
-
-以下の操作は、端末を開きコマンドを実行します。
-
-@section @file{yacasl2.tar.gz}のダウンロード
-(詳細未定)
+@menu
+* Download:: YACASL2ファイルのダウンロード
+* Verify:: YACASL2ファイルの検証
+* Expand:: YACASL2ファイルの展開
+* Build:: @kbd{casl2} @kbd{comet2} @kbd{dumpword}のビルド
+* Simple Test:: @kbd{casl2}の実行テスト
+* Detail Test:: 詳細なテスト
+* Environment:: 環境変数の設定
+@end menu
-@cartouche
-@example
-$ @command{cd}
-$ @command{wget somewhere/yacasl2.tar.gz}
-$ @command{wget somewhere/yacasl2.tar.gz.md5sum}
-@end example
-@end cartouche
+@node Download, Verify, Install, Install
+@section YACASL2ファイルのダウンロード
-@section @file{yacasl2.tar.gz}の検証
+@uref{http://www.j8takagi.net/yacasl2/, YACASL2のサイト}または@uref{http://github.com/j8takagi/YACASL2/downloads/, githubのダウンロードページ}から最新版の@file{tar.gz}ファイルをダウンロードします。
-(PGPを使った検証も導入予定)
+@node Verify, Expand, Download, Install
+@section YACASL2ファイルの検証
-ダウンロードが完了したら、@command{md5sum}と@command{diff}で正しくファイルがダウンロードができているかを検証します。
+ダウンロードが完了したら、@kbd{md5sum}と@kbd{diff}で正しくファイルがダウンロードができているかを検証します。
-@cartouche
@example
-$ @command{md5sum yacasl2.tar.gz | diff -s yacasl2.tar.gz.md5sum -}
+$ @kbd{openssl md5sum yacasl2.tar.gz | diff -s yacasl2.tar.gz.md5sum -}
Files yacasl2.tar.gz.md5sum and - are identical
@end example
-@end cartouche
-@section @file{yacasl2.tar.gz}の展開
+@node Expand, Build, Verify, Install
+@section YACASL2ファイルの展開
-@file{yacasl2.tar.gz}をダウンロードしたら、次のコマンドで展開します。
+YACASL2ファイルをダウンロードしたら、次のコマンドで展開します。
-@cartouche
@example
-$ @command{tar xvzf yacasl2.tar.gz}
+$ @kbd{tar xvzf yacasl2.tar.gz}
@end example
-@end cartouche
-@section @command{casl2}、@command{comet2}、@command{dumpword}のビルド
+@node Build, Simple Test, Expand, Install
+@section @kbd{casl2} @kbd{comet2} @kbd{dumpword}のビルド
-展開したら、次のコマンドで@command{casl2}、@command{comet2}、@command{dumpword}をビルドします。
+展開したら、次のコマンドで@kbd{casl2} @kbd{comet2} @kbd{dumpword}をビルドします。
-@cartouche
@example
-$ @command{cd yacasl2}
-$ @command{make}
+$ @kbd{cd yacasl2}
+$ @kbd{make}
make -C src
make[1]: Entering directory ‘/home/kazubito/yacasl2/src’
gcc -c -g -Wall -I ../include casl2.c
gcc -g -Wall -I ../include -o ../dumpword dumpword.o word.o cerr.o
make[1]: Leaving directory ‘/home/kazubito/yacasl2/src’
@end example
-@end cartouche
-@section @command{casl2}の実行テスト
+@node Simple Test, Detail Test, Build, Install
+@section @kbd{casl2}の実行テスト
ビルドしたら、次のコマンドが正常に実行できるかを確認します。
正常に実行された場合は、「Hello, World!」と表示されます。
-@cartouche
@example
-$ @command{./casl2 as/hello.casl}
+$ @kbd{./casl2 as/hello.casl}
Hello, World!
@end example
-@end cartouche
+@node Detail Test, Environment, Simple Test, Install
@section 詳細なテスト
次のコマンドを実行すると、正常にビルドできているかどうかを詳細にテストできます。
-@cartouche
@example
-$ @command{make check}
-194 / 194 tests passed. Details in /home/kazubito/yacasl2/test/integra
+$ @kbd{make check}
+195 / 195 tests passed. Details in /home/username/yacasl2/test/integra
tion/casl2/Test.log
All tests are succeded.
-149 / 149 tests passed. Details in /home/kazubito/yacasl2/test/integra
+149 / 149 tests passed. Details in /home/username/yacasl2/test/integra
tion/comet2/Test.log
All tests are succeded.
-4 / 4 tests passed. Details in /home/kazubito/yacasl2/test/integration
+4 / 4 tests passed. Details in /home/username/yacasl2/test/integration
/dumpword/Test.log
All tests are succeded.
@end example
-@end cartouche
-@section 環境変数@var{PATH}の設定
+@node Environment, , Detail Test, Install
+@section 環境変数の設定
+
+環境変数@code{PATH}や@code{CASL2LIB}を設定することで、YACASL2が使いやすくなります。環境変数は、使っているシェルを確認してから設定します。
-環境変数@var{PATH}にYACASL2のディレクトリーを追加すると、どのディレクトリーでも@command{casl2}、@command{comet2}、@command{dumpword}を実行できます。
+@unnumberedsubsec シェルの確認
環境変数の設定方法は使っているシェルによって異なります。シェルは、次のコマンドで確認できます。
-@cartouche
@example
-$ @command{echo $SHELL}
+$ @kbd{echo $SHELL}
/bin/bash
@end example
-@end cartouche
-現在もっとも多く使われているシェルは、BASHでしょう。BASHでは、次のコマンドを実行すると環境変数@var{PATH}にYACASL2のディレクトリーが追加されます。
+現在もっとも多く使われているシェルは、BASHでしょう。以下、BASHでの設定方法を説明します。
+
+@unnumberedsubsec @code{PATH}にYACASL2のディレクトリを追加
+
+@code{PATH}にYACASL2のディレクトリを追加すると、どのディレクトリでもディレクトリを指定せずに@kbd{casl2}、@kbd{comet2}、@kbd{dumpword}を実行できます。YACASL2をホームディレクトリ@code{~}にインストールしたときは、次のコマンドで設定できます。
-@cartouche
@example
-$ @command{PATH=$PATH:~/yacasl2 && export PATH}
+$ @kbd{PATH=$PATH:~/yacasl2 && export PATH}
@end example
-@end cartouche
-シェルの初期設定ファイルに上記のコマンドを追加すれば、今後ログインした後は自動的にどのディレクトリーでも @command{casl2}、@command{comet2}、@command{dumpword}を実行できます。BASHではホームディレクトリーにある@file{.bashrc}が初期設定ファイルのため、次のコマンドで追加されます。
+環境変数の設定は、シェルの初期設定ファイルに追加することでログインしたあと自動的に反映されるようになります。BASHではホームディレクトリにある@file{.bashrc}が初期設定ファイルです。次のコマンドで追加できます。
-@cartouche
@example
-$ @command{echo ’PATH=$PATH:~/yacasl2 && export PATH’ >>~/.bashrc}
+$ @kbd{echo ’PATH=$PATH:~/yacasl2 && export PATH’ >>~/.bashrc}
+@end example
+
+
+@unnumberedsubsec @code{CASL2LIB}の設定
+
+環境変数@code{CASL2LIB}を設定しておけば、後述するCASL2LIBを利用するときの手間が小さくなります。YACASL2をホームディレクトリ@code{~}にインストールしたときは、次のコマンドで設定できます。
+
+@example
+$ @kbd{CASL2LIB=~/yacasl2/as/casl2lib && export CASL2LIB}
@end example
-@end cartouche
-@node YACASL2の使い方,, YACASL2のインストール, Top
-@chapter YACASL2 の使い方
-YACASL2 は、テキストファイルに記述されたCASLプログラムを処理します。以下の例で用いられるCASLプログラムのファイルは、テキストエディタなどで作成してください。また、インストールしたディレクトリーの中にある@file{as}ディレクトリーからコピーして作成することもできます。
+BASHの初期設定ファイル@file{.bashrc}には、次のコマンドで追加できます。
+@example
+$ @kbd{ echo 'CASL2LIB=~/yacasl2/as/casl2lib && export CASL2LIB' >>~/.bashrc}
+@end example
+
+
+@node Usage, Command Manual, Install, Top
+@chapter YACASL2の使い方
+YACASL2 は、テキストファイルに記述されたCASLプログラムを処理します。以下の例で用いられるCASLプログラムのファイルは、テキストエディタなどで作成してください。また、インストールしたディレクトリの中にある@file{as}ディレクトリからコピーして作成することもできます。
+
+
+@menu
+* Simple Output:: 実行結果の出力だけを表示
+* Assemble Result:: アセンブル結果の確認
+* Register and Memory:: 実行時のレジスタとメモリを表示
+* Only Assemble:: アセンブルと実行を別に行う
+* Analyze Word:: 1語の解析
+* Use CASL2LIB:: CASL2ライブラリの使用
+@end menu
+
+@node Simple Output, Assemble Result, Usage, Usage
@section 実行結果の出力だけを表示
インストール時にコマンド実行の確認に使った@file{hello.casl}は、次のような内容です。CASL IIのマクロ命令OUTは、文字列を出力します。
-@cartouche
@example
-$ @command{cat hello.casl}
+$ @kbd{cat hello.casl}
MAIN START
OUT OBUF,LEN
RET
-OBUF DC ’Hello, World!’
+OBUF DC 'Hello, World!'
LEN DC 13
END
@end example
-@end cartouche
次のコマンドを実行すると、CASL II のアセンブルと仮想マシン COMET II 上での実行が連続で行われ、文字列が出力されます。
-@cartouche
@example
-$ @command{casl2 hello.casl}
+$ @kbd{casl2 hello.casl}
Hello, World!
@end example
-@end cartouche
@file{addl.casl}は、3と1の和を求めます。
-@cartouche
@example
-$ @command{cat addl.casl}
+$ @kbd{cat addl.casl}
;;; ADDL r,adr
MAIN START
LD GR1,A
B DC 1
END
@end example
-@end cartouche
このプログラムには出力命令がないため、オプションなしで実行した場合には結果が出力されません。
-@cartouche
@example
-$ @command{casl2 addl.casl}
+$ @kbd{casl2 addl.casl}
$
@end example
-@end cartouche
-
-実行内容を確認するには、後述のようにCPU 内にあるレジスターやメモリーの内容を表示するか、結果を出力するための処理を追加する必要があります。
-@file{sum_10.casl}は、1から10までの整数の和を求めます。
-
-@cartouche
-@example
-$ @command{cat sum_10.casl}
-;;; sum_10.casl
-;;; 出力 GR0: 1から10までの整数をすべて加算した値
-MAIN START
- PUSH 0,GR1
- LAD GR0,0 ; GR0を初期化
- LD GR1,FST ; GR1に初項を転送
-LOOP ADDL GR0,GR1 ; ループ先頭
- ADDL GR1,STEP ; GR1 <- GR1 + 公差
- CPL GR1,LST ; GR1が末項より大きい場合は終了
- JPL FIN ; ↓
- JUMP LOOP ; ループ終端
-FIN POP GR1
- RET
-FST DC 1 ; 初項
-LST DC 10 ; 末項
-STEP DC 1 ; 公差
- END
-@end example
-@end cartouche
-
-このプログラムも、オプションなしで実行した場合には結果が出力されません。
-@cartouche
-@example
-$ @command{casl2 sum_10.casl}
-$
-@end example
-@end cartouche
+実行内容を確認するには、後述のようにCPU 内にあるレジスタやメモリの内容を表示するか、結果を出力するための処理を追加する必要があります。
+@node Assemble Result, Register and Memory, Simple Output, Usage
@section アセンブル結果の確認
+
casl2の処理途中で行われるアセンブルの結果を表示するには、オプション@option{-a}を指定します。また、ラベルとアドレスの対応表を表示するには、オプション@option{-l}を指定します。
次のコマンドでは@file{hello.casl}の、ラベルとアドレスの対応表と、アセンブル結果と、実行結果が表示されます。OUTはアセンブラ命令で複数の機械語命令で構成されているため、命令行1行に対して、複数行のコードが生成されます。
-@cartouche
@example
-$ @command{casl2 -a -l hello.casl}
+$ @kbd{casl2 -a -l hello.casl}
Assemble hello.casl (0)
hello.casl: 6: END
Hello, World!
@end example
-@end cartouche
@file{addl.casl}の、ラベルとアドレスの対応表と、アセンブル結果は、次のようになります。
-@cartouche
@example
-$ @command{casl2 -a -l addl.casl}
+$ @kbd{casl2 -a -l addl.casl}
Assemble addl.casl (0)
#0006 #0001
addl.casl: 8: END
@end example
-@end cartouche
なお、オプション@option{-A}を指定すると、アセンブル結果が表示される時点で処理が終了します。仮想マシンCOMET II での実行は行われません。
-@section 実行時のレジスターとメモリーを表示
-YACASL2では実行中のCPUのレジスターとメモリーの内容をそれぞれ、@option{-t}と@option{-d}を指定することで表示できます。
+@node Register and Memory, Only Assemble, Assemble Result, Usage
+@section 実行時のレジスタとメモリを表示
-また、@option{-M}で、仮想マシンCOMET II のメモリー容量を語(16 ビット)単位で指定できます。小さいプログラムを実行するときは、メモリー容量を小さくすれば結果が見やすくなります。
+YACASL2では実行中のCPUのレジスタとメモリの内容をそれぞれ、@option{-t}と@option{-d}を指定することで表示できます。
-@file{addl.casl}に必要なメモリー容量は8語のため、次のようにCPUのレジスターとメモリーの内容を表示できます。
+また、@option{-M}で、仮想マシンCOMET II のメモリ容量を語(16 ビット)単位で指定できます。小さいプログラムを実行するときは、メモリ容量を小さくすれば結果が見やすくなります。
+
+@menu
+* Register Specify:: 特定のレジスタを表示
+* Ending Value:: プログラム終了時の値を表示
+* Step Count:: プログラムのステップ数を表示
+@end menu
+
+@file{addl.casl}に必要なメモリ容量は8語のため、次のようにCPUのレジスタとメモリの内容を表示できます。
-@cartouche
@example
-$ @command{casl2 -t -d -M8 addl.casl | less}
+$ @kbd{casl2 -t -d -M8 addl.casl | less}
Assemble addl.casl (0)
#0004: adr : 0000 0001 0002 0003 0004 0005 0006 0007
#0004: 0000: 1010 0005 2210 0006 8100 0003 0001 0000
@end example
-@end cartouche
-@subsection 特定のレジスターを表示
+@node Register Specify, Ending Value, Register and Memory, Register and Memory
+@subsection 特定のレジスタを表示
-@file{addl.casl}ã\81®ã\83¬ã\82¸ã\82¹ã\82¿ã\83¼ã\82\84ã\83¡ã\83¢ã\83ªã\83¼ã\81®ä¸ã\81§ã\80\81å®\9fè¡\8cä¸ã\81«å\80¤ã\81\8cå¤\89å\8c\96ã\81\97ã\81¦ã\81\84ã\82\8bã\81®ã\81¯GR1ã\81 ã\81\91ã\81§ã\81\99ã\80\82ã\81\93ã\81\86ã\81\97ã\81\9få ´å\90\88ã\81¯ã\80\81@command{grep}を使って表示される内容を絞り込むことで動作を検証しやすくなります。
+@file{addl.casl}ã\81®ã\83¬ã\82¸ã\82¹ã\82¿ã\82\84ã\83¡ã\83¢ã\83ªã\81®ä¸ã\81§ã\80\81å®\9fè¡\8cä¸ã\81«å\80¤ã\81\8cå¤\89å\8c\96ã\81\97ã\81¦ã\81\84ã\82\8bã\81®ã\81¯GR1ã\81 ã\81\91ã\81§ã\81\99ã\80\82ã\81\93ã\81\86ã\81\97ã\81\9få ´å\90\88ã\81¯ã\80\81@kbd{grep}を使って表示される内容を絞り込むことで動作を検証しやすくなります。
-@cartouche
@example
-$ @command{casl2 -t addl.casl | grep 'GR1:'}
+$ @kbd{casl2 -t addl.casl | grep 'GR1:'}
#0000: GR1: 0 = #0000 = 0000000000000000
#0002: GR1: 3 = #0003 = 0000000000000011
#0004: GR1: 4 = #0004 = 0000000000000100
@end example
-@end cartouche
この内容を、先に出力したアセンブル結果と引き比べてください。
次の表のように、PRとGR1、命令行が対応していることがわかります。
@tab @code{ADDL GR1,B}
@end multitable
+@node Ending Value, Step Count, Register Specify, Register and Memory
@subsection プログラム終了時の値を表示
-@command{grep}と@command{tail}を組み合わせれば、プログラム終了時の値を表示できます。
+@kbd{grep}と@kbd{tail}を組み合わせれば、プログラム終了時の値を表示できます。
+
+@file{addl.casl}でプログラム終了時の値を確認するには、次のようにします。
-@cartouche
@example
-$ @command{casl2 -t addl.casl | grep 'GR1:' | tail -1}
+$ @kbd{casl2 -t addl.casl | grep 'GR1:' | tail -1}
#0004: GR1: 4 = #0004 = 0000000000000100
@end example
-@end cartouche
-@cartouche
+@file{sum_10.casl}は、1から10までの整数の和を求めます。
+
@example
-$ @command{casl2 -t sum_10.casl | grep 'GR0:' | tail -1}
+$ @kbd{cat sum_10.casl}
+;;; sum_10.casl
+;;; 出力 GR0: 1から10までの整数をすべて加算した値
+MAIN START
+ PUSH 0,GR1
+ LAD GR0,0 ; GR0を初期化
+ LD GR1,FST ; GR1に初項を転送
+LOOP ADDL GR0,GR1 ; ループ先頭
+ ADDL GR1,STEP ; GR1 <- GR1 + 公差
+ CPL GR1,LST ; GR1が末項より大きい場合は終了
+ JPL FIN ; ↓
+ JUMP LOOP ; ループ終端
+FIN POP GR1
+ RET
+FST DC 1 ; 初項
+LST DC 10 ; 末項
+STEP DC 1 ; 公差
+ END
+@end example
+
+@file{sum_10.casl}でファイル終了時の値を確認するには、次のようにします。
+
+@example
+$ @kbd{casl2 -t sum_10.casl | grep 'GR0:' | tail -1}
#0010: GR0: 55 = #0037 = 0000000000110111 = '7'
@end example
-@end cartouche
+@node Step Count, , Ending Value, Register and Memory
@subsection プログラムのステップ数を表示
-@command{grep}と@command{wc}を組み合わせれば、プログラムのステップ数を表示できます。
+@kbd{grep}と@kbd{wc}を組み合わせれば、プログラムのステップ数を表示できます。
-@cartouche
@example
-$ @command{casl2 -t hello.casl | grep 'GR1:' | wc -l}
+$ @kbd{casl2 -t hello.casl | grep 'GR1:' | wc -l}
11
@end example
-@end cartouche
-@cartouche
@example
-$ @command{casl2 -t addl.casl | grep 'GR1:' | wc -l}
+$ @kbd{casl2 -t addl.casl | grep 'GR1:' | wc -l}
3
@end example
-@end cartouche
@file{sum_10.casl}はプログラム内にループがあるため、ステップ数が大きくなります。
-@cartouche
@example
-$ @command{casl2 -t sum_10.casl | grep 'GR0:' | wc -l}
+$ @kbd{casl2 -t sum_10.casl | grep 'GR0:' | wc -l}
54
@end example
-@end cartouche
+@node Only Assemble, Analyze Word, Register and Memory, Usage
@section アセンブルと実行を別に行う
-@command{casl2}に@option{-O}@file{ファイル名}を指定すると、オブジェクトファイルを作成できます。
+@kbd{casl2}に@option{-O}@file{ファイル名}を指定すると、オブジェクトファイルを作成できます。
-@cartouche
@example
-$ @command{casl2 -Ohello.o hello.casl}
+$ @kbd{casl2 -Ohello.o hello.casl}
@end example
-@end cartouche
-作成されたオブジェクトファイルの内容は、@command{od}を使って確認できます。テキストファイルではないため、@command{cat}などでは確認できません。
+作成されたオブジェクトファイルの内容は、@kbd{od}を使って確認できます。テキストファイルではないため、@kbd{cat}などでは確認できません。
-@cartouche
@example
-$ @command{od -t x2 hello.o}
+$ @kbd{od -t x2 hello.o}
0000000 7001 0000 7002 0000 1210 0013 1220 0020
0000020 f000 0002 1210 0021 1220 0022 f000 0002
0000040 7120 7110 8100 0048 0065 006c 006c 006f
0000100 000d 000a 0001
0000106
@end example
-@end cartouche
-オブジェクトファイルの実行には、@command{comet2}を使います。
+オブジェクトファイルの実行には、@kbd{comet2}を使います。
-@cartouche
@example
-$ @command{comet2 hello.o}
+$ @kbd{comet2 hello.o}
Hello, World!
@end example
-@end cartouche
-@section 1語を解析する
+@node Analyze Word, Use CASL2LIB, Only Assemble, Usage
+@section 1語の解析
CASL IIでは、1語(16ビット)を単位としてデータが処理されます。
-@command{dumpword}は、指定した1語を10進数、16進数、2進数で表示します。
+@kbd{dumpword}は、指定した1語を10進数、16進数、2進数で表示します。
-@cartouche
@example
-$ @command{dumpword 72}
+$ @kbd{dumpword 72}
72: 72 = #0048 = 0000000001001000 = 'H'
@end example
-@end cartouche
-マイナスの数は、次のように指定します。
+マイナスの数は、次のように@kbd{--}を付けて指定します。
-@cartouche
@example
-$ @command{dumpword} @verb{|--|} @command{-72}
+$ @kbd{dumpword -- -72}
-72: -72 = #FFB8 = 1111111110111000
@end example
-@end cartouche
-16é\80²æ\95°ã\81§æ\8c\87å®\9aã\81\99ã\82\8bå ´å\90\88ã\81¯ã\80\81次ã\81®ã\82\88ã\81\86ã\81«指定します。
+16é\80²æ\95°ã\81¯ã\80\81次ã\81®ã\82\88ã\81\86ã\81«æ¬¡ã\81®ã\82\88ã\81\86ã\81«@kbd{'}ã\81§å\9b²ã\81¿@kbd{#}ã\82\92ä»\98ã\81\91ã\81¦指定します。
-@cartouche
@example
-$ @command{dumpword '#0048'}
+$ @kbd{dumpword '#0048'}
#0048: 72 = #0048 = 0000000001001000 = 'H'
@end example
-@end cartouche
+
+@node Use CASL2LIB, , Analyze Word, Usage
+@section CASL2ライブラリの使用
+
+YACASL2の@file{as/casl2lib}ディレクトリには、CASL IIで記述されたライブラリファイルが格納されています。
+
+このフォルダには、たとえば次のようなプログラムが含まれています。
+
+@table @option
+@item OUTL
+@file{outl.casl}。GR1に格納された値を、0〜65535の数値として出力します。
+
+@item OUTA
+@file{outa.casl}。GR1に格納された値を、-32767〜32767の数値として出力します。
+
+@item MULL
+@file{mull.casl}。GR1とGR2に格納された値を0〜65535の整数と見なし、積をGR3に格納します。
+
+@item DIVL
+@file{divl.casl}。GR1とGR2に格納された値を0〜65535の整数と見なし、商をGR3、剰余をGR0に格納します。
+@end table
+
+@subsection 数値を出力する
+
+3と1の和を求める@file{addl.casl}で演算結果を出力するには、まず@file{addl.casl}を編集します。CASL IIの@kbd{CALL}命令で@kbd{OUTL}を副プログラムとして呼び出します。
+
+@example
+$ @kbd{cat addl_outl.casl}
+MAIN START
+ LD GR1,A
+ ADDL GR1,B
+ @emph{CALL OUTL}
+ RET
+A DC 3
+B DC 1
+ END
+@end example
+
+変更したら@kbd{casl2}を、複数のファイルを指定して実行します。
+
+@example
+$ @kbd{casl2 addl_outl.casl ~/yacasl2/as/casl2lib/outl.casl}
+4
+@end example
+
+@node Command Manual, CASL2LIB Manual, Usage, Top
+@chapter YACASL2コマンドマニュアル
+
+@cindex YACASL2コマンドマニュアル
+
+YACASL2のコマンドとオプションについて解説します。
+
+@menu
+* casl2:: @kbd{casl2}
+* comet2:: @kbd{comet2}
+* dumpword:: @kbd{dumpword}
+@end menu
+
+@node casl2, comet2, Command Manual, Command Manual
+@section @kbd{casl2}
+
+@pindex casl2
+@cindex casl2
+
+@kbd{casl2}は、引数として指定されたCASLファイルをアセンブルし、仮想マシンCOMET II上で実行します。CASLファイルは、アセンブラ言語CASL IIで記述されたテキストファイルです。引数が指定されない場合は、エラーメッセージを表示して終了します。
+
+@example
+$ @kbd{casl2 hello.casl}
+@end example
+
+複数のCASLファイルを指定することで、副プログラムを呼び出せます。
+
+@example
+$ @kbd{casl2 addl_outl.casl ~/yacasl2/as/casl2lib/outl.casl}
+@end example
+
+@unnumberedsubsec オプション
+
+@kbd{casl2}は、次のオプションを指定できます。
+
+@table @option
+@item -s
+@itemx --source
+CASLファイルの内容を表示します。
+
+@item -l
+@itemx --label
+ラベルの一覧を次の形式で表示します。表示後、ほかの作業を続行します。
+
+@example
+<プログラム名>.<ラベル名> ---> <アドレスの16進数表現>
+@end example
+
+@item -L
+@itemx --labelonly
+@option{-l}と同じ形式でラベルの一覧を表示します。表示後、ほかの作業は続行せず、終了します。
+
+@item -a
+@itemx --assembledetail
+アセンブル詳細結果を表示し、ほかの作業を続行します。
+
+@item -A
+@itemx --assembledetailonly
+アセンブル詳細結果を表示して終了します。
+
+@item -o<OBJECTFILE>
+@itemx --assembleout<OBJECTFILE>
+アセンブル結果をオブジェクトファイル@file{<OBJECTFILE>}に出力し、ほかの作業を続行します。出力されたオブジェクトファイルは、@kbd{comet2}で実行できます。オブジェクトファイルを指定しない場合、出力先は@file{a.o}です。オブジェクトファイルは1つだけ指定できます。
+
+@item -O[<OBJECTFILE>]
+@itemx --assembleoutonly[<OBJECTFILE>]
+アセンブル結果をオブジェクトファイル@file{<OBJECTFILE>}に出力し、終了します。出力されたオブジェクトファイルは、@kbd{comet2}で実行できます。オブジェクトファイルを指定しない場合、出力先は@file{a.o}です。オブジェクトファイルは1つだけ指定できます。
+
+@item -t
+@itemx --trace
+@itemx --tracearithmetic
+プログラム実行中のレジスタの値を次の形式で表示します。
+
+@example
+<PR値の16進数表現>: <レジスタ>: <値の10進数表現> =
+<値の16進数表現> = <値の2進数表現>[ ='文字']
+@end example
+
+@itemize
+@item
+@code{<PR値の16進数表現>}と@code{<レジスタ>}、@code{<値の16進数表現>}は、4けたの16進数で表されます。@code{<PR値の16進数表現>}と@code{<値の16進数表現>}には、先頭に@code{#}が付きます。範囲は@code{#0000}から@code{#FFFF}です
+
+@item
+@code{<値の10進数表現>}は符号の付いた10進数です。範囲は-32768から32767です。
+
+@item
+@code{<値の2進数表現>}は、16けたの2進数で表されます。範囲は、@code{0000000000000000}から@code{1111111111111111}です
+
+@item
+@code{[ ='文字']}は、レジストリの値が「文字の組」の範囲に含まれる場合に表示されます。
+@end itemize
+
+表示されるレジスタには、次の種類があります。
+
+@table @code
+@item GR0 GR1 GR2 GR3 GR4 GR5 GR6 GR7
+汎用レジスタ
+
+@item SP
+スタックポインタ
+
+@item PR
+プログラムレジスタ
+
+@item FR
+フラグレジスタ
+@end table
+
+例えば、次のように表示されます。
+
+@example
+#0002: GR1: 3 = #0003 = 0000000000000011
+@end example
+
+@item -T
+@itemx --tracelogical
+@option{-t}と同じように、プログラム実行中のレジスタの値を表示します。ただし、@option{-t}と異なり、@code{<値の10進数表現>}は符号の付かない10進数です。値の範囲は0から65535です。
+
+@item -d
+@itemx --dump
+メモリの内容をすべて表示します。
+
+@item -M <MEMORYSIZE>
+@itemx --memorysize <MEMORYSIZE>
+アセンブルおよび実行時のメモリサイズ@option{<MEMORYSIZE>}を0から65535の範囲で指定します。指定しない場合、512です。
+
+@item -C <CLOCKS>
+@itemx --clocks <CLOCKS>
+実行時のクロック周波数@option{<CLOCKS>}を0より大きい整数で指定します。指定しない場合、クロック周波数は5000000です。
+
+@item -h
+@itemx --help
+@kbd{casl2}の使用方法を表示して終了します。
+@end table
+
+@node comet2, dumpword, casl2, Command Manual
+@section @kbd{comet2}
+
+@pindex comet2
+@cindex comet2
+
+@kbd{comet2}は、引数として指定されたオブジェクトファイルを仮想マシンCOMET II上で実行します。オブジェクトファイルは、@kbd{casl}に@option{-o}または@option{-O}を指定して出力します。
+
+@example
+$ @kbd{comet2 hello.o}
+@end example
+
+引数で指定できるオブジェクトファイルは1つだけです。引数が指定されない場合は、エラーメッセージを表示して終了します。複数の引数を指定した場合、2番目以降の引数は無視されます。
+
+@unnumberedsubsec オプション
+
+@kbd{comet2}は、次のオプションを指定できます。
+
+@table @option
+
+@item -t
+@itemx --trace
+@itemx --tracearithmetic
+プログラム実行中のレジスタの値を次の形式で表示します。@code{<値の10進数表現>}は符号の付いた10進数です。範囲は-32768から32767です。
+
+@example
+<PR値の16進数表現>: <レジスタ>: <値の10進数表現> = <値の16進数表現> = <値の2進数表現>[ ='文字']
+@end example
+
+@itemize
+@item
+@code{<PR値の16進数表現>}と@code{<値の16進数表現>}は、先頭に@code{#}が付いた4けたの16進数で表されます。範囲は、@code{#0000}から@code{#FFFF}です
+
+@item
+@code{<値の2進数表現>}は、16けたの2進数で表されます。範囲は、@code{0000000000000000}から@code{1111111111111111}です
+
+@item
+@code{[ ='文字']}は、レジストリの値が「文字の組」の範囲に含まれる場合に表示されます。
+@end itemize
+
+例えば、次のように表示されます。
+
+@example
+#0002: GR1: 3 = #0003 = 0000000000000011
+@end example
+
+表示されるレジスタには、次の種類があります。
+
+@table @code
+@item GR0 GR1 GR2 GR3 GR4 GR5 GR6 GR7
+汎用レジスタ
+
+@item SP
+スタックポインタ
+
+@item PR
+プログラムレジスタ
+
+@item FR
+フラグレジスタ
+@end table
+
+@item -T
+@itemx --tracelogical
+@option{-t}と同じように、プログラム実行中のレジスタの値を表示します。ただし、@option{-t}と異なり、@code{<値の10進数表現>}は符号の付かない10進数です。値の範囲は0から65535です。
+
+@item -d
+@itemx --dump
+メモリの内容をすべて表示します。
+
+@item -M <MEMORYSIZE>
+@itemx --memorysize <MEMORYSIZE>
+実行時のメモリサイズ@option{<MEMORYSIZE>}を0から65535の範囲で指定します。指定しない場合、512です。
+
+@item -C <CLOCKS>
+@itemx --clocks <CLOCKS>
+実行時のクロック周波数@option{<CLOCKS>}を0より大きい整数で指定します。指定しない場合、5000000です。
+
+@item -h
+@itemx --help
+@kbd{comet2}の使用方法を表示して終了します。
+@end table
+
+@node dumpword, , comet2, Command Manual
+@section @kbd{dumpword}
+
+@pindex dumpword
+@cindex dumpword
+
+@kbd{dumpword}は、引数として指定された数値を、整数、#0000〜#FFFFの範囲の16進数、2進数で表示します。文字の組に該当する場合は、「 = 」のうしろに文字が表示されます。引数は、10進数または先頭に「#」の付いた16進数で指定します。表示される整数は、オプションにより符号付きか符号なしかを指定します。オプションなしの場合は符号付きです。整数の範囲は、符号付きの場合は-32768から32767、符号なしの場合は0から65535です。
+
+@example
+$ @kbd{dumpword 10}
+@end example
+
+引数で指定できる1つだけです。引数が指定されない場合は、使い方を表示して終了します。複数の引数を指定した場合、2番目以降の引数は無視されます。
+
+@unnumberedsubsec オプション
+
+@kbd{dumpword}は、次のオプションを指定できます。
+
+@table @option
+
+@item -a
+@itemx --arithmetic
+出力される整数の範囲を-32,768〜32,767にします。オプションなしの場合と同じです。
+
+@item -l
+@itemx --logical
+出力される整数の範囲を0〜65,535にします。
+
+@item -h
+@itemx --help
+@kbd{dumpword}の使用方法を表示して終了します。
+@end table
+
+@node CASL2LIB Manual, , Command Manual, Top
+@chapter CASL2LIBマニュアル
+
+@menu
+* ABS:: @kbd{ABS} - @file{abs.casl}
+* DIVA:: @kbd{DIVA} - @file{diva.casl}
+* DIVL:: @kbd{DIVL} - @file{divl.casl}
+* INL:: @kbd{INL} - @file{inl.casl}
+* L2STR:: @kbd{L2STR} - @file{l2str.casl}
+* MAX:: @kbd{MAX} - @file{max.casl}
+* MINIM:: @kbd{MINIM} - @file{minim.casl}
+* MULA:: @kbd{MULA} - @file{mula.casl}
+* MULL:: @kbd{MULL} - @file{mull.casl}
+* OUTA:: @kbd{OUTA} - @file{outa.casl}
+* OUTB:: @kbd{OUTB} - @file{outb.casl}
+* OUTD_Q15:: @kbd{OUTD_Q15} - @file{outd_q15.casl}
+* OUTL:: @kbd{OUTL} - @file{outl.casl}
+* REV:: @kbd{REV} - @file{rev.casl}
+* STR2L:: @kbd{STR2L} - @file{str2l.casl}
+@end menu
+
+@node ABS, DIVA, CASL2LIB Manual, CASL2LIB Manual
+@section @kbd{ABS} - @file{abs.casl}
+GR1を符号付き整数とみなし、絶対値に変換
+
+@unnumberedsubsec 入力
+@table @code
+@item GR1
+符号付き整数
+@end table
+
+@unnumberedsubsec 出力
+@table @code
+@item GR1
+入力された値の絶対値
+
+@item OF
+入力された値が-32768の場合、1
+
+@item SF
+入力された値が負数(-32767から-1)の場合、1
+@end table
+
+@unnumberedsubsec 依存する副プログラム
+なし
+
+@unnumberedsubsec 使用例
+@example
+@verbatiminclude casl2lib/abs/call_abs.casl
+@end example
+
+@example
+$ @kbd{casl2 call_abs.casl $CASL2LIB/abs.casl $CASL2LIB/outa.casl \
+ $CASL2LIB/divl.casl $CASL2LIB/rev.casl}
+1
+@end example
+
+@node DIVA, DIVL, ABS, CASL2LIB Manual
+@section @kbd{DIVA} - @file{diva.casl}
+符号付き整数の割算を筆算方式で行う
+
+@unnumberedsubsec 入力
+@table @code
+@item GR1
+被除数
+
+@item GR2
+除数
+@end table
+
+@unnumberedsubsec 出力
+@table @code
+@item GR0
+商
+
+@item GR3
+剰余
+
+@item OF
+次の場合、1
+@itemize
+@item
+GR2が0
+
+@item
+GR1が-32768
+
+@item
+GR2が-32768
+@end itemize
+
+@item SF
+商が負数(-32767から-1)の場合、1
+
+@item ZF
+商が0の場合、1
+@end table
+
+@unnumberedsubsec 依存する副プログラム
+@itemize
+@item @code{DIVL}
+@end itemize
+
+@unnumberedsubsec 使用例
+@example
+@verbatiminclude casl2lib/diva/call_diva.casl
+@end example
+
+@example
+$ @kbd{casl2 call_diva.casl $CASL2LIB/diva.casl $CASL2LIB/divl.casl \
+ $CASL2LIB/outa.casl $CASL2LIB/abs.casl $CASL2LIB/rev.casl}
+-128
+-127
+@end example
+
+@node DIVL, INL, DIVA, CASL2LIB Manual
+@section @kbd{DIVL} - @file{divl.casl}
+符号なし整数の割算を筆算方式で行う
+
+@unnumberedsubsec 入力
+@table @code
+@item GR1
+被除数
+
+@item GR2
+除数
+@end table
+
+@unnumberedsubsec 出力
+@table @code
+@item GR0
+商
+
+@item GR3
+剰余
+
+@item OF
+GR2が0の場合、1
+
+@item SF
+商が32768から65535の場合、1
+
+@item ZF
+商が0の場合、1
+@end table
+
+@unnumberedsubsec 依存する副プログラム
+なし
+
+@unnumberedsubsec 使用例
+@example
+@verbatiminclude casl2lib/divl/call_divl.casl
+@end example
+
+@example
+$ @kbd{casl2 call_divl.casl $CASL2LIB/divl.casl $CASL2LIB/outl.casl \
+ $CASL2LIB/rev.casl}
+256
+254
+@end example
+
+@node INL, L2STR, DIVL, CASL2LIB Manual
+@section @kbd{INL} - @file{inl.casl}
+
+符号なし整数の入力を受け付ける
+
+@unnumberedsubsec 入力
+@table @code
+@item 標準入力
+符号なし整数
+@end table
+
+@unnumberedsubsec 出力
+@table @code
+@item GR1
+入力された符号なし整数
+
+@item GR0
+文字列の長さ。数字以外が入力された場合は@code{#FFFF}
+@end table
+
+@unnumberedsubsec 依存する副プログラム
+@itemize
+@item
+@code{STR2L}
+@end itemize
+
+@unnumberedsubsec 使用例
+次のコマンドを実行すると、数値の入力が受け付けられ、入力された数値が表示される。
+
+@example
+@verbatiminclude casl2lib/inl/call_inl.casl
+@end example
+
+@example
+$ @kbd{casl2 -M1024 call_inl.casl $CASL2LIB/inl.casl $CASL2LIB/str2l.casl $CASL2LIB/mull.casl \
+ $CASL2LIB/outl.casl $CASL2LIB/divl.casl $CASL2LIB/rev.casl}
+@end example
+
+@node L2STR, MAX, INL, CASL2LIB Manual
+@section @kbd{L2STR} - @file{l2str.casl}
+
+符号なし整数を文字列に変換する
+
+@unnumberedsubsec 入力
+@table @code
+@item GR1
+符号なし整数
+
+@item GR2
+変換した文字列を格納するアドレス
+@end table
+
+@unnumberedsubsec 出力
+@table @code
+@item GR0
+文字列の長さ
+@end table
+
+@unnumberedsubsec 依存する副プログラム
+@itemize
+@item
+@code{DIVL}
+@end itemize
+
+@node MAX, MINIM, L2STR, CASL2LIB Manual
+@section @kbd{MAX} - @file{max.casl}
+
+連続した複数のWORDを符号付き整数とみなして最大値を返す
+
+@unnumberedsubsec 入力
+@table @code
+@item GR1
+WORD値を格納したアドレス
+
+@item GR2
+値の個数
+@end table
+
+@unnumberedsubsec 出力
+@table @code
+@item GR0
+最大値
+@end table
+
+@unnumberedsubsec 依存する副プログラム
+なし
+
+@node MINIM, MULA, MAX, CASL2LIB Manual
+@section @kbd{MINIM} - @file{minim.casl}
+
+連続した複数のWORDを符号付き整数とみなして最小値を返す
+
+@unnumberedsubsec 入力
+@table @code
+@item GR1
+WORD値を格納したアドレス
+
+@item GR2
+値の個数
+@end table
+
+@unnumberedsubsec 出力
+@table @code
+@item GR0
+最小値
+@end table
+
+@unnumberedsubsec 依存する副プログラム
+なし
+
+@node MULA, MULL, MINIM, CASL2LIB Manual
+@section @kbd{MULA} - @file{mula.casl}
+
+@node MULL, OUTA, MULA, CASL2LIB Manual
+@section @kbd{MULL} - @file{mull.casl}
+
+@node OUTA, OUTB, MULL, CASL2LIB Manual
+@section @kbd{OUTA} - @file{outa.casl}
+
+@node OUTB, OUTD_Q15, OUTA, CASL2LIB Manual
+@section @kbd{OUTB} - @file{outb.casl}
+
+@node OUTD_Q15, OUTL, OUTB, CASL2LIB Manual
+@section @kbd{OUTD_Q15} - @file{outd_q15.casl}
+
+@node OUTL, REV, OUTD_Q15, CASL2LIB Manual
+@section @kbd{OUTL} - @file{outl.casl}
+
+@node REV, STR2L, OUTL, CASL2LIB Manual
+@section @kbd{REV} - @file{rev.casl}
+
+@node STR2L, , REV, CASL2LIB Manual
+@section @kbd{STR2L} - @file{str2l.casl}
+
@bye