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

2018年10月27日

HP-42S: 英数字データの取り扱い (1)

理解するのに苦労したのだが, ようやく HP-42S での文字列データの取り扱いについてある程度イメージが掴めたと思う.

HP-42S では, 英数字データ, つまり文字列は ALPHA レジスターという特別なレジスターを用いて保存・呼び出しを行う.
せっかくなのでまとめておく.

● ALPHA レジスターからのデータの保存, 呼び出し: $\mathrm{ASTO}$ 命令と $\mathrm{ARCL}$ 命令

ALPHA レジスターから他の変数やレジスターへのデータのコピーには $\mathrm{ASTO}$ 命令を用いる.
変数やレジスターに保存されているデータを ALPHA レジスターに呼び出すには $\mathrm{ARCL}$ 命令を用いる.

HP-42S のディスプレイは上下 2 段あって, 通常は上段に $\mathrm{Y}$ レジスターの内容, 下段に $\mathrm{X}$ レジスターの内容が表示されている.
\begin{align*}
\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}}}
\Mt{Y:} & \qq\Mt{990} \\
\Mt{X:} & \qq\Mt{1,539}
\end{align*}

ALPHA レジスターには最大 44 文字 (= 44 バイト) まで保存できる.
$\Mr{ALPHA}$ キーを押すと, 文字列の ALPHA レジスターへの入力が開始される.
次の 47 バイトの文字列を入力してみる.
\begin{equation*}
\Mt{The~wind~howls,~but~the~mountain~remains~still.}
\end{equation*}
最後の $\Mt{still}$ の $\Mt{i}$ (44 バイト目) まで入力した時点でビープ音がして, それ以上の入力ができなくなる.
$\Mr{ENTER}$ キーを入力して入力を終了する.

これによって文字列
\begin{equation*}
\Mt{The~wind~howls,~but~the~mountain~remains~sti}
\end{equation*} が ALPHA レジスターに保存される. この状態で ALPHA レジスターの内容を表示すると, 画面 2 段いっぱいに
\begin{align*}
& \Mt{The~wind~howls,~but~th} \\
& \Mt{e~mountain~remains~sti}
\end{align*} と表示される. ディスプレイの 2 段を用いて表示できる最大の文字数が 44 バイトなのだとわかる.

上記の ALPHA レジスター内の文字列をレジスターや変数に保存する場合には, $\Mr{ASTO}$ 命令を使用する.

ただし, $\Mr{ASTO}$ 命令による保存は, ALPHA レジスター内のデータ全体ではなくて, 最初の 6 バイトのみを保存先の変数やレジスターにコピーする.

たとえば, レジスター $\Mr{R_{05}}$ に ALPHA レジスターの内容を保存する場合を考える.
\begin{equation*}
\Mr{ASTO} \qq \Mr{05}
\end{equation*} 保存した後にレジスター $\Mr{R_{05}}$ の内容を呼び出す.
\begin{equation*}
\Mr{RCL} \qq \Mr{05}
\end{equation*} するとディスプレイには
\begin{align*}
\Mt{Y:} & \qq\Mt{1,539} \\
\Mt{X:} & \qq\Mt{"The~wi"}
\end{align*} と表示される.
$\Mr{X}$ レジスターに ALPHA レジスターの内容の最初の 6 バイトが呼び出されている.
つまりレジスター $\Mr{R_{05}}$ に保存されているデータは $\Mt{The~wi}$ という 6 バイトのデータである.

次に, 上の状態で $\Mr{Y}$ レジスター内の数値データ $1539$ を ALPHA レジスターに呼び出してみる.

ALPHA レジスターに, 変数やレジスターの内容を呼び出すには $\Mr{ARCL}$ 命令を使用する.

この場合, 数値は 5 バイト長の文字列 $\Mt{1,539}$ に変換されて ALPHA レジスター内のデータの末尾にコピーされる.

現在, ALPHA レジスターにはすでに最大の 44 バイト長のデータ:
\begin{align*}
& \Mt{The~wind~howls,~but~th} \\
& \Mt{e~mountain~remains~sti}
\end{align*} が保存されている.
これに対して $\Mr{Y}$ レジスターの内容を呼び出す.
\begin{equation*}
\Mr{ARCL} \qq \bullet \qq \Mr{ST Y}
\end{equation*} この状態で ALPHA レジスターの内容をディスプレイに表示する.
\begin{equation*}
\Mr{PGM.FCN} \qq \Mr{AVIEW}
\end{equation*} するとディスプレイには次のようなデータが表示される.
\begin{align*}
& \Mt{ind~howls,~but~the~mou} \\
& \Mt{ntain~remains~sti1,539}
\end{align*} つまり ALPHA レジスターがすでに一杯の場合には, ALPHA レジスターの左端の文字 (一番古い文字) から消えていき, 新規データの入力場所が作られる.
この例では, 文字列 $\Mt{"1,539"}$ を ALPHA レジスターの末尾に追加するために, 元々のデータの先頭の 5 バイト $\Mt{"The~w"}$ が消去される.

このような, 計算機の動作に関することはイメージが把握できるととても面白い.
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

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

この記事へのトラックバック
ファン
検索
<< 2024年11月 >>
          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
最新記事
最新コメント
眼科の定期検査 〜 散歩 by コトタマ (02/15)
眼科の定期検査 by 三文字寄れば文殊のヒフミヨ (09/21)
本を読んで過ごす by 底彦 (12/13)
本を読んで過ごす by ねこ (12/12)
数学の計算をする by 底彦 (12/04)
タグクラウド
カテゴリアーカイブ
仕事(59)
社会復帰(22)
(44)
コンピューター(211)
(1440)
借金(8)
勉強(13)
(13)
数学(97)
運動(8)
日常生活(1402)
(204)
健康(38)
読書(21)
プロフィール

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