觉得这个说的很清楚,就把它翻译了一下,英文水平有限,凑乎着看吧:)
原文地址:
http://nsis.sourceforge.net/Pop,_Push,_Exch..._The_Stack
堆栈是 NSIS 维护的一堆数据,你可以根据需要往堆栈中存入任意大小的数据(as big as you like),所以你可以向堆栈中推入或读取数据,堆栈只有一个,堆栈遵守 LIFO (后进先出)的原则,堆栈可以用在例如:向函数或插件传递参数,也可以用来扩展 $0-$9 和 $R0-$R9 的值,通过将他们的值推入堆栈,然后给他们赋新值,在执行一些操作后,再从堆栈中恢复之前保存的值。与堆栈相关的操作有三个:Pop, Push 和 Exch。
将数值压入堆栈。数值位于堆栈的顶部,同时堆栈的大小增加 1。
Pop 弹出堆栈顶部的数据并赋给指定的变量,同时堆栈大小减 1。如果堆栈中没有任何数据(堆栈大小为0),将设置错误标志。
Exch 交换两个值,如果调用 Exch 没有指定任何参数,将交换堆栈顶部的两个数据。如果指定了一个用户变量作为 Exch的参数,变量的值将和堆栈顶部的数据交换。如果调用 Exch 并指定了一个栈的索引(从 0 开始,0 代表堆栈顶部的栈),将交换堆栈顶部和指定的栈的数据。
范例
下面的例子将向你展示如何使用 Pop, Push 和 Exch。左边是执行的代码,右边是在代码执行后堆栈中的数值。
| Code
| Stack
|
Push "Value 1" Push "Value 2"
|
Value 2 Value 1
|
Pop $0 ;$0 contains: "Value 2"
|
Value 1
|
Push $0 Push "Value 3" Push "Value 4"
|
Value 4 Value 3 Value 2 Value 1
|
Exch ; No parameters ;Exchanges the top two values of the stack.
|
Value 3 Value 4 Value 2 Value 1
|
StrCpy $0 "Value X" Exch $0 ;Exchanges the top value with the variable. ;$0 contains "Value 3"
|
Value X Value 4 Value 2 Value 1
|
Exch 3 ;Exchanges the top value with the fourth value (thus index 3).
| Value 1 Value 4 Value 2 Value X
|
发表于 @ 2008年08月21日 09:18:00|评论(loading...)|收藏