指令有两种写法:普通形式和折叠形式普通格式基本和二进制编码格式一样,容易理解。折叠形式则是语法糖,更方便人类编写,但WAT编译器会把他们全部展开。
普通形式
就是操作码后跟立即数,下面展示了除控制指令外其他指令的一般写法:
(module
(memory 1 2)
(global $g1 (mut i32) (i32.const 0))
(func $f1)
(func $f2 (param $a i32)
i32.const 123
i32.load offset=100 align=4
i32.const 456
i32.store offset=200
global.get $g1
local.get $a
i32.add
call $f1
drop
)
)
大部分指令的立即数(如果有)都是不能省略的,必须以数值或名字的形式跟在操作码后面。
内存读写系列指令是个例外,offset和align这两个立即数都是可选的,需要显式指定(名称和数值用等号分开)。
结构化控制指令(block、loop和if)可以指定可选的参数和结果类型,必须以end结尾。if指令还可以用else分隔成两条指令。
折叠形式
折叠指令实际上是把指令从扁平结构变成了树形结构。