間違っていたのはスタックの動作についての理解で, 具体的には "Enter" ボタンを押したときに引き起されるスタックの動作 である.
以下, 修正した文章を記しておく.
12 + 7 を計算するとき, HP-42S では次のような操作を行う.
12 ENTER 7 +
ここで,
12
, 7
は数字ボタンを使って入力する. ENTER
は "Enter" ボタンを押すことを意味する. +
は "+" ボタンを押すことを意味する.このとき HP-42S はスタック X, Y, Z, T (下から順) を使って次の処理を行う.
※: 各行の
|XXXX
の右側が以前の文章で書いた間違った記述である.(0) 最初のスタックの内容が次のようになっていると仮定する (任意でよい).
T: 8128
Z: 496
Y: 28
X: 6
(1) "
12
" が入力された時点で X レジスター (スタックの最下段) の内容が 12 となる.スタックが 1 段上昇する.
これにより, (0) のスタックの内容は次のように変化する.
・ T レジスターの元の内容 8128 は失われる.
・ T レジスターの新しい内容は Z レジスターの元の内容 496 になる.
・ Z レジスターの新しい内容は Y レジスターの元の内容 28 になる.
・ Y レジスターの新しい内容は X レジスターの元の内容 6 になる.
・ X レジスターの新しい内容は入力された数値 12 になる.
T: 496 |XXXX T: 8128
Z: 28 |XXXX Z: 496
Y: 6 |XXXX Y: 28
X: 12 |XXXX X: 12
(2) "Enter" ボタンが押されて "
ENTER
" 操作が実行される. 次の 3 つの処理が引き起こされる.(2-1) スタックを 1 段上昇する;
(2-2) X レジスターの内容を Y レジスターにコピーする;
(2-3) 次に数値が入力されたときにスタックが上昇することを禁止する.
これにより, (1) のスタックの内容は次のように変化する.
T: 28 |XXXX T: 496
Z: 6 |XXXX Z: 28
Y: 12 |XXXX Y: 12
X: 12 |XXXX X: 12
(3) "
7
" を入力した時点で X レジスターの内容が 7 に書き換えられる. (2-3) によりスタックは上昇しない.これにより, (3) のスタックの内容は次のように変化する.
T: 28 |XXXX T: 496
Z: 6 |XXXX Z: 28
Y: 12 |XXXX Y: 12
X: 7 |XXXX X: 7
(4) "+" ボタンが押されると加算操作が実行されて, スタックが 1 段下降する.
これにより, スタックの内容は次のように変化する.
・ X レジスターの内容 (= 7) に Y レジスターの内容 (= 12) が加算された結果 (= 19) が X レジスターの新しい内容になる.
・ Y レジスターに Z レジスターの内容 (= 6) がコピーされる.
・ Z レジスターに T レジスターの内容 (= 28) がコピーされる.
・ T レジスターの内容 (= 28) は保持される.
T: 28 |XXXX T: 496
Z: 28 |XXXX Z: 496
Y: 6 |XXXX Y: 28
X: 19 |XXXX X: 19
以上.
頭の中だけでとうとう理解したなどと思って喜んでいたのが馬鹿みたいだ.
しかし間違いに気が付いてよかった.
そういうことなので, 今回が本当に正しいかどうかは数日 HP-42S を確認しながら使ってみないとわからない.
理解するということは難しい.
【このカテゴリーの最新記事】
-
no image
-
no image
-
no image
-
no image
-
no image