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