<!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 © Information-technology Promotion Agency, Japan. All rights reserved 2021 -->
<title>情報処理技術者試験 アセンブラ言語の仕様</title>
<meta name="description" content="情報処理技術者試験 アセンブラ言語の仕様">
<meta name="keywords" content="情報処理技術者試験 アセンブラ言語の仕様">
<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">
<style type="text/css">
a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em}
span:hover a.copiable-link {visibility: visible}
ul.mark-none {list-style-type: 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="g_t_60c5_5831_51e6_7406_6280_8853_8005_8a66_9a13-_30a2_30bb_30f3_30d6_30e9_8a00_8a9e_306e_4ed5_69d8">
<h1 class="top"><span>情報処理技術者試験 アセンブラ言語の仕様<a class="copiable-link" href="#g_t_60c5_5831_51e6_7406_6280_8853_8005_8a66_9a13-_30a2_30bb_30f3_30d6_30e9_8a00_8a9e_306e_4ed5_69d8"> ¶</a></span></h1>
<ul class="mini-toc">
<li><a href="#g_t_30b7_30b9_30c6_30e0-COMET-II_306e_4ed5_69d8">システム COMET IIの仕様</a></li>
<li><a href="#g_t_30a2_30bb_30f3_30d6_30e9_8a00_8a9eCASL-II_306e_4ed5_69d8">アセンブラ言語CASL IIの仕様</a></li>
<li><a href="#g_t_30d7_30ed_30b0_30e9_30e0_5b9f_884c_306e_624b_5f15">プログラム実行の手引</a></li>
<li><a href="#g_t_53c2_8003_8cc7_6599">参考資料</a></li>
</ul>
<div class="chapter-level-extent" id="g_t_30b7_30b9_30c6_30e0-COMET-II_306e_4ed5_69d8">
<h2 class="chapter"><span>1 システム COMET IIの仕様<a class="copiable-link" href="#g_t_30b7_30b9_30c6_30e0-COMET-II_306e_4ed5_69d8"> ¶</a></span></h2>
<ul class="mini-toc">
<li><a href="#g_t_30cf_30fc_30c9_30a6_30a7_30a2_306e_4ed5_69d8">ハードウェアの仕様</a></li>
<li><a href="#g_t_547d_4ee4">命令</a></li>
<li><a href="#g_t_6587_5b57_306e_7b26_53f7_8868">文字の符号表</a></li>
</ul>
<div class="section-level-extent" id="g_t_30cf_30fc_30c9_30a6_30a7_30a2_306e_4ed5_69d8">
<h3 class="section"><span>1.1 ハードウェアの仕様<a class="copiable-link" href="#g_t_30cf_30fc_30c9_30a6_30a7_30a2_306e_4ed5_69d8"> ¶</a></span></h3>
<ol class="enumerate">
<li> 1語は16ビットで,そのビット構成は,次のとおりである。
<img class="image" src="img/1_1-01.svg" alt="img/1_1-01">
</li><li> 主記憶の容量は65536語で,そのアドレスは0~65535番地である。
</li><li> 数値は,16ビットの2進数で表現する。負数は,2の補数で表現する。
</li><li> 制御方式は逐次制御で,命令語は1語長又は2語長である。
</li><li> レジスタとして,<code class="code">GR</code>(16ビット),<code class="code">SP</code>(16ビット),<code class="code">PR</code>(16ビット),<code class="code">FR</code>(3ビット)の4種類がある。
<ul class="itemize" style="list-style-type: ' '">
<li><code class="code">GR</code>(汎用レジスタ,General Register)は,<code class="code">GR0</code>~<code class="code">GR7</code>の8個があり,
算術,論理,比較,シフトなどの演算に用いる。
このうち,<code class="code">GR1</code>~<code class="code">GR7</code>のレジスタは,指標レジスタ(index register)
としてアドレスの修飾にも用いる。
</li><li><code class="code">SP</code>(スタックポインタ,Stack Pointer)は,
スタックの最上段のアドレスを保持している。
</li><li><code class="code">PR</code>(プログラムレジスタ,Program Register)は,
次に実行すべき命令語の先頭アドレスを保持している。
</li><li><code class="code">FR</code>(フラグレジスタ,Flag Register)は,
<code class="code">OF</code>(Overflow Flag),<code class="code">SF</code>(Sign Flag),<code class="code">ZF</code>(Zero Flag)と呼ぶ
3個のビットからなり,演算命令などの実行によって次の値が設定される。
これらの値は,条件付き分岐命令で参照される。
<dl class="table">
<dt><code class="code">OF</code></dt>
<dd><p>算術演算命令の場合は,演算結果が-32768~32767に収まらなくなったとき1になり,
それ以外のとき0になる。
論理演算命令の場合は,演算結果が0~65535に収まらなくなったとき1になり,
それ以外のとき0になる。
</p>
</dd>
<dt><code class="code">SF</code></dt>
<dd><p>演算結果の符号が負(ビット番号15が1)のとき1,それ以外のとき0になる。
</p>
</dd>
<dt><code class="code">ZF</code></dt>
<dd><p>演算結果が零(全部のビットが0)のとき1,それ以外のとき0になる。
</p></dd>
</dl>
</li></ul>
</li><li> 論理加算又は論理減算は,被演算データを符号のない数値とみなして,
加算又は減算する。
</li></ol>
</div>
<div class="section-level-extent" id="g_t_547d_4ee4">
<h3 class="section"><span>1.2 命令<a class="copiable-link" href="#g_t_547d_4ee4"> ¶</a></span></h3>
<p>命令の形式及びその機能を示す。
ここで,一つの命令コードに対し2種類のオペランドがある場合,
上段はレジスタ間の命令,下段はレジスタと主記憶間の命令を表す。
</p>
<img class="image" src="img/1_2-00.svg" alt="img/1_2-00">
<ul class="mini-toc">
<li><a href="#g_t_30ed_30fc_30c9_ff0c_30b9_30c8_30a2_ff0c_30ed_30fc_30c9_30a2_30c9_30ec_30b9_547d_4ee4">ロード,ストア,ロードアドレス命令</a></li>
<li><a href="#g_t_7b97_8853_ff0c_8ad6_7406_6f14_7b97_547d_4ee4">算術,論理演算命令</a></li>
<li><a href="#g_t_6bd4_8f03_6f14_7b97_547d_4ee4">比較演算命令</a></li>
<li><a href="#g_t_30b7_30d5_30c8_6f14_7b97_547d_4ee4">シフト演算命令</a></li>
<li><a href="#g_t_5206_5c90_547d_4ee4">分岐命令</a></li>
<li><a href="#g_t_30b9_30bf_30c3_30af_64cd_4f5c_547d_4ee4">スタック操作命令</a></li>
<li><a href="#g_t_30b3_30fc_30eb_ff0c_30ea_30bf_30fc_30f3_547d_4ee4">コール,リターン命令</a></li>
<li><a href="#g_t_305d_306e_4ed6">その他</a></li>
<li><a href="#g_t_6ce8">注</a></li>
</ul>
<div class="subsection-level-extent" id="g_t_30ed_30fc_30c9_ff0c_30b9_30c8_30a2_ff0c_30ed_30fc_30c9_30a2_30c9_30ec_30b9_547d_4ee4">
<h4 class="subsection"><span>1.2.1 ロード,ストア,ロードアドレス命令<a class="copiable-link" href="#g_t_30ed_30fc_30c9_ff0c_30b9_30c8_30a2_ff0c_30ed_30fc_30c9_30a2_30c9_30ec_30b9_547d_4ee4"> ¶</a></span></h4>
<img class="image" src="img/1_2-01.svg" alt="img/1_2-01">
</div>
<div class="subsection-level-extent" id="g_t_7b97_8853_ff0c_8ad6_7406_6f14_7b97_547d_4ee4">
<h4 class="subsection"><span>1.2.2 算術,論理演算命令<a class="copiable-link" href="#g_t_7b97_8853_ff0c_8ad6_7406_6f14_7b97_547d_4ee4"> ¶</a></span></h4>
<img class="image" src="img/1_2-02.svg" alt="img/1_2-02">
</div>
<div class="subsection-level-extent" id="g_t_6bd4_8f03_6f14_7b97_547d_4ee4">
<h4 class="subsection"><span>1.2.3 比較演算命令<a class="copiable-link" href="#g_t_6bd4_8f03_6f14_7b97_547d_4ee4"> ¶</a></span></h4>
<img class="image" src="img/1_2-03.svg" alt="img/1_2-03">
</div>
<div class="subsection-level-extent" id="g_t_30b7_30d5_30c8_6f14_7b97_547d_4ee4">
<h4 class="subsection"><span>1.2.4 シフト演算命令<a class="copiable-link" href="#g_t_30b7_30d5_30c8_6f14_7b97_547d_4ee4"> ¶</a></span></h4>
<img class="image" src="img/1_2-04.svg" alt="img/1_2-04">
</div>
<div class="subsection-level-extent" id="g_t_5206_5c90_547d_4ee4">
<h4 class="subsection"><span>1.2.5 分岐命令<a class="copiable-link" href="#g_t_5206_5c90_547d_4ee4"> ¶</a></span></h4>
<img class="image" src="img/1_2-05.svg" alt="img/1_2-05">
</div>
<div class="subsection-level-extent" id="g_t_30b9_30bf_30c3_30af_64cd_4f5c_547d_4ee4">
<h4 class="subsection"><span>1.2.6 スタック操作命令<a class="copiable-link" href="#g_t_30b9_30bf_30c3_30af_64cd_4f5c_547d_4ee4"> ¶</a></span></h4>
<img class="image" src="img/1_2-06.svg" alt="img/1_2-06">
</div>
<div class="subsection-level-extent" id="g_t_30b3_30fc_30eb_ff0c_30ea_30bf_30fc_30f3_547d_4ee4">
<h4 class="subsection"><span>1.2.7 コール,リターン命令<a class="copiable-link" href="#g_t_30b3_30fc_30eb_ff0c_30ea_30bf_30fc_30f3_547d_4ee4"> ¶</a></span></h4>
<img class="image" src="img/1_2-07.svg" alt="img/1_2-07">
</div>
<div class="subsection-level-extent" id="g_t_305d_306e_4ed6">
<h4 class="subsection"><span>1.2.8 その他<a class="copiable-link" href="#g_t_305d_306e_4ed6"> ¶</a></span></h4>
<img class="image" src="img/1_2-08.svg" alt="img/1_2-08">
</div>
<div class="unnumberedsubsec-level-extent" id="g_t_6ce8">
<h4 class="unnumberedsubsec"><span>注<a class="copiable-link" href="#g_t_6ce8"> ¶</a></span></h4>
<dl class="table">
<dt><em class="dfn"><code class="code">r</code>, <code class="code">r1</code>, <code class="code">r2</code></em></dt>
<dd><p>いずれも <code class="code">GR</code>を示す。指定できる<code class="code">GR</code>は<code class="code">GR0</code>~<code class="code">GR7</code>
</p>
</dd>
<dt><em class="dfn"><code class="code">adr</code></em></dt>
<dd><p>アドレスを示す。指定できる値の範囲は<code class="code">0</code>~<code class="code">65535</code>
</p>
</dd>
<dt><em class="dfn"><code class="code">x</code></em></dt>
<dd><p>指標レジスタとして用いる<code class="code">GR</code>を示す。指定できる<code class="code">GR</code>は<code class="code">GR1</code>~<code class="code">GR7</code>
</p>
</dd>
<dt><em class="dfn"><code class="code">[ ]</code></em></dt>
<dd><p><code class="code">[ ]</code>内の指定は省略できることを示す。
</p>
</dd>
<dt><em class="dfn"><code class="code">( )</code></em></dt>
<dd><p><code class="code">( )</code>内のレジスタ又はアドレスに格納されている内容を示す。
</p>
</dd>
<dt><em class="dfn"><code class="code">実効アドレス</code></em></dt>
<dd><p><code class="code">adr</code>と<code class="code">x</code>の内容との論理加算値又はその値が示す番地
</p>
</dd>
<dt><em class="dfn"><code class="code">←</code></em></dt>
<dd><p>演算結果を,左辺のレジスタ又はアドレスに格納することを示す。
</p>
</dd>
<dt><em class="dfn"><code class="code">+L</code>, <code class="code">-L</code></em></dt>
<dd><p>論理加算,論理減算を示す。
</p>
</dd>
<dt><em class="dfn"><code class="code">FR</code>の設定</em></dt>
<dd><ul class="itemize mark-none">
<li><code class="code">○ </code>: 設定されることを示す。
</li><li><code class="code">○*1</code>: 設定されることを示す。ただし、<code class="code">OF</code>には0が設定される。
</li><li><code class="code">○*2</code>: 設定されることを示す。ただし、<code class="code">OF</code>にはレジスタから最後に送り出されたビットの値が設定される。
</li><li><code class="code">— </code>: 実行前の値が保持されることを示す。
</li></ul>
</dd>
</dl>
</div>
</div>
<div class="section-level-extent" id="g_t_6587_5b57_306e_7b26_53f7_8868">
<h3 class="section"><span>1.3 文字の符号表<a class="copiable-link" href="#g_t_6587_5b57_306e_7b26_53f7_8868"> ¶</a></span></h3>
<ol class="enumerate">
<li> JIS X 0201 ラテン文字・片仮名用8ビット符号で規定する文字の符号表を使用する。
</li><li> 次に符号表の一部を示す。 <br>
<img class="image" src="img/1_3-01.svg" alt="img/1_3-01">
<p>1文字は8ビットからなり,上位4ビットを列で,下位4ビットを行で示す。 例えば,<code class="code">間隔</code>,<code class="code">4</code>,<code class="code">H</code>,<code class="code">\</code>のビット構成は,16進表示で,それぞれ20,34,48,5Cである。ビット構成が21~7E(及び表では省略しているA1~DF)に対応する文字を図形文字という。 図形文字は,表示(印刷)装置で,文字として表示(印字)できる。
</p>
</li><li> この表にない文字とそのビット構成が必要な場合は,問題中で与える。
</li></ol>
</div>
</div>
<div class="chapter-level-extent" id="g_t_30a2_30bb_30f3_30d6_30e9_8a00_8a9eCASL-II_306e_4ed5_69d8">
<h2 class="chapter"><span>2 アセンブラ言語CASL IIの仕様<a class="copiable-link" href="#g_t_30a2_30bb_30f3_30d6_30e9_8a00_8a9eCASL-II_306e_4ed5_69d8"> ¶</a></span></h2>
<ul class="mini-toc">
<li><a href="#g_t_8a00_8a9e_306e_4ed5_69d8">言語の仕様</a></li>
<li><a href="#g_t_547d_4ee4_306e_7a2e_985e">命令の種類</a></li>
<li><a href="#g_t_30a2_30bb_30f3_30d6_30e9_547d_4ee4">アセンブラ命令</a></li>
<li><a href="#g_t_30de_30af_30ed_547d_4ee4">マクロ命令</a></li>
<li><a href="#g_t_6a5f_68b0_8a9e_547d_4ee4">機械語命令</a></li>
<li><a href="#g_t_305d_306e_4ed6-1">その他</a></li>
</ul>
<div class="section-level-extent" id="g_t_8a00_8a9e_306e_4ed5_69d8">
<h3 class="section"><span>2.1 言語の仕様<a class="copiable-link" href="#g_t_8a00_8a9e_306e_4ed5_69d8"> ¶</a></span></h3>
<ol class="enumerate">
<li> CASL IIは,COMET IIのためのアセンブラ言語である。
</li><li> プログラムは,命令行および注釈行からなる。
</li><li> 1命令は1命令行で記述し,次の行へ継続できない。
</li><li> 命令行および注釈行は,次に示す記述の形式で,行の1文字目から記述する。 <br>
<img class="image" src="img/2_1-01.svg" alt="img/2_1-01">
</li></ol>
<ul class="mini-toc">
<li><a href="#g_t_6ce8-1">注</a></li>
</ul>
<div class="unnumberedsubsec-level-extent" id="g_t_6ce8-1">
<h4 class="unnumberedsubsec"><span>注<a class="copiable-link" href="#g_t_6ce8-1"> ¶</a></span></h4>
<dl class="table">
<dt><em class="dfn">[ ]</em></dt>
<dd><p>[ ]内の指定が省略できることを示す。
</p>
</dd>
<dt><em class="dfn">{ }</em></dt>
<dd><p>{ }内の指定が必須であることを示す。
</p>
</dd>
<dt><em class="dfn">ラベル</em></dt>
<dd><p>その命令の(先頭の語の)アドレスを他の命令やプログラムから参照するための名前である。 長さは1~8文字で,先頭の文字は英大文字でなければならない。 以降の文字は,英大文字又は数字のいずれでもよい。 なお,予約語であるGR0~GR7は,使用できない。
</p>
</dd>
<dt><em class="dfn">空白</em></dt>
<dd><p>1文字以上の間隔文字の列である。
</p>
</dd>
<dt><em class="dfn">命令コード</em></dt>
<dd><p>命令ごとに記述の形式が定義されている。
</p>
</dd>
<dt><em class="dfn">オペランド</em></dt>
<dd><p>命令ごとに記述の形式が定義されている。
</p>
</dd>
<dt><em class="dfn">コメント</em></dt>
<dd><p>覚え書きなどの任意の情報であり,処理系で許す任意の文字を書くことができる。
</p></dd>
</dl>
</div>
</div>
<div class="section-level-extent" id="g_t_547d_4ee4_306e_7a2e_985e">
<h3 class="section"><span>2.2 命令の種類<a class="copiable-link" href="#g_t_547d_4ee4_306e_7a2e_985e"> ¶</a></span></h3>
<p>命令は,4種類のアセンブラ命令(<code class="code">START</code>,<code class="code">END</code>,<code class="code">DS</code>,<code class="code">DC</code>), 4種類のマクロ命令(<code class="code">IN</code>,<code class="code">OUT</code>)および機械語命令(COMET IIの命令)からなる。 その仕様を次に示す。
</p>
<img class="image" src="img/2_2-01.svg" alt="img/2_2-01">
</div>
<div class="section-level-extent" id="g_t_30a2_30bb_30f3_30d6_30e9_547d_4ee4">
<h3 class="section"><span>2.3 アセンブラ命令<a class="copiable-link" href="#g_t_30a2_30bb_30f3_30d6_30e9_547d_4ee4"> ¶</a></span></h3>
<p>アセンブラ命令は,アセンブラの制御などを行う。
</p>
<ol class="enumerate">
<li> <br> <img class="image" src="img/2_3-01.svg" alt="img/2_3-01"> <br>
<code class="code">START</code>命令は,プログラムの先頭を定義する。
<p>実行開始番地は,そのプログラム内で定義されたラベルで指定する。指定がある場合はその番地から,省略した場合は<code class="code">START</code>命令の次の命令から,実行を開始する。
</p>
<p>また,この命令につけられたラベルは,他のプログラムから入口名として参照できる。
</p>
</li><li> <br> <img class="image" src="img/2_3-02.svg" alt="img/2_3-02"> <br>
<code class="code">END</code>命令は,プログラムの終わりを定義する。
</li><li> <br> <img class="image" src="img/2_3-03.svg" alt="img/2_3-03"> <br>
<code class="code">DS</code>命令は,指定した語数の領域を確保する。
<p>語数は,10進定数(≥ 0)で指定する。語数を0とした場合,領域は確保しないが,ラベルは有効である。
</p>
</li><li> <br> <img class="image" src="img/2_3-04.svg" alt="img/2_3-04"> <br>
<code class="code">DC</code>命令は,定数で指定したデータを(連続する)語に格納する。
定数には,10進定数,16進定数,文字定数,アドレス定数の4種類がある。 <br>
<img class="image" src="img/2_3-05.svg" alt="img/2_3-05">
</li></ol>
</div>
<div class="section-level-extent" id="g_t_30de_30af_30ed_547d_4ee4">
<h3 class="section"><span>2.4 マクロ命令<a class="copiable-link" href="#g_t_30de_30af_30ed_547d_4ee4"> ¶</a></span></h3>
<p>マクロ命令は,あらかじめ定義された命令群とオペランドの情報によって, 目的の機能を果たす命令群を生成する(語数は不定)。
</p>
<ol class="enumerate">
<li> <br> <img class="image" src="img/2_4-01.svg" alt="img/2_4-01"> <br>
<code class="code">IN</code>命令は,あらかじめ割り当てた入力装置から,1レコードの文字データを読み込む。
<p>入力領域は,256語長の作業域のラベルであり,この領域の先頭から,1文字を1語に対応させて順次入力される。レコードの区切り符号(キーボ-ド入力の復帰符号など)は,格納しない。格納の形式は,<code class="code">DC</code>命令の文字定数と同じである。入力データが256文字に満たない場合, 入力領域の残りの部分は実行前のデータを保持する。入力データが256文字を超える場合, 以降の文字は無視される。
</p>
<p>入力文字長領域は,1語長の領域のラベルであり,入力された文字の長さ(≥ 0)が2進数で格納される。ファイルの終わり(end of file)を検出した場合は,-1が格納される。
</p>
<p><code class="code">IN</code>命令を実行すると,<code class="code">GR</code>の内容は保存されるが,<code class="code">FR</code>の内容は不定となる。
</p>
</li><li> <br> <img class="image" src="img/2_4-02.svg" alt="img/2_4-02"> <br>
<code class="code">OUT</code>命令は,あらかじめ割り当てた出力装置に,文字データを,1レコードとして書き出す。
<p>出力領域は,出力しようとするデータが1文字1語で格納されている領域のラベルである。 格納の形式は,<code class="code">DC</code>命令の文字定数と同じであるが, 上位8ビットは,OSが無視するので0でなくてもよい。
</p>
<p>出力文字長領域は,1語長の領域のラベルであり, 出力しようとする文字の長さ(≥ 0)を2進数で格納しておく。
</p>
<p><code class="code">OUT</code>命令を実行すると,<code class="code">GR</code>の内容は保存されるが,<code class="code">FR</code>の内容は不定となる。
</p>
</li><li> <br> <img class="image" src="img/2_4-03.svg" alt="img/2_4-03"> <br>
<code class="code">RPUSH</code>命令は,<code class="code">GR</code>の内容を,<code class="code">GR1</code>,<code class="code">GR2</code>,…,<code class="code">GR7</code>の順でスタックに格納する。
</li><li> <br> <img class="image" src="img/2_4-04.svg" alt="img/2_4-04"> <br>
<code class="code">RPOP</code>命令は,スタックの内容を順次取り出し,<code class="code">GR7</code>,<code class="code">GR6</code>,…,<code class="code">GR1</code>の順で<code class="code">GR</code>に格納する。
</li></ol>
</div>
<div class="section-level-extent" id="g_t_6a5f_68b0_8a9e_547d_4ee4">
<h3 class="section"><span>2.5 機械語命令<a class="copiable-link" href="#g_t_6a5f_68b0_8a9e_547d_4ee4"> ¶</a></span></h3>
<p>機械語命令のオペランドは,次の形式で記述する。
</p>
<dl class="table">
<dt><code class="code">r, r1 , r</code></dt>
<dd><p><code class="code">GR</code>は,記号<code class="code">GR0</code>~<code class="code">GR7</code>で指定する。
</p>
</dd>
<dt><code class="code">x</code></dt>
<dd><p>指標レジスタとして用いる<code class="code">GR</code>は,記号<code class="code">GR1</code>~<code class="code">GR7</code>で指定する。
</p>
</dd>
<dt><code class="code">adr</code></dt>
<dd><p>アドレスは,10進定数,16進定数,アドレス定数又はリテラルで指定する。
リテラルは,ひとつの10進定数,16進定数又は文字定数の前に等号(=)を付けて 記述する。CASL IIは,等号の後の定数をオペランドとする<code class="code">DC</code>命令を生成し, そのアドレスをadrの値とする。
</p></dd>
</dl>
</div>
<div class="section-level-extent" id="g_t_305d_306e_4ed6-1">
<h3 class="section"><span>2.6 その他<a class="copiable-link" href="#g_t_305d_306e_4ed6-1"> ¶</a></span></h3>
<ol class="enumerate">
<li> アセンブラによって生成される命令語や領域の相対位置は,アセンブラ言語での記述順序とする。ただし,リテラルから生成される<code class="code">DC</code>命令は,<code class="code">END</code>命令の直前にまとめて配置される。
</li><li> 生成された命令語,領域は,主記憶上で連続した領域を占める。
</li></ol>
</div>
</div>
<div class="chapter-level-extent" id="g_t_30d7_30ed_30b0_30e9_30e0_5b9f_884c_306e_624b_5f15">
<h2 class="chapter"><span>3 プログラム実行の手引<a class="copiable-link" href="#g_t_30d7_30ed_30b0_30e9_30e0_5b9f_884c_306e_624b_5f15"> ¶</a></span></h2>
<ul class="mini-toc">
<li><a href="#OS">OS</a></li>
<li><a href="#g_t_672a_5b9a_7fa9_4e8b_9805">未定義事項</a></li>
</ul>
<div class="section-level-extent" id="OS">
<h3 class="section"><span>3.1 OS<a class="copiable-link" href="#OS"> ¶</a></span></h3>
<p>プログラムの実行に関して,次の取決めがある。
</p>
<ol class="enumerate">
<li> アセンブラは,未定義ラベル(オペランド欄に記述されたラベルのうち,そのプログラム内で定義されていないラベル)を,他のプログラムの入口名(<code class="code">START</code>命令のラベル)と解釈する。この場合,アセンブラはアドレスの決定を保留し,その決定をOSに任せる。OSは,実行に先立って他のプログラムの入口名との連係処理を行いアドレスを決定する(プログラムの連係)。
</li><li> プログラムは,OS によって起動される。プログラムがロードされる主記憶の領域は不定とするが,プログラム中のラベルに対応するアドレス値は,OSによって実アドレスに補正されるものとする。
</li><li> プログラムの起動時に,OS はプログラム用に十分な容量のスタック領域を確保し,その最後のアドレスに1を加算した値を<code class="code">SP</code>に設定する。
</li><li> OSは,<code class="code">CALL</code>命令でプログラムに制御を渡す。プログラムを終了し OSに制御を戻すときは,<code class="code">RET</code>命令を使用する。
</li><li> <code class="code">IN</code>命令に対応する入力装置,<code class="code">OUT</code>命令に対応する出力装置の割当ては,プログラムの実行に先立って利用者が行う。
</li><li> OSは,入出力装置や媒体による入出力手続の違いを吸収し,システムでの標準の形式及び手続(異常処理を含む)で入出力を行う。したがって,<code class="code">IN</code>,<code class="code">OUT</code>命令では,入出力装置の違いを意識する必要はない。
</li></ol>
</div>
<div class="section-level-extent" id="g_t_672a_5b9a_7fa9_4e8b_9805">
<h3 class="section"><span>3.2 未定義事項<a class="copiable-link" href="#g_t_672a_5b9a_7fa9_4e8b_9805"> ¶</a></span></h3>
<p>プログラムの実行等に関し,この仕様で定義しない事項は,処理系によるものとする。
</p>
</div>
</div>
<div class="unnumbered-level-extent" id="g_t_53c2_8003_8cc7_6599">
<h2 class="unnumbered"><span>参考資料<a class="copiable-link" href="#g_t_53c2_8003_8cc7_6599"> ¶</a></span></h2>
<p>参考資料は,COMET IIの理解を助けるため又は COMET IIの処理系作成者に対する便宜のための資料である。したがって,COMET II,CASL IIの仕様に影響を与えるものではない。
</p>
<ul class="mini-toc">
<li><a href="#g_t_547d_4ee4_8a9e_306e_69cb_6210">命令語の構成</a></li>
<li><a href="#g_t_30de_30af_30ed_547d_4ee4-1">マクロ命令</a></li>
<li><a href="#g_t_30b7_30d5_30c8_6f14_7b97_547d_4ee4_306b_304a_3051_308b_30d3_30c3_30c8_306e_52d5_304d">シフト演算命令におけるビットの動き</a></li>
<li><a href="#g_t_30d7_30ed_30b0_30e9_30e0_306e_4f8b">プログラムの例</a></li>
</ul>
<div class="section-level-extent" id="g_t_547d_4ee4_8a9e_306e_69cb_6210">
<h3 class="section"><span>命令語の構成<a class="copiable-link" href="#g_t_547d_4ee4_8a9e_306e_69cb_6210"> ¶</a></span></h3>
<p>命令語の構成は定義しないが,次のような構成を想定する。ここで,<code class="code">OP</code>の数値は16進表示で示す。
</p>
<img class="image" src="img/r_1-01.svg" alt="img/r_1-01">
</div>
<div class="section-level-extent" id="g_t_30de_30af_30ed_547d_4ee4-1">
<h3 class="section"><span>マクロ命令<a class="copiable-link" href="#g_t_30de_30af_30ed_547d_4ee4-1"> ¶</a></span></h3>
<p>マクロ命令が生成する命令群は定義しない(語数不定)が,次の例のような命令群を生成することを想定する。
</p>
<p>〔例〕<code class="code">IN</code>命令
</p><pre class="verbatim">LABEL IN IBUF,LEN
</pre>
<p>マクロ生成
</p>
<pre class="verbatim">LABEL PUSH 0,GR1
PUSH 0,GR2
LAD GR1,IBUF
LAD GR2,LEN
SVC 1
POP GR2
POP GR1
</pre>
</div>
<div class="section-level-extent" id="g_t_30b7_30d5_30c8_6f14_7b97_547d_4ee4_306b_304a_3051_308b_30d3_30c3_30c8_306e_52d5_304d">
<h3 class="section"><span>シフト演算命令におけるビットの動き<a class="copiable-link" href="#g_t_30b7_30d5_30c8_6f14_7b97_547d_4ee4_306b_304a_3051_308b_30d3_30c3_30c8_306e_52d5_304d"> ¶</a></span></h3>
<p>シフト演算命令において,例えば,1ビットのシフトをしたときの動き及び<code class="code">OF</code>の変化は,次のとおりである。
</p>
<ol class="enumerate">
<li> 算術左シフトでは,ビット番号14の値が設定される。 <br>
<img class="image" src="img/r_1-02.svg" alt="img/r_1-02">
</li><li> 算術右シフトでは,ビット番号0の値が設定される。 <br>
<img class="image" src="img/r_1-03.svg" alt="img/r_1-03">
</li><li> 論理左シフトでは,ビット番号15の値が設定される。 <br>
<img class="image" src="img/r_1-04.svg" alt="img/r_1-04">
</li><li> 論理右シフトでは,ビット番号0の値が設定される。 <br>
<img class="image" src="img/r_1-05.svg" alt="img/r_1-05">
</li></ol>
</div>
<div class="section-level-extent" id="g_t_30d7_30ed_30b0_30e9_30e0_306e_4f8b">
<h3 class="section"><span>プログラムの例<a class="copiable-link" href="#g_t_30d7_30ed_30b0_30e9_30e0_306e_4f8b"> ¶</a></span></h3>
<pre class="verbatim">COUNT1 START ;
; 入力 ; GR1:検索する語
; 処理 ; GR1 中の'1'のビットの個数を求める
; 出力 ; GR0:GR1 中の'1'のビットの個数
PUSH 0,GR1 ;
PUSH 0,GR2 ;
SUBA GR2,GR2 ; Count = 0
AND GR1,GR1 ; 全部のビットが'0'?
JZE RETURN ; 全部のビットが'0'なら終了
MORE LAD GR2,1,GR2 ; Count = Count + 1
LAD GR0,-1,GR1 ; 最下位の'1'のビット 1 個を
AND GR1,GR0 ; '0'に変える
JNZ MORE ; '1'のビットが残っていれば繰返し
RETURN LD GR0,GR2 ; GR0 = Count
POP GR2 ;
POP GR1 ;
RET ; 呼出しプログラムへ戻る
END ;
</pre></div>
</div>
</div>
</body>
</html>