我正在阅读doc以编写NSIS安装程序。我匆匆忙忙地these lines:
NSIS用于编写脚本的指令是PHP和程序集之间的交叉。没有真正的高级语言结构,但是指令本身(大部分)是高级的,并且你有方便的字符串功能(即你不必担心连接字符串等)。你基本上有25个寄存器(20个通用,5个特殊用途)和一个堆栈。
语言有25个寄存器和堆栈是什么意思?这些是数据结构。 IMO这些与内存管理有关,而不是语言语法或结构。这与语言结构/语法有何关系?
由于
答案 0 :(得分:2)
文档涉及寄存器
$0
.. $9
$R0
.. $R9
$CMDLINE
$INSTDIR
$OUTDIR
$EXEDIR
$LANGUAGE
您也可以将它们称为变量,它们只是预先存在的内置全局变量。前20个是一般使用变量,最后一个在nsis脚本中有专用的用法。
关于堆栈,在执行安装程序(或卸载程序)期间,您实际上可以push
和pop
任意值,但它在某种程度上是高级别 stack,因为你不仅可以推送数字寄存器,还可以推送字符串。您可以通过交换值来使用堆栈,就像使用Forth或HP计算器的RPL语言一样。
答案 1 :(得分:2)
寄存器只是始终存在的变量(后来添加了使用var
创建更多变量的能力。)
StrCpy $0 $windir 1
MessageBox mb_ok "The first character is $0"
在内部NSIS解释器有点像CPU,有一个指令指针,你可以做相对跳转等。没有语法糖来隐藏你将参数传递给函数的方式,这就是为什么你必须修改NSIS堆栈直接:
Function DoMagic
pop $0 ; $0 now contains the value that was on top of the stack
; Do something with $0
FunctionEnd
...
push 0xf00ba5
call DoMagic
push "Hello world"
call DoMagic
有一个迷你指南堆栈on the wiki ...