これを一行づつ動作を解析しながら読む. 面白い.
そのプログラムの中で使用されている, サブルーチン呼び出しから呼び出し元に戻るためのある $\mathrm{RTN}$ 命令の動作が不明になったのでマニュアルで $\mathrm{RTN}$ 命令の説明を読んでみた. そこには次のように記述されている.
$\mathrm{RTN}$: リターン。実行中のプログラムで, 若い行にある最も近くの $\mathrm{XEQ}$ の次の行に分岐します。該当の $\mathrm{XEQ}$ 命令が無い場合は, プログラムの実行は停止します。
調べたいと思っていたのは, $\mathrm{RTN}$ 命令に対応する $\mathrm{XEQ}$ 命令が存在しない場合の動作であり, その場合にはプログラムの実行が停止するという上記の記述によって, 疑問はひとまず解決した.
しかし, これとは直接関係しないが, 同じ説明の中によくわからない点が 1 箇所ある. 「実行中のプログラムで, 若い行にある最も近くの $\mathrm{XEQ}$ の次の行に分岐します」というところ. この $\mathrm{RTN}$ 命令に対応する, 呼び出し側の $\mathrm{XEQ}$ 命令の次の行に分岐する, の誤りではないのか?
確かめるために, 英語版のマニュアル "HP-42S RPN Scientific Calculator: Owner's Manual" の対応する箇所を調べた.
そこには次のように記述されている.
$\mathrm{RTN}$: Return. In a running program, branches the program pointer back to the line following the most recent $\mathrm{XEQ}$ instruction.
とある. これを読むと, 「若い行にある最も近くの $\mathrm{XEQ}$」ではなく「最も最近に実行された $\mathrm{XEQ}$ 命令の次の行にプログラムポインターを戻す」のだとわかる. 最も最近に実行された $\mathrm{XEQ}$ 命令とは, 現在実行中のサブルーチンを呼び出した $\mathrm{XEQ}$ 命令のことだから, 呼び出し元に戻るということに他ならない.
翻訳の誤りと思われるが, 英文のマニュアルではプログラムポインター (program pointer) という概念を直接使って説明をしている. 自分としてはこのほうが機械の動作する様子そのものをイメージしやすい.
今後は複雑なサンプルプログラムがたくさん出てくるので, 日本語マニュアルと英文マニュアルを併用して学んでいけばいいだろう.
【このカテゴリーの最新記事】
- no image
- no image
- no image
- no image
- no image