<!DOCTYPE html>
<html>
<!-- Created by GNU Texinfo 7.3, https://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<!-- Copyright © 2010-2026 j8takagi -->
<title>YACASL2 - CASL II 処理システム</title>
<meta name="description" content="YACASL2 - CASL II 処理システム">
<meta name="keywords" content="YACASL2 - CASL II 処理システム">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href="#Top" rel="start" title="Top">
<link href="#SEC_Contents" rel="contents" title="Table of Contents">
<link href="#Overview" rel="next" title="Overview">
<style type="text/css">
a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em}
div.example {margin-left: 3.2em}
kbd.kbd {font-style: oblique}
span:hover a.copiable-link {visibility: visible}
ul.mark-bullet {list-style-type: disc}
ul.toc-numbered-mark {list-style: none}
body {
margin-left: 6em;
margin-right: 12em;
color: black;
background-color: #EEE;
font-family: sans-serif;
}
h1, h2, h3, h4, h5, h6 {
color: navy;
background-color: inherit;
}
h1, h2 {
margin-left: -2em;
}
.node{
margin-left: -3em;
color: inherit;
background-color: #DDF;
}
.menu, .node {
color: inherit;
background-color: #DDF;
}
table.menu, table.menu th, table.menu td {
border-style: none;
}
h2 {
padding: 0.25em;
border: 2px solid navy;
}
.contents, .mini-toc {
border: 4px double #DDF;
padding: 0.5em 1em 0.5em 2em;
}
.contents h2 {
margin-left: 0;
color: black;
background-color: #DDF;
}
.contents li {
list-style-type: none;
}
.shortcontents {
background-color: #DDF;
border: 4px double #000;
}
.shortcontents h2{
display: none;
}
h1.node-heading {
display: none;
}
h2.contents-heading{
display: none;
}
h2.shortcontents-heading{
display: none;
}
.shortcontents a {
margin-right: 1em;
}
h3, h4, h5 {
margin-left: -1em;
}
h5 {
font-size: 100%;
}
p {
line-height: 1.25em;
margin-top: 0;
margin-bottom: 0.5em;
}
a:hover {
color: red;
text-decoration: underline;
}
pre.example, pre.verbatim {
padding: 0.5em 1em 0.5em 1em;
border: 1px solid #CCC;
}
a {
text-decoration: none;
}
blockquote {
line-height: 1.25em;
border: 1px solid #00F;
}
kbd, code, .file, var {
font-style: normal;
font-weight: normal;
font-family: monospace;
font-size: 120%;
margin-left:0.25em;
margin-right: 0.25em;
}
table, th, td {
border: 1px solid black;
border-collapse: collapse; /* 枠線の表示方法 */
margin-bottom: 1em;
}
table.cartouche, table.cartouche th, table.cartouche td {
border: none;
}
pre.example .command, pre.example .option, pre.example kbd {
font-weight: bold;
font-family: monospace;
font-size: 110%;
background-color: inherit;
font-style: normal;
margin-left:0;
margin-right: 0;
}
pre.example strong {
font: inherit;
border: 2px solid green;
}
pre.example em {
font-size: 100%;
font-style: normal;
font-weight: bold;
}
th {
font-style: normal;
font-weight: bold;
font-family: sans-serif;
text-align: center;
}
dfn {
font-style: normal;
}
.header, .menu {
display: none;
}
em {
font-style: normal;
font-weight: bold;
}
hr {
display: none;
}
</style>
</head>
<body>
<div class="top-level-extent" id="Top">
<p class="nav-panel">
<span class="nav-button"><span class="nav-label">Next: </span><span class="nav-link"><a href="#Overview" rel="next">YACASL2の概要</a></span></span><span class="nav-button"> </span><span class="nav-button">[<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</span></p>
<h1 class="top" id="YACASL2-_002d-CASL-II-_51e6_7406_30b7_30b9_30c6_30e0"><span>YACASL2 - CASL II 処理システム<a class="copiable-link" href="#YACASL2-_002d-CASL-II-_51e6_7406_30b7_30b9_30c6_30e0"> ¶</a></span></h1>
<div class="region-contents" id="SEC_Contents">
<h2 class="contents-heading">Table of Contents</h2>
<div class="contents">
<ul class="toc-numbered-mark">
<li><a id="toc-YACASL2_306e_6982_8981" href="#Overview">1 YACASL2の概要</a></li>
<li><a id="toc-YACASL2_306e_4f7f_7528_4f8b" href="#Sample-usage">2 YACASL2の使用例</a>
<ul class="toc-numbered-mark">
<li><a id="toc-_5b9f_884c_7d50_679c_306e_51fa_529b_3060_3051_3092_8868_793a" href="#Simple-output">2.1 実行結果の出力だけを表示</a></li>
<li><a id="toc-_30a2_30bb_30f3_30d6_30eb_7d50_679c_306e_78ba_8a8d" href="#Assemble-result">2.2 アセンブル結果の確認</a></li>
<li><a id="toc-_5b9f_884c_6642_306e_30ec_30b8_30b9_30bf_3068_30e1_30e2_30ea_3092_8868_793a" href="#Register-and-memory">2.3 実行時のレジスタとメモリを表示</a>
<ul class="toc-numbered-mark">
<li><a id="toc-_7279_5b9a_306e_30ec_30b8_30b9_30bf_3092_8868_793a" href="#Register-specify">2.3.1 特定のレジスタを表示</a></li>
<li><a id="toc-_30d7_30ed_30b0_30e9_30e0_7d42_4e86_6642_306e_5024_3092_8868_793a" href="#End-value">2.3.2 プログラム終了時の値を表示</a></li>
<li><a id="toc-_30d7_30ed_30b0_30e9_30e0_306e_30b9_30c6_30c3_30d7_6570_3092_8868_793a" href="#Step-count">2.3.3 プログラムのステップ数を表示</a></li>
</ul></li>
<li><a id="toc-_30a2_30bb_30f3_30d6_30eb_3068_5b9f_884c_3092_5225_306b_884c_3046" href="#Only-assemble">2.4 アセンブルと実行を別に行う</a></li>
<li><a id="toc-1_8a9e_306e_89e3_6790" href="#Analyze-word">2.5 1語の解析</a></li>
<li><a id="toc-CASL-II_30e9_30a4_30d6_30e9_30ea_306e_4f7f_7528" href="#Use-CASL2LIB">2.6 CASL IIライブラリの使用</a>
<ul class="toc-numbered-mark">
<li><a id="toc-_6570_5024_3092_51fa_529b_3059_308b" href="#g_t_6570_5024_3092_51fa_529b_3059_308b">2.6.1 数値を出力する</a></li>
</ul></li>
</ul></li>
<li><a id="toc-casl2_306e_547c_3073_51fa_3057" href="#casl2-invocation">3 <code class="command">casl2</code>の呼び出し</a>
<ul class="toc-numbered-mark">
<li><a id="toc-_30aa_30d7_30b7_30e7_30f3" href="#g_t_30aa_30d7_30b7_30e7_30f3">オプション</a></li>
</ul></li>
<li><a id="toc-comet2_306e_547c_3073_51fa_3057" href="#comet2-invocation">4 <code class="command">comet2</code>の呼び出し</a>
<ul class="toc-numbered-mark">
<li><a id="toc-_30aa_30d7_30b7_30e7_30f3-1" href="#g_t_30aa_30d7_30b7_30e7_30f3-1">オプション</a></li>
</ul></li>
<li><a id="toc-dumpword_306e_547c_3073_51fa_3057" href="#dumpword-invocation">5 <code class="command">dumpword</code>の呼び出し</a>
<ul class="toc-numbered-mark">
<li><a id="toc-_6ce8_610f" href="#g_t_6ce8_610f">注意</a></li>
<li><a id="toc-_30aa_30d7_30b7_30e7_30f3-2" href="#g_t_30aa_30d7_30b7_30e7_30f3-2">オプション</a></li>
</ul></li>
</ul>
</div>
</div>
<hr>
<div class="chapter-level-extent" id="Overview">
<p class="nav-panel">
<span class="nav-button"><span class="nav-label">Next: </span><span class="nav-link"><a href="#Sample-usage" rel="next">YACASL2の使用例</a></span></span>, <span class="nav-button"><span class="nav-label">Previous: </span><span class="nav-link"><a href="#Top" rel="prev">YACASL2 - CASL II 処理システム</a></span></span>, <span class="nav-button"><span class="nav-label">Up: </span><span class="nav-link"><a href="#Top" rel="up">YACASL2 - CASL II 処理システム</a></span></span><span class="nav-button"> </span><span class="nav-button">[<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</span></p>
<h2 class="chapter" id="YACASL2_306e_6982_8981"><span>1 YACASL2の概要<a class="copiable-link" href="#YACASL2_306e_6982_8981"> ¶</a></span></h2>
<p>YACASL2は、UNIXやLinuxのコマンドラインインターフェイスで
動作するオープンソースのCASL II処理システムです。
CASL IIは情報処理試験で用いられるアセンブラ言語で、
次の資料により仕様が公開されています。
</p>
<blockquote class="quotation">
<p><a class="uref" href="https://www.ipa.go.jp/shiken/syllabus/ps6vr7000000i9g3-att/shiken_yougo_ver4_3.pdf">情報処理技術者試験 情報処理安全確保支援士試験 試験で使用する情報技術に関する用語・プログラム言語など Ver 4.3</a>[PDFファイル] <br>
別紙2 アセンブラ言語の仕様(5ページから12ページまで)
</p></blockquote>
<p>YACASL2は、CASL IIアセンブラ言語で記述されたファイルをアセンブルし、
仮想マシンCOMET II上で実行します。
アセンブルと実行は、連続で行うこともできますし、
アセンブル結果をファイルに保存してあとから実行することもできます。
YACASL2の動作はCASL IIの仕様に準拠しているため、情報処理試験の問題を
はじめ各種参考書やサイトに記載されたCASL IIのプログラムを
そのままアセンブルして実行できます。
また、本パッケージ中にCASL IIのサンプルプログラムが多数収録されています。
</p>
<p>YACASL2は、「ふつうの処理系」として動作します。
YACASL2の操作は、端末上のコマンドラインインターフェイス(CLI)で操作します。
YACASL2は、次のような動作内容をすべてテキストで出力します。
</p>
<ul class="itemize mark-bullet">
<li>ラベルとアドレスの対応
</li><li>アセンブル結果
</li><li>実行時のレジスタの内容
</li><li>実行時のメモリの内容
</li></ul>
<p>YACASL2では、機械コードモニターを使い、動作中のCPUやメモリーを調べたりデバッグしたりすることもできます。
</p>
<p>また、出力された動作内容は、GNU/Linuxのさまざまなコマンド、
たとえば、<code class="command">cat</code>、<code class="command">less</code>、<code class="command">grep</code>、<code class="command">wc</code>などを使って解析できます。
</p>
<hr>
</div>
<div class="chapter-level-extent" id="Sample-usage">
<p class="nav-panel">
<span class="nav-button"><span class="nav-label">Next: </span><span class="nav-link"><a href="#casl2-invocation" rel="next"><code class="command">casl2</code>の呼び出し</a></span></span>, <span class="nav-button"><span class="nav-label">Previous: </span><span class="nav-link"><a href="#Overview" rel="prev">YACASL2の概要</a></span></span>, <span class="nav-button"><span class="nav-label">Up: </span><span class="nav-link"><a href="#Top" rel="up">YACASL2 - CASL II 処理システム</a></span></span><span class="nav-button"> </span><span class="nav-button">[<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</span></p>
<h2 class="chapter" id="YACASL2_306e_4f7f_7528_4f8b"><span>2 YACASL2の使用例<a class="copiable-link" href="#YACASL2_306e_4f7f_7528_4f8b"> ¶</a></span></h2>
<p>YACASL2 は、テキストファイルに記述されたCASLプログラムを処理します。
以下の例で用いられるCASLプログラムのファイルは、
テキストエディタなどで作成するか、インストールしたディレクトリの
中にある<samp class="file">as</samp>ディレクトリからコピーしてください。
</p>
<ul class="mini-toc">
<li><a href="#Simple-output">実行結果の出力だけを表示</a></li>
<li><a href="#Assemble-result">アセンブル結果の確認</a></li>
<li><a href="#Register-and-memory">実行時のレジスタとメモリを表示</a></li>
<li><a href="#Only-assemble">アセンブルと実行を別に行う</a></li>
<li><a href="#Analyze-word">1語の解析</a></li>
<li><a href="#Use-CASL2LIB">CASL IIライブラリの使用</a></li>
</ul>
<hr>
<div class="section-level-extent" id="Simple-output">
<p class="nav-panel">
<span class="nav-button"><span class="nav-label">Next: </span><span class="nav-link"><a href="#Assemble-result" rel="next">アセンブル結果の確認</a></span></span>, <span class="nav-button"><span class="nav-label">Previous: </span><span class="nav-link"><a href="#Sample-usage" rel="prev">YACASL2の使用例</a></span></span>, <span class="nav-button"><span class="nav-label">Up: </span><span class="nav-link"><a href="#Sample-usage" rel="up">YACASL2の使用例</a></span></span><span class="nav-button"> </span><span class="nav-button">[<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</span></p>
<h3 class="section" id="g_t_5b9f_884c_7d50_679c_306e_51fa_529b_3060_3051_3092_8868_793a"><span>2.1 実行結果の出力だけを表示<a class="copiable-link" href="#g_t_5b9f_884c_7d50_679c_306e_51fa_529b_3060_3051_3092_8868_793a"> ¶</a></span></h3>
<p>インストール時にコマンド実行の確認に使った<samp class="file">hello.casl</samp>は、次のような内容です。
CASL IIのマクロ命令OUTは、文字列を出力します。
</p>
<div class="example">
<pre class="example-preformatted">$ <kbd class="kbd">cat hello.casl</kbd>
MAIN START
OUT OBUF,LEN
RET
OBUF DC 'Hello, World!'
LEN DC 13
END
</pre></div>
<p>次のコマンドを実行すると、CASL II のアセンブルと仮想マシン COMET II 上での実行が連続で行われ、文字列が出力されます。
</p>
<div class="example">
<pre class="example-preformatted">$ <kbd class="kbd">casl2 hello.casl</kbd>
Hello, World!
</pre></div>
<p><samp class="file">addl.casl</samp>は、3と1の和を求めます。
</p>
<div class="example">
<pre class="example-preformatted">$ <kbd class="kbd">cat addl.casl</kbd>
;;; ADDL r,adr
MAIN START
LD GR1,A
ADDL GR1,B
RET
A DC 3
B DC 1
END
</pre></div>
<p>このプログラムには出力命令がないため、オプションなしで実行した場合には結果が出力されません。
</p>
<div class="example">
<pre class="example-preformatted">$ <kbd class="kbd">casl2 addl.casl</kbd>
$
</pre></div>
<p>実行内容を確認するには、後述のようにCPU 内にあるレジスタやメモリの内容を表示するか、結果を出力するための処理を追加する必要があります。
</p>
<hr>
</div>
<div class="section-level-extent" id="Assemble-result">
<p class="nav-panel">
<span class="nav-button"><span class="nav-label">Next: </span><span class="nav-link"><a href="#Register-and-memory" rel="next">実行時のレジスタとメモリを表示</a></span></span>, <span class="nav-button"><span class="nav-label">Previous: </span><span class="nav-link"><a href="#Simple-output" rel="prev">実行結果の出力だけを表示</a></span></span>, <span class="nav-button"><span class="nav-label">Up: </span><span class="nav-link"><a href="#Sample-usage" rel="up">YACASL2の使用例</a></span></span><span class="nav-button"> </span><span class="nav-button">[<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</span></p>
<h3 class="section" id="g_t_30a2_30bb_30f3_30d6_30eb_7d50_679c_306e_78ba_8a8d"><span>2.2 アセンブル結果の確認<a class="copiable-link" href="#g_t_30a2_30bb_30f3_30d6_30eb_7d50_679c_306e_78ba_8a8d"> ¶</a></span></h3>
<p>casl2の処理途中で行われるアセンブルの結果を表示するには、オプション<samp class="option">-a</samp>を指定します。
また、ラベルとアドレスの対応表を表示するには、オプション<samp class="option">-l</samp>を指定します。
</p>
<p>次のコマンドでは<samp class="file">hello.casl</samp>の、ラベルとアドレスの対応表と、アセンブル結果と、実行結果が表示されます。
OUTはアセンブラ命令で複数の機械語命令で構成されているため、命令行1行に対して、複数行のコードが生成されます。
</p>
<div class="example">
<pre class="example-preformatted">$ <kbd class="kbd">casl2 -a -l hello.casl</kbd>
Assemble hello.casl (0)
Label::::
MAIN.LEN ---> #0020
MAIN ---> #0000
MAIN.OBUF ---> #0013
Assemble hello.casl (1)
hello.casl: 1:MAIN START
hello.casl: 2: OUT OBUF,LEN
#0000 #7001
#0001 #0000
#0002 #7002
#0003 #0000
#0004 #1210
#0005 #0013
#0006 #1220
#0007 #0020
#0008 #F000
#0009 #0002
#000A #1210
#000B #0021
#0021 #000A
#000C #1220
#000D #0022
#0022 #0001
#000E #F000
#000F #0002
#0010 #7120
#0011 #7110
hello.casl: 3: RET
#0012 #8100
hello.casl: 4:OBUF DC 'Hello, World!'
#0013 #0048
#0014 #0065
#0015 #006C
#0016 #006C
#0017 #006F
#0018 #002C
#0019 #0020
#001A #0057
#001B #006F
#001C #0072
#001D #006C
#001E #0064
#001F #0021
hello.casl: 5:LEN DC 13
#0020 #000D
hello.casl: 6: END
Hello, World!
</pre></div>
<p><samp class="file">addl.casl</samp>の、ラベルとアドレスの対応表と、アセンブル結果は、次のようになります。
</p>
<div class="example">
<pre class="example-preformatted">$ <kbd class="kbd">casl2 -a -l addl.casl</kbd>
Assemble addl.casl (0)
Label::::
MAIN ---> #0000
MAIN.A ---> #0007
MAIN.B ---> #0008
MAIN.C ---> #0009
Assemble addl.casl (1)
addl.casl: 1:;;; ADDL r,adr
addl.casl: 2:MAIN START
addl.casl: 3: LD GR1,A
#0000 #1010
#0001 #0007
addl.casl: 4: ADDL GR1,B
#0002 #2210
#0003 #0008
addl.casl: 5: ST GR1,C
#0004 #1110
#0005 #0009
addl.casl: 6: RET
#0006 #8100
addl.casl: 7:A DC 3
#0007 #0003
addl.casl: 8:B DC 2
#0008 #0002
addl.casl: 9:C DS 1
#0009 #0000
addl.casl: 10: END
</pre></div>
<p>なお、オプション<samp class="option">-A</samp>を指定すると、アセンブル結果が表示される時点で処理が終了します。
仮想マシンCOMET IIでのプログラム実行はされません。
</p>
<hr>
</div>
<div class="section-level-extent" id="Register-and-memory">
<p class="nav-panel">
<span class="nav-button"><span class="nav-label">Next: </span><span class="nav-link"><a href="#Only-assemble" rel="next">アセンブルと実行を別に行う</a></span></span>, <span class="nav-button"><span class="nav-label">Previous: </span><span class="nav-link"><a href="#Assemble-result" rel="prev">アセンブル結果の確認</a></span></span>, <span class="nav-button"><span class="nav-label">Up: </span><span class="nav-link"><a href="#Sample-usage" rel="up">YACASL2の使用例</a></span></span><span class="nav-button"> </span><span class="nav-button">[<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</span></p>
<h3 class="section" id="g_t_5b9f_884c_6642_306e_30ec_30b8_30b9_30bf_3068_30e1_30e2_30ea_3092_8868_793a"><span>2.3 実行時のレジスタとメモリを表示<a class="copiable-link" href="#g_t_5b9f_884c_6642_306e_30ec_30b8_30b9_30bf_3068_30e1_30e2_30ea_3092_8868_793a"> ¶</a></span></h3>
<p>YACASL2では実行中のCPUのレジスタとメモリの内容をそれぞれ、<samp class="option">-t</samp>と<samp class="option">-d</samp>を指定することで表示できます。
</p>
<p>また、<samp class="option">-M</samp>で、仮想マシンCOMET II のメモリ容量を語(16 ビット)単位で指定できます。
小さいプログラムを実行するときは、メモリ容量を小さくすれば結果が見やすくなります。
</p>
<p><samp class="file">addl.casl</samp>では、次のようにCPUのレジスタとメモリの内容を表示できます。
</p>
<div class="example">
<pre class="example-preformatted">$ <kbd class="kbd">casl2 -t -d -M16 addl.casl | less</kbd>
Assemble addl.casl (0)
Assemble addl.casl (1)
Executing machine codes
#0000: Register::::
#0000: GR0: 0 = #0000 = 0000000000000000
#0000: GR1: 0 = #0000 = 0000000000000000
#0000: GR2: 0 = #0000 = 0000000000000000
#0000: GR3: 0 = #0000 = 0000000000000000
#0000: GR4: 0 = #0000 = 0000000000000000
#0000: GR5: 0 = #0000 = 0000000000000000
#0000: GR6: 0 = #0000 = 0000000000000000
#0000: GR7: 0 = #0000 = 0000000000000000
#0000: SP: 16 = #0010 = 0000000000010000
#0000: PR: 0 = #0000 = 0000000000000000
#0000: FR (OF SF ZF): 000
#0000: Memory::::
#0000: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
-------------------------------------------------------------------------------------
#0000: 0000: 1010 0007 2210 0008 1110 0009 8100 0003 0002 0000 0000 0000 0000 0000 0000 0000
#0002: Register::::
#0002: GR0: 0 = #0000 = 0000000000000000
#0002: GR1: 3 = #0003 = 0000000000000011
#0002: GR2: 0 = #0000 = 0000000000000000
#0002: GR3: 0 = #0000 = 0000000000000000
#0002: GR4: 0 = #0000 = 0000000000000000
#0002: GR5: 0 = #0000 = 0000000000000000
#0002: GR6: 0 = #0000 = 0000000000000000
#0002: GR7: 0 = #0000 = 0000000000000000
#0002: SP: 16 = #0010 = 0000000000010000
#0002: PR: 2 = #0002 = 0000000000000010
#0002: FR (OF SF ZF): 000
#0002: Memory::::
#0002: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
-------------------------------------------------------------------------------------
#0002: 0000: 1010 0007 2210 0008 1110 0009 8100 0003 0002 0000 0000 0000 0000 0000 0000 0000
#0004: Register::::
#0004: GR0: 0 = #0000 = 0000000000000000
#0004: GR1: 5 = #0005 = 0000000000000101
#0004: GR2: 0 = #0000 = 0000000000000000
#0004: GR3: 0 = #0000 = 0000000000000000
#0004: GR4: 0 = #0000 = 0000000000000000
#0004: GR5: 0 = #0000 = 0000000000000000
#0004: GR6: 0 = #0000 = 0000000000000000
#0004: GR7: 0 = #0000 = 0000000000000000
#0004: SP: 16 = #0010 = 0000000000010000
#0004: PR: 4 = #0004 = 0000000000000100
#0004: FR (OF SF ZF): 000
#0004: Memory::::
#0004: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
-------------------------------------------------------------------------------------
#0004: 0000: 1010 0007 2210 0008 1110 0009 8100 0003 0002 0000 0000 0000 0000 0000 0000 0000
#0006: Register::::
#0006: GR0: 0 = #0000 = 0000000000000000
#0006: GR1: 5 = #0005 = 0000000000000101
#0006: GR2: 0 = #0000 = 0000000000000000
#0006: GR3: 0 = #0000 = 0000000000000000
#0006: GR4: 0 = #0000 = 0000000000000000
#0006: GR5: 0 = #0000 = 0000000000000000
#0006: GR6: 0 = #0000 = 0000000000000000
#0006: GR7: 0 = #0000 = 0000000000000000
#0006: SP: 16 = #0010 = 0000000000010000
#0006: PR: 6 = #0006 = 0000000000000110
#0006: FR (OF SF ZF): 000
#0006: Memory::::
#0006: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
-------------------------------------------------------------------------------------
#0006: 0000: 1010 0007 2210 0008 1110 0009 8100 0003 0002 0005 0000 0000 0000 0000 0000 0000
</pre></div>
<ul class="mini-toc">
<li><a href="#Register-specify">特定のレジスタを表示</a></li>
<li><a href="#End-value">プログラム終了時の値を表示</a></li>
<li><a href="#Step-count">プログラムのステップ数を表示</a></li>
</ul>
<hr>
<div class="subsection-level-extent" id="Register-specify">
<p class="nav-panel">
<span class="nav-button"><span class="nav-label">Next: </span><span class="nav-link"><a href="#End-value" rel="next">プログラム終了時の値を表示</a></span></span>, <span class="nav-button"><span class="nav-label">Previous: </span><span class="nav-link"><a href="#Register-and-memory" rel="prev">実行時のレジスタとメモリを表示</a></span></span>, <span class="nav-button"><span class="nav-label">Up: </span><span class="nav-link"><a href="#Register-and-memory" rel="up">実行時のレジスタとメモリを表示</a></span></span><span class="nav-button"> </span><span class="nav-button">[<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</span></p>
<h4 class="subsection" id="g_t_7279_5b9a_306e_30ec_30b8_30b9_30bf_3092_8868_793a"><span>2.3.1 特定のレジスタを表示<a class="copiable-link" href="#g_t_7279_5b9a_306e_30ec_30b8_30b9_30bf_3092_8868_793a"> ¶</a></span></h4>
<p><samp class="file">addl.casl</samp>のレジスタやメモリの中で、実行中に値が変化しているのはGR1だけです。
こうした場合は、<code class="command">grep</code>を使って表示される内容を絞り込むことで動作を検証しやすくなります。
</p>
<div class="example">
<pre class="example-preformatted">$ <kbd class="kbd">casl2 -t addl.casl | grep 'GR1:'</kbd>
#0000: GR1: 0 = #0000 = 0000000000000000
#0002: GR1: 3 = #0003 = 0000000000000011
#0004: GR1: 5 = #0005 = 0000000000000101
#0006: GR1: 5 = #0005 = 0000000000000101
</pre></div>
<p>この内容を、先に出力したアセンブル結果と比較してください。
次の表のように、PRとGR1、命令行が対応していることがわかります。
</p>
<table class="multitable">
<tbody><tr><td width="30%">PR</td><td width="30%">GR1</td><td width="40%">命令行</td></tr>
<tr><td width="30%">#0000</td><td width="30%">#0000</td><td width="40%">(なし)</td></tr>
<tr><td width="30%">#0002</td><td width="30%">#0003</td><td width="40%"><code class="code">LD GR1,A</code></td></tr>
<tr><td width="30%">#0004</td><td width="30%">#0004</td><td width="40%"><code class="code">ADDL GR1,B</code></td></tr>
<tr><td width="30%">#0006</td><td width="30%">#0006</td><td width="40%"><code class="code">ST GR1,C</code></td></tr>
</tbody>
</table>
<hr>
</div>
<div class="subsection-level-extent" id="End-value">
<p class="nav-panel">
<span class="nav-button"><span class="nav-label">Next: </span><span class="nav-link"><a href="#Step-count" rel="next">プログラムのステップ数を表示</a></span></span>, <span class="nav-button"><span class="nav-label">Previous: </span><span class="nav-link"><a href="#Register-specify" rel="prev">特定のレジスタを表示</a></span></span>, <span class="nav-button"><span class="nav-label">Up: </span><span class="nav-link"><a href="#Register-and-memory" rel="up">実行時のレジスタとメモリを表示</a></span></span><span class="nav-button"> </span><span class="nav-button">[<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</span></p>
<h4 class="subsection" id="g_t_30d7_30ed_30b0_30e9_30e0_7d42_4e86_6642_306e_5024_3092_8868_793a"><span>2.3.2 プログラム終了時の値を表示<a class="copiable-link" href="#g_t_30d7_30ed_30b0_30e9_30e0_7d42_4e86_6642_306e_5024_3092_8868_793a"> ¶</a></span></h4>
<p><code class="command">grep</code>と<code class="command">tail</code>を組み合わせれば、プログラム終了時の値を表示できます。
</p>
<p><samp class="file">addl.casl</samp>でプログラム終了時のGR1の値を確認するには、次のようにします。
</p>
<div class="example">
<pre class="example-preformatted">$ <kbd class="kbd">casl2 -t addl.casl | grep 'GR1:' | tail -1</kbd>
#0006: GR1: 5 = #0005 = 0000000000000101
</pre></div>
<p><samp class="file">sum_10.casl</samp>は、1から10までの整数の和を求め、GR2に格納してからメモリにストア(書き込み)します。
</p>
<div class="example">
<pre class="example-preformatted">$ <kbd class="kbd">cat sum_10.casl</kbd>
;;; sum_10.casl
;;; 1から10までの整数をすべて加算した値をメモリーに格納する
MAIN START
XOR GR2,GR2 ; GR2を初期化
LD GR1,FST ; GR1に初項をメモリーから転送
LOOP ADDL GR2,GR1 ; ループ先頭。GR2 <- GR2 + GR1
ADDL GR1,STEP ; GR1 <- GR1 + 公差
CPL GR1,LST ; GR1が末項より大きい場合は終了
JPL FIN ; ↓
JUMP LOOP ; ループ終端
FIN ST GR2,RST ; GR2の結果をメモリーに転送
RET
FST DC 1 ; 初項
LST DC 10 ; 末項
STEP DC 1 ; 公差
RST DS 1 ; 結果
END
</pre></div>
<p><samp class="file">sum_10.casl</samp>でプログラム終了時のGR2の値を確認するには、次のようにします。
</p>
<div class="example">
<pre class="example-preformatted">$ <kbd class="kbd">casl2 -t sum_10.casl | grep 'GR2:' | tail -1</kbd>
#000E: GR2: 55 = #0037 = 0000000000110111 = '7'
</pre></div>
<hr>
</div>
<div class="subsection-level-extent" id="Step-count">
<p class="nav-panel">
<span class="nav-button"><span class="nav-label">Previous: </span><span class="nav-link"><a href="#End-value" rel="prev">プログラム終了時の値を表示</a></span></span>, <span class="nav-button"><span class="nav-label">Up: </span><span class="nav-link"><a href="#Register-and-memory" rel="up">実行時のレジスタとメモリを表示</a></span></span><span class="nav-button"> </span><span class="nav-button">[<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</span></p>
<h4 class="subsection" id="g_t_30d7_30ed_30b0_30e9_30e0_306e_30b9_30c6_30c3_30d7_6570_3092_8868_793a"><span>2.3.3 プログラムのステップ数を表示<a class="copiable-link" href="#g_t_30d7_30ed_30b0_30e9_30e0_306e_30b9_30c6_30c3_30d7_6570_3092_8868_793a"> ¶</a></span></h4>
<p><code class="command">grep</code>と<code class="command">wc</code>を組み合わせれば、プログラムのステップ数を表示できます。
</p>
<div class="example">
<pre class="example-preformatted">$ <kbd class="kbd">casl2 -t hello.casl | grep 'GR1:' | wc -l</kbd>
11
</pre></div>
<div class="example">
<pre class="example-preformatted">$ <kbd class="kbd">casl2 -t addl.casl | grep 'GR1:' | wc -l</kbd>
3
</pre></div>
<p><samp class="file">sum_10.casl</samp>はプログラム内にループがあるため、ステップ数が大きくなります。
</p>
<div class="example">
<pre class="example-preformatted">$ <kbd class="kbd">casl2 -t sum_10.casl | grep 'GR2:' | wc -l</kbd>
53
</pre></div>
<hr>
</div>
</div>
<div class="section-level-extent" id="Only-assemble">
<p class="nav-panel">
<span class="nav-button"><span class="nav-label">Next: </span><span class="nav-link"><a href="#Analyze-word" rel="next">1語の解析</a></span></span>, <span class="nav-button"><span class="nav-label">Previous: </span><span class="nav-link"><a href="#Register-and-memory" rel="prev">実行時のレジスタとメモリを表示</a></span></span>, <span class="nav-button"><span class="nav-label">Up: </span><span class="nav-link"><a href="#Sample-usage" rel="up">YACASL2の使用例</a></span></span><span class="nav-button"> </span><span class="nav-button">[<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</span></p>
<h3 class="section" id="g_t_30a2_30bb_30f3_30d6_30eb_3068_5b9f_884c_3092_5225_306b_884c_3046"><span>2.4 アセンブルと実行を別に行う<a class="copiable-link" href="#g_t_30a2_30bb_30f3_30d6_30eb_3068_5b9f_884c_3092_5225_306b_884c_3046"> ¶</a></span></h3>
<p><code class="command">casl2</code>に<samp class="option">-O</samp><samp class="file">ファイル名</samp>を指定すると、オブジェクトファイルを作成できます。
</p>
<div class="example">
<pre class="example-preformatted">$ <kbd class="kbd">casl2 -Ohello.o hello.casl</kbd>
</pre></div>
<p>作成されたオブジェクトファイルの内容は、<code class="command">od</code>を使って確認できます。
テキストファイルではないため、<code class="command">cat</code>などでは確認できません。
</p>
<div class="example">
<pre class="example-preformatted">$ <kbd class="kbd">od -t x2 hello.o</kbd>
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
0000060 002c 0020 0057 006f 0072 006c 0064 0021
0000100 000d 000a 0001
0000106
</pre></div>
<p>オブジェクトファイルの実行には、<code class="command">comet2</code>を使います。
</p>
<div class="example">
<pre class="example-preformatted">$ <kbd class="kbd">comet2 hello.o</kbd>
Hello, World!
</pre></div>
<hr>
</div>
<div class="section-level-extent" id="Analyze-word">
<p class="nav-panel">
<span class="nav-button"><span class="nav-label">Next: </span><span class="nav-link"><a href="#Use-CASL2LIB" rel="next">CASL IIライブラリの使用</a></span></span>, <span class="nav-button"><span class="nav-label">Previous: </span><span class="nav-link"><a href="#Only-assemble" rel="prev">アセンブルと実行を別に行う</a></span></span>, <span class="nav-button"><span class="nav-label">Up: </span><span class="nav-link"><a href="#Sample-usage" rel="up">YACASL2の使用例</a></span></span><span class="nav-button"> </span><span class="nav-button">[<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</span></p>
<h3 class="section" id="g_t1_8a9e_306e_89e3_6790"><span>2.5 1語の解析<a class="copiable-link" href="#g_t1_8a9e_306e_89e3_6790"> ¶</a></span></h3>
<p>CASL IIでは、1語(1 word、16ビット)を単位としてデータが処理されます。
<code class="command">dumpword</code>は、指定した1語を10進数、16進数、2進数で表示します。
</p>
<div class="example">
<pre class="example-preformatted">$ <kbd class="kbd">dumpword 72</kbd>
72: 72 = #0048 = 0000000001001000 = 'H'
</pre></div>
<hr>
</div>
<div class="section-level-extent" id="Use-CASL2LIB">
<p class="nav-panel">
<span class="nav-button"><span class="nav-label">Previous: </span><span class="nav-link"><a href="#Analyze-word" rel="prev">1語の解析</a></span></span>, <span class="nav-button"><span class="nav-label">Up: </span><span class="nav-link"><a href="#Sample-usage" rel="up">YACASL2の使用例</a></span></span><span class="nav-button"> </span><span class="nav-button">[<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</span></p>
<h3 class="section" id="CASL-II_30e9_30a4_30d6_30e9_30ea_306e_4f7f_7528"><span>2.6 CASL IIライブラリの使用<a class="copiable-link" href="#CASL-II_30e9_30a4_30d6_30e9_30ea_306e_4f7f_7528"> ¶</a></span></h3>
<p>YACASL2の<samp class="file">as/casl2lib</samp>ディレクトリには、CASL IIで記述されたライブラリファイルが格納されています。
</p>
<p>このフォルダには、たとえば次のようなプログラムが含まれています。
</p>
<dl class="table">
<dt><samp class="option">OUTL</samp></dt>
<dd><p><samp class="file">outl.casl</samp>。
GR1に格納された値を、0以上65535以下の整数として出力します。
</p>
</dd>
<dt><samp class="option">OUTA</samp></dt>
<dd><p><samp class="file">outa.casl</samp>。
GR1に格納された値を、-32767以上32767以下の整数として出力します。
</p>
</dd>
<dt><samp class="option">MULL</samp></dt>
<dd><p><samp class="file">mull.casl</samp>。
GR1とGR2に格納された値を0以上65535以下の整数と見なし、積をGR3に格納します。
</p>
</dd>
<dt><samp class="option">DIVL</samp></dt>
<dd><p><samp class="file">divl.casl</samp>。
GR1とGR2に格納された値を0以上65535以下の整数と見なし、商をGR3、剰余をGR0に格納します。
</p></dd>
</dl>
<ul class="mini-toc">
<li><a href="#g_t_6570_5024_3092_51fa_529b_3059_308b">数値を出力する</a></li>
</ul>
<div class="subsection-level-extent" id="g_t_6570_5024_3092_51fa_529b_3059_308b">
<h4 class="subsection"><span>2.6.1 数値を出力する<a class="copiable-link" href="#g_t_6570_5024_3092_51fa_529b_3059_308b"> ¶</a></span></h4>
<p>3と1の和を求める<samp class="file">addl.casl</samp>で演算結果を出力するには、まず<samp class="file">addl.casl</samp>を編集します。
CASL IIの<code class="command">CALL</code>命令で<code class="command">OUTL</code>を副プログラムとして呼び出します。
</p>
<div class="example">
<pre class="example-preformatted">$ <kbd class="kbd">cat addl_outl.casl</kbd>
MAIN START
LD GR1,A
ADDL GR1,B
<em class="emph">CALL OUTL</em>
RET
A DC 3
B DC 1
END
</pre></div>
<p>変更したら<code class="command">casl2</code>を、複数のファイルを指定して実行します。
</p>
<div class="example">
<pre class="example-preformatted">$ <kbd class="kbd">casl2 addl_outl.casl ~/yacasl2/as/casl2lib/outl.casl</kbd>
4
</pre></div>
<hr>
</div>
</div>
</div>
<div class="chapter-level-extent" id="casl2-invocation">
<p class="nav-panel">
<span class="nav-button"><span class="nav-label">Next: </span><span class="nav-link"><a href="#comet2-invocation" rel="next"><code class="command">comet2</code>の呼び出し</a></span></span>, <span class="nav-button"><span class="nav-label">Previous: </span><span class="nav-link"><a href="#Sample-usage" rel="prev">YACASL2の使用例</a></span></span>, <span class="nav-button"><span class="nav-label">Up: </span><span class="nav-link"><a href="#Top" rel="up">YACASL2 - CASL II 処理システム</a></span></span><span class="nav-button"> </span><span class="nav-button">[<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</span></p>
<h2 class="chapter" id="casl2_306e_547c_3073_51fa_3057"><span>3 <code class="command">casl2</code>の呼び出し<a class="copiable-link" href="#casl2_306e_547c_3073_51fa_3057"> ¶</a></span></h2>
<a class="index-entry-id" id="index-casl2-1"></a>
<a class="index-entry-id" id="index-casl2"></a>
<a class="index-entry-id" id="index-invoking"></a>
<a class="index-entry-id" id="index-options"></a>
<a class="index-entry-id" id="index-usage"></a>
<a class="index-entry-id" id="index-help"></a>
<p><code class="command">casl2</code>は、引数として指定されたCASLファイルをアセンブルし、仮想マシンCOMET II上で実行します。
CASLファイルは、アセンブラ言語CASL IIで記述されたテキストファイルです。
引数が指定されない場合は、エラーメッセージを表示して終了します。
</p>
<div class="example">
<pre class="example-preformatted">$ <kbd class="kbd">casl2 hello.casl</kbd>
</pre></div>
<p>複数のCASLファイルを指定することで、副プログラムを呼び出すこともできます。
</p>
<div class="example">
<pre class="example-preformatted">$ <kbd class="kbd">casl2 addl_outl.casl ~/yacasl2/as/casl2lib/outl.casl</kbd>
</pre></div>
<ul class="mini-toc">
<li><a href="#g_t_30aa_30d7_30b7_30e7_30f3">オプション</a></li>
</ul>
<div class="unnumberedsec-level-extent" id="g_t_30aa_30d7_30b7_30e7_30f3">
<h3 class="unnumberedsec"><span>オプション<a class="copiable-link" href="#g_t_30aa_30d7_30b7_30e7_30f3"> ¶</a></span></h3>
<p><code class="command">casl2</code>は、次のオプションを指定できます。
</p>
<dl class="table">
<dt><samp class="option">-s</samp></dt>
<dt><samp class="option">--source</samp></dt>
<dd><p>CASLファイルの内容を表示します。
</p>
</dd>
<dt><samp class="option">-l</samp></dt>
<dt><samp class="option">--label</samp></dt>
<dd><p>ラベルの一覧を次の形式で表示します。
表示後、ほかの作業を続行します。
</p>
<div class="example">
<pre class="example-preformatted"><プログラム名>.<ラベル名> ---> <アドレスの16進数表現>
</pre></div>
</dd>
<dt><samp class="option">-L</samp></dt>
<dt><samp class="option">--labelonly</samp></dt>
<dd><p><samp class="option">-l</samp>と同じ形式でラベルの一覧を表示します。
表示後、ほかの作業は続行せず、終了します。
</p>
</dd>
<dt><samp class="option">-a</samp></dt>
<dt><samp class="option">--assembledetail</samp></dt>
<dd><p>アセンブル詳細結果を表示し、ほかの作業を続行します。
</p>
</dd>
<dt><samp class="option">-A</samp></dt>
<dt><samp class="option">--assembledetailonly</samp></dt>
<dd><p>アセンブル詳細結果を表示して終了します。
</p>
</dd>
<dt><samp class="option">-o<OBJECTFILE></samp></dt>
<dt><samp class="option">--assembleout<OBJECTFILE></samp></dt>
<dd><p>アセンブル結果をオブジェクトファイル<samp class="file"><OBJECTFILE></samp>に出力し、ほかの作業を続行します。
出力されたオブジェクトファイルは、<code class="command">comet2</code>で実行できます。
オブジェクトファイルを指定しない場合、出力先は<samp class="file">a.o</samp>です。
オブジェクトファイルは1つだけ指定できます。
</p>
</dd>
<dt><samp class="option">-O[<OBJECTFILE>]</samp></dt>
<dt><samp class="option">--assembleoutonly[<OBJECTFILE>]</samp></dt>
<dd><p>アセンブル結果をオブジェクトファイル<samp class="file"><OBJECTFILE></samp>に出力し、終了します。
出力されたオブジェクトファイルは、<code class="command">comet2</code>で実行できます。
オブジェクトファイルを指定しない場合、出力先は<samp class="file">a.o</samp>です。
オブジェクトファイルは1つだけ指定できます。
</p>
</dd>
<dt><samp class="option">-t</samp></dt>
<dt><samp class="option">--trace</samp></dt>
<dt><samp class="option">--tracearithmetic</samp></dt>
<dd><p>プログラム実行中のレジスタの値を次の形式で表示します。
</p>
<div class="example">
<pre class="example-preformatted"><PR値の16進数表現>: <レジスタ>: <値の10進数表現> =
<値の16進数表現> = <値の2進数表現>[ ='文字']
</pre></div>
<ul class="itemize mark-bullet">
<li><code class="code"><PR値の16進数表現></code>と<code class="code"><レジスタ></code>、<code class="code"><値の16進数表現></code>は、4けたの16進数で表されます。
<code class="code"><PR値の16進数表現></code>と<code class="code"><値の16進数表現></code>には、先頭に<code class="code">#</code>が付きます。
範囲は<code class="code">#0000</code>から<code class="code">#FFFF</code>です
</li><li><code class="code"><値の10進数表現></code>は符号の付いた10進数です。
範囲は-32768から32767です。
</li><li><code class="code"><値の2進数表現></code>は、16けたの2進数で表されます。
範囲は、<code class="code">0000000000000000</code>から<code class="code">1111111111111111</code>です
</li><li><code class="code">[ ='文字']</code>は、レジストリの値が「文字の組」の範囲に含まれる場合に表示されます。
</li></ul>
<p>表示されるレジスタには、次の種類があります。
</p>
<dl class="table">
<dt><code class="code">GR0 GR1 GR2 GR3 GR4 GR5 GR6 GR7</code></dt>
<dd><p>汎用レジスタ
</p>
</dd>
<dt><code class="code">SP</code></dt>
<dd><p>スタックポインタ
</p>
</dd>
<dt><code class="code">PR</code></dt>
<dd><p>プログラムレジスタ
</p>
</dd>
<dt><code class="code">FR</code></dt>
<dd><p>フラグレジスタ
</p></dd>
</dl>
<p>例えば、次のように表示されます。
</p>
<div class="example">
<pre class="example-preformatted">#0002: GR1: 3 = #0003 = 0000000000000011
</pre></div>
</dd>
<dt><samp class="option">-T</samp></dt>
<dt><samp class="option">--tracelogical</samp></dt>
<dd><p><samp class="option">-t</samp>と同じように、プログラム実行中のレジスタの値を表示します。
ただし<samp class="option">-t</samp>と異なり、<code class="code"><値の10進数表現></code>は符号の付かない10進数です。
値の範囲は0から65535です。
</p>
</dd>
<dt><samp class="option">-d</samp></dt>
<dt><samp class="option">--dump</samp></dt>
<dd><p>メモリの内容をすべて表示します。
</p>
</dd>
<dt><samp class="option">-M <MEMORYSIZE></samp></dt>
<dt><samp class="option">--memorysize <MEMORYSIZE></samp></dt>
<dd><p>アセンブルおよび実行時のメモリサイズ<samp class="option"><MEMORYSIZE></samp>を0から65535の範囲で指定します。
指定しない場合、512です。
</p>
</dd>
<dt><samp class="option">-C <CLOCKS></samp></dt>
<dt><samp class="option">--clocks <CLOCKS></samp></dt>
<dd><p>実行時のクロック周波数<samp class="option"><CLOCKS></samp>を0より大きい整数で指定します。
指定しない場合、クロック周波数は5000000です。
</p>
</dd>
<dt><samp class="option">-v</samp></dt>
<dt><samp class="option">--version</samp></dt>
<dd><p><code class="command">casl2</code>のバージョンを表示して終了します。
</p>
</dd>
<dt><samp class="option">-h</samp></dt>
<dt><samp class="option">--help</samp></dt>
<dd><p><code class="command">casl2</code>の使用方法を表示して終了します。
</p></dd>
</dl>
<hr>
</div>
</div>
<div class="chapter-level-extent" id="comet2-invocation">
<p class="nav-panel">
<span class="nav-button"><span class="nav-label">Next: </span><span class="nav-link"><a href="#dumpword-invocation" rel="next"><code class="command">dumpword</code>の呼び出し</a></span></span>, <span class="nav-button"><span class="nav-label">Previous: </span><span class="nav-link"><a href="#casl2-invocation" rel="prev"><code class="command">casl2</code>の呼び出し</a></span></span>, <span class="nav-button"><span class="nav-label">Up: </span><span class="nav-link"><a href="#Top" rel="up">YACASL2 - CASL II 処理システム</a></span></span><span class="nav-button"> </span><span class="nav-button">[<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</span></p>
<h2 class="chapter" id="comet2_306e_547c_3073_51fa_3057"><span>4 <code class="command">comet2</code>の呼び出し<a class="copiable-link" href="#comet2_306e_547c_3073_51fa_3057"> ¶</a></span></h2>
<a class="index-entry-id" id="index-comet2-1"></a>
<a class="index-entry-id" id="index-comet2"></a>
<a class="index-entry-id" id="index-invoking-1"></a>
<a class="index-entry-id" id="index-options-1"></a>
<a class="index-entry-id" id="index-usage-1"></a>
<a class="index-entry-id" id="index-help-1"></a>
<p><code class="command">comet2</code>は、引数として指定されたオブジェクトファイルを仮想マシンCOMET II上で実行します。
オブジェクトファイルは、<code class="command">casl</code>に<samp class="option">-o</samp>または<samp class="option">-O</samp>を指定して出力します。
</p>
<div class="example">
<pre class="example-preformatted">$ <kbd class="kbd">comet2 hello.o</kbd>
</pre></div>
<p>引数で指定できるオブジェクトファイルは1つだけです。
引数が指定されない場合は、エラーメッセージを表示して終了します。
複数の引数を指定した場合、2番目以降の引数は無視されます。
</p>
<ul class="mini-toc">
<li><a href="#g_t_30aa_30d7_30b7_30e7_30f3-1">オプション</a></li>
</ul>
<div class="unnumberedsec-level-extent" id="g_t_30aa_30d7_30b7_30e7_30f3-1">
<h3 class="unnumberedsec"><span>オプション<a class="copiable-link" href="#g_t_30aa_30d7_30b7_30e7_30f3-1"> ¶</a></span></h3>
<p><code class="command">comet2</code>は、次のオプションを指定できます。
</p>
<dl class="table">
<dt><samp class="option">-t</samp></dt>
<dt><samp class="option">--trace</samp></dt>
<dt><samp class="option">--tracearithmetic</samp></dt>
<dd><p>プログラム実行中のレジスタの値を次の形式で表示します。
<code class="code"><値の10進数表現></code>は符号の付いた10進数です。
範囲は-32768から32767です。
</p>
<div class="example">
<pre class="example-preformatted"><PR値の16進数表現>: <レジスタ>: <値の10進数表現> = <値の16進数表現> = <値の2進数表現>[ ='文字']
</pre></div>
<ul class="itemize mark-bullet">
<li><code class="code"><PR値の16進数表現></code>と<code class="code"><値の16進数表現></code>は、先頭に<code class="code">#</code>が付いた4けたの16進数で表されます。
範囲は、<code class="code">#0000</code>から<code class="code">#FFFF</code>です
</li><li><code class="code"><値の2進数表現></code>は、16けたの2進数で表されます。
範囲は、<code class="code">0000000000000000</code>から<code class="code">1111111111111111</code>です
</li><li><code class="code">[ ='文字']</code>は、レジストリの値が「文字の組」の範囲に含まれる場合に表示されます。
</li></ul>
<p>例えば、次のように表示されます。
</p>
<div class="example">
<pre class="example-preformatted">#0002: GR1: 3 = #0003 = 0000000000000011
</pre></div>
<p>表示されるレジスタには、次の種類があります。
</p>
<dl class="table">
<dt><code class="code">GR0 GR1 GR2 GR3 GR4 GR5 GR6 GR7</code></dt>
<dd><p>汎用レジスタ
</p>
</dd>
<dt><code class="code">SP</code></dt>
<dd><p>スタックポインタ
</p>
</dd>
<dt><code class="code">PR</code></dt>
<dd><p>プログラムレジスタ
</p>
</dd>
<dt><code class="code">FR</code></dt>
<dd><p>フラグレジスタ
</p></dd>
</dl>
</dd>
<dt><samp class="option">-T</samp></dt>
<dt><samp class="option">--tracelogical</samp></dt>
<dd><p><samp class="option">-t</samp>と同じように、プログラム実行中のレジスタの値を表示します。
ただし、<samp class="option">-t</samp>と異なり、<code class="code"><値の10進数表現></code>は符号の付かない10進数です。
値の範囲は0から65535です。
</p>
</dd>
<dt><samp class="option">-d</samp></dt>
<dt><samp class="option">--dump</samp></dt>
<dd><p>メモリの内容をすべて表示します。
</p>
</dd>
<dt><samp class="option">-M <MEMORYSIZE></samp></dt>
<dt><samp class="option">--memorysize <MEMORYSIZE></samp></dt>
<dd><p>実行時のメモリサイズ<samp class="option"><MEMORYSIZE></samp>を0から65535の範囲で指定します。
指定しない場合、512です。
</p>
</dd>
<dt><samp class="option">-C <CLOCKS></samp></dt>
<dt><samp class="option">--clocks <CLOCKS></samp></dt>
<dd><p>実行時のクロック周波数<samp class="option"><CLOCKS></samp>を0より大きい整数で指定します。
指定しない場合、5000000です。
</p>
</dd>
<dt><samp class="option">-v</samp></dt>
<dt><samp class="option">--version</samp></dt>
<dd><p><code class="command">comet2</code>のバージョンを表示して終了します。
</p>
</dd>
<dt><samp class="option">-h</samp></dt>
<dt><samp class="option">--help</samp></dt>
<dd><p><code class="command">comet2</code>の使用方法を表示して終了します。
</p></dd>
</dl>
<hr>
</div>
</div>
<div class="chapter-level-extent" id="dumpword-invocation">
<p class="nav-panel">
<span class="nav-button"><span class="nav-label">Previous: </span><span class="nav-link"><a href="#comet2-invocation" rel="prev"><code class="command">comet2</code>の呼び出し</a></span></span>, <span class="nav-button"><span class="nav-label">Up: </span><span class="nav-link"><a href="#Top" rel="up">YACASL2 - CASL II 処理システム</a></span></span><span class="nav-button"> </span><span class="nav-button">[<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</span></p>
<h2 class="chapter" id="dumpword_306e_547c_3073_51fa_3057"><span>5 <code class="command">dumpword</code>の呼び出し<a class="copiable-link" href="#dumpword_306e_547c_3073_51fa_3057"> ¶</a></span></h2>
<a class="index-entry-id" id="index-dumpword-1"></a>
<a class="index-entry-id" id="index-dumpword"></a>
<a class="index-entry-id" id="index-invoking-2"></a>
<a class="index-entry-id" id="index-options-2"></a>
<a class="index-entry-id" id="index-usage-2"></a>
<a class="index-entry-id" id="index-help-2"></a>
<p><code class="command">dumpword</code>は引数として指定された数値を、整数、#0000から#FFFFまでの範囲の16進数、2進数で表示します。
文字の組に該当する場合は、「 = 」のうしろに文字が表示されます。
引数は、10進数または先頭に「#」の付いた16進数で指定します。
表示される整数は、オプションにより符号付きか符号なしかを指定します。
オプションなしの場合は符号付きです。
整数の範囲は、符号付きの場合は-32768以上32767以下、符号なしの場合は0以上65535以下です。
</p>
<div class="example">
<pre class="example-preformatted">$ <kbd class="kbd">dumpword 10</kbd>
10: 10 = #000A = 0000000000001010 = '\n'
</pre></div>
<p>引数が指定されない場合は、使い方を表示して終了します。
複数の引数を指定した場合、1つ目の引数だけが表示され、2つ目以降の引数は無視されます。
</p>
<ul class="mini-toc">
<li><a href="#g_t_6ce8_610f">注意</a></li>
<li><a href="#g_t_30aa_30d7_30b7_30e7_30f3-2">オプション</a></li>
</ul>
<div class="unnumberedsec-level-extent" id="g_t_6ce8_610f">
<h3 class="unnumberedsec"><span>注意<a class="copiable-link" href="#g_t_6ce8_610f"> ¶</a></span></h3>
<p>マイナスの数や16進数はシェルの仕様により、そのままでは指定できません。
</p>
<p>マイナスの数を指定するときは、次のように<samp class="option">--</samp>を付けます。
</p>
<div class="example">
<pre class="example-preformatted">$ <kbd class="kbd">dumpword -- -72</kbd>
-72: -72 = #FFB8 = 1111111110111000
</pre></div>
<p>先頭に「#」を付けて16進数を指定するときは、次のように「’」で囲みます。
</p>
<div class="example">
<pre class="example-preformatted">$ <kbd class="kbd">dumpword '#0048'</kbd>
#0048: 72 = #0048 = 0000000001001000 = 'H'
</pre></div>
</div>
<div class="unnumberedsec-level-extent" id="g_t_30aa_30d7_30b7_30e7_30f3-2">
<h3 class="unnumberedsec"><span>オプション<a class="copiable-link" href="#g_t_30aa_30d7_30b7_30e7_30f3-2"> ¶</a></span></h3>
<p><code class="command">dumpword</code>は、次のオプションを指定できます。
</p>
<dl class="table">
<dt><samp class="option">-a</samp></dt>
<dt><samp class="option">--arithmetic</samp></dt>
<dd><p>出力される整数の範囲を-32,768以上32,767以下にします。
オプションなしの場合と同じです。
</p>
</dd>
<dt><samp class="option">-l</samp></dt>
<dt><samp class="option">--logical</samp></dt>
<dd><p>出力される整数の範囲を0以上65,535以下にします。
</p>
</dd>
<dt><samp class="option">-v</samp></dt>
<dt><samp class="option">--version</samp></dt>
<dd><p><code class="command">dumpword</code>のバージョンを表示して終了します。
</p>
</dd>
<dt><samp class="option">-h</samp></dt>
<dt><samp class="option">--help</samp></dt>
<dd><p><code class="command">dumpword</code>の使用方法を表示して終了します。
</p></dd>
</dl>
</div>
</div>
</div>
</body>
</html>