アフィリエイト広告を利用しています

2019年02月11日

HP-42S: 分岐命令 ── XEQ 命令

HP-42S: 分岐命令 ── GTO 命令
の続き.

HP-42S が備えているプログラムの処理を分岐させるための 2 つの命令:
\begin{equation*}
\newcommand{\Ar}[1]{\mathrm{Ar}(#1)}
\newcommand{\ar}{\mathrm{ar}}
\newcommand{\arop}{\Opp{\mathrm{ar}}}
\newcommand{\Cocone}[2]{\mathrm{Cocone}(#1,#2)}
\newcommand{\Colim}{\mathrm{colim}}
\newcommand{\CommaCat}[2]{(#1 \downarrow #2)}
\newcommand{\Cone}[2]{\mathrm{Cone}(#1,#2)}
\newcommand{\Func}[2]{\mathrm{Func}(#1,#2)}
\newcommand{\Hom}{\mathrm{Hom}}
\newcommand{\Id}[1]{\mathrm{id}_{#1}}
\newcommand{\Mb}[1]{\mathbf{#1}}
\newcommand{\Mr}[1]{\mathrm{#1}}
\newcommand{\Ms}[1]{\mathscr{#1}}
\newcommand{\Mt}[1]{\mathtt{#1}}
\newcommand{\Nat}[2]{\mathrm{Nat}(#1,#2)}
\newcommand{\Ob}[1]{\mathrm{Ob}(#1)}
\newcommand{\Opp}[1]{{#1}^{\mathrm{op}}}
\newcommand{\Pos}{\mathbf{Pos}}
\newcommand{\q}{\hspace{1em}}
\newcommand{\qq}{\hspace{0.5em}}
\newcommand{\Rest}[2]{{#1}|{#2}}
\newcommand{\Sub}{\mathrm{Sub}}
\newcommand{\Src}{d^{0,\mathrm{op}}}
\newcommand{\Tgt}{d^{1,\mathrm{op}}}
\Mr{GTO}, \quad \Mr{XEQ}
\end{equation*} のうち, $\Mr{GTO}$ 命令はメモリー内に置かれたラベルに処理を移す $\Mr{goto}$ に相当する.
一方, $\Mr{XEQ}$ 命令は, サブルーチンの呼び出しに相当する. 移動先の処理中に $\Mr{RTN}$ 命令または $\Mr{END}$ 命令に遭遇すると, プログラムの処理は $\Mr{XEQ}$ 命令の次の行に戻って来る. ここまで処理がなされて, $\Mr{XEQ}$ 命令による分岐処理が完了する.

マニュアルによれば, $\Mr{XEQ}$ 命令による処理の分岐が行われると, HP-42S はその $\Mr{XEQ}$ 命令の位置を記憶する. これにより, 分岐先での処理が終了して $\Mr{RTN}$ 命令または $\Mr{END}$ 命令が実行されると, 元の位置に戻って処理を継続することができる.

なお, $\Mr{XEQ}$ 命令は, キーボードからプログラムを実行する際にも使用される.

■ サンプルプログラム
以下のような二つのプログラム $\text{"PRG3"}$, $\text{"PRG4"}$ を考える.



\begin{align*}
& 01 \q \Mr{LBL} \qq \text{"PRG3"} & \q & ; \text{グローバルラベル: PRG3.} \\
& 02 \q \Mr{XEQ} \qq \text{"PRG4"} & & ; \text{グローバルラベル "PRG4" に分岐. HP-42S はこの XEQ 命令行の位置を記憶.} \\
& 03 \q \Mr{TONE} \qq \Mr{0} & & ; \text{ビープ音を鳴らす. トーン番号 0 の音が鳴る.} \\
& 04 \q \Mr{END} & & \\
& & & \\
& 01 \q \Mr{LBL} \qq \text{"PRG4"} & & ; \text{グローバルラベル: PRG4.} \\
& 02 \q \Mr{TONE} \qq \Mr{9} & & ; \text{ビープ音を鳴らす. トーン番号 9 の音が鳴る.} \\
& 03 \q \Mr{END} & &
\end{align*}


1 番目のプログラム $\text{"PRG3"}$ を
\begin{equation*}
\Mr{XEQ} \qq \text{"PRG3"}
\end{equation*} (キーボードからプログラムを実行するための $\Mr{XEQ}$ 命令の例) により実行すると $\Mr{02}$ 行目の $\Mr{XEQ}$ 命令により処理がグローバルラベル $\text{"PRG4"}$ に分岐する. プログラム $\text{"PRG4"}$ の $\Mr{02}$ 行目の $\Mr{TONE} \qq \Mr{9}$ によって, トーン番号 $9$ に対応するビープ音が鳴る.
$\Mr{03}$ 行目に置かれた $\Mr{END}$ 命令によって, 処理はプログラム $\text{"PRG3"}$ に戻り, $\Mr{03}$ 行目から実行が継続される.
これにより, プログラム $\text{"PRG3"}$ の $\Mr{TONE} \qq \Mr{0}$ によって, トーン番号 $0$ に対応するビープ音が鳴る.
$\Mr{04}$ 行目の $\Mr{END}$ 命令によって, 全処理が終了する.

呼び出し先のプログラム $\text{"PRG4"}$ の $\Mr{02}$ 行目にある $\Mr{TONE} \qq \Mr{9}$ と, 呼び出し元のプログラム $\text{"PRG3"}$ の $\Mr{03}$ 行目にある $\Mr{TONE} \qq \Mr{0}$ の両方が実行される.
つまり, ビープ音は 2 度鳴る.

なお, $\Mr{XEQ}$ 命令によるサブルーチン呼び出しが行われる度に, そのアドレスが戻り位置として記憶されるが, その個数には上限がある.
HP-42S が記憶できる戻り位置の最大個数は 8 個である. もし最大値である 8 個, 戻り位置が記憶された状態で 9 個目のサブルーチン呼び出しが行われた場合, 1 個目すなわち最も古い戻り位置のアドレスが失われてしまう. これにより, プログラムの処理は, 一番最初の $\Mr{XEQ}$ 命令には戻って来ることができず, その時点で実行が途中終了する.

HP-42S によるプログラミングの勉強も, 分岐命令まで辿り着いた.
この後はプログラマブルメニュー (分岐先をメニューにより指定する機能), 条件判断機能, ループ制御機能などが出てくる.
理解するのが大変になるだろうが, その分面白くなっていきそうで楽しみだ.
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

この記事へのトラックバックURL
https://fanblogs.jp/tb/8549888

この記事へのトラックバック
ファン
検索
<< 2024年10月 >>
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
最新記事
最新コメント
眼科の定期検査 〜 散歩 by コトタマ (02/15)
眼科の定期検査 by 三文字寄れば文殊のヒフミヨ (09/21)
本を読んで過ごす by 底彦 (12/13)
本を読んで過ごす by ねこ (12/12)
数学の計算をする by 底彦 (12/04)
タグクラウド
カテゴリアーカイブ
仕事(59)
社会復帰(22)
(43)
コンピューター(211)
(1417)
借金(8)
勉強(13)
(12)
数学(97)
運動(8)
日常生活(1387)
(203)
健康(36)
読書(20)
プロフィール

ブログランキング・にほんブログ村へ
にほんブログ村
にほんブログ村 メンタルヘルスブログ うつ病(鬱病)へ
にほんブログ村
にほんブログ村 科学ブログ 数学へ
にほんブログ村
にほんブログ村 IT技術ブログ プログラム・プログラマーへ
にほんブログ村