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