ホーム

オリジナルファイルは、 Pop, Push, Exch... The Stack です。

Pop, Push, Exch... スタック

4.9.9 スタック

スタックは、NSISによって保持されている値の山です。 この山は好きなだけ大きくできるので、値をスタックに置いたりスタックから値を受け取ることが できます。スタックは1つだけあります。スタックはLIFO(Last In First Out 最後に入れたものを 最初に出す)原則に従っています。例えば、パラメータを関数やプラグインに渡すためにスタックを 使う事ができます。現在の値をスタックに置く事によって、$0-$9 と $R0-$R9値 を、新しい値を それらに割り当てて それで何かをして 古い値を変数に戻す事に広がって使用できます。スタックとの 相互作用のために使われうる3つの命令があります:Pop, Push, Exchです。

 

4.9.9.3 Push

push命令はスタックの上に値をpushします。値はスタックの「てっぺんに」置かれます。 スタックのサイズはそれにより増大します。

 

4.9.9.2 Pop

pop命令は、「てっぺんの値」をスタックから取り出しそれを指定された変数に割り当てます。 スタックのサイズはそれにより減少します。もしスタックに値が全くない(例えば、スタックのサイズ が 0 )なら、エラーフラグがセットされるでしょう。

 

4.9.9.1 Exch

Exchは2つの値を入れ換えます。もしExchがどんなパラメーターも無しに使用されると、スタックの 「てっぺん2つ」の値が交換されます。もしユーザー変数がExch命令の為のパラメーターとして 使われると、スタックの値が変数に割り当てられ、変数の値がスタックの「てっぺんに」置かれます。 もしExchがスタックインデックス(例えば スタック上の値を指し、0(てっぺんの値)で始まる数字) との組み合わせで使われると、てっぺんの値は指定されたインデックスで値と交換されます。

 

Examples

以下の例は、Pop、Push、Exch命令の使用を示しています。左で実行されたコードが示されます。 そして右で、コードを実行した後にスタックにある値を見ます。(上から下へ連続しています。)

Code Stack
Push "Value1"
Push "Value2"
Value 2
Value 1
Pop $0
; $0 は "Value 2"を含んでいる
Value 1
Push $0
Push "Value 3"
Push "Value 4"
Value 4
Value 3
Value 2

Value 1
Exch ;パラメーター無し
; スタックの上から2つの値を交換する
Value 3
Value 4

Value 2
Value 1
StrCpy $0 "Value X"
Exch $0
; てっぺんの値と変数を交換
; $0 は"Value 3"を含んでいる
Value X
Value 4
Value 2
Value 1
Exch 3
; てっぺんの値と4番目の値(従って index 3)を交換
Value 1
Value 4
Value 2
Value X