指令有两种写法:普通形式和折叠形式普通格式基本和二进制编码格式一样,容易理解。折叠形式则是语法糖,更方便人类编写,但WAT编译器会把他们全部展开。

    普通形式
    就是操作码后跟立即数,下面展示了除控制指令外其他指令的一般写法:

    1. (module
    2. (memory 1 2)
    3. (global $g1 (mut i32) (i32.const 0))
    4. (func $f1)
    5. (func $f2 (param $a i32)
    6. i32.const 123
    7. i32.load offset=100 align=4
    8. i32.const 456
    9. i32.store offset=200
    10. global.get $g1
    11. local.get $a
    12. i32.add
    13. call $f1
    14. drop
    15. )
    16. )

    大部分指令的立即数(如果有)都是不能省略的,必须以数值或名字的形式跟在操作码后面。
    内存读写系列指令是个例外,offset和align这两个立即数都是可选的,需要显式指定(名称和数值用等号分开)。
    结构化控制指令(block、loop和if)可以指定可选的参数和结果类型,必须以end结尾。if指令还可以用else分隔成两条指令。

    折叠形式
    折叠指令实际上是把指令从扁平结构变成了树形结构。