NSIS 的堆栈操作 POP Push Exch

觉得这个说的很清楚,就把它翻译了一下,英文水平有限,凑乎着看吧:)

原文地址: 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"
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值