br

br 语句跳转到循环(loop)标签、块(block)标签或 if 标签。

br 有两个变体,br_if 按条件进行跳转,br_table 则基于参数的值跳转到不同的块。

尝试一下

(module ;; 导入浏览器 console 对象,你需要将其从 JavaScript 传入 (import "console" "log" (func $log (param i32))) ;; 创建一个全局变量并初始化为 0 (global $i (mut i32) (i32.const 0)) (func (loop $my_loop ;; 给 $i 加 1 global.get $i i32.const 1 i32.add global.set $i ;; 打印当前的 $1 值 global.get $i call $log ;; 如果 $1 小于 10,则跳转到循环标签 global.get $i i32.const 10 i32.lt_s br_if $my_loop ) ) (start 1) ;; 自动运行第一个函数 ) 
const url = "{%wasm-url%}"; await WebAssembly.instantiateStreaming(fetch(url), { console }); 

语法

wat
;; 对循环打标签,使其可以被跳转 (loop $my_loop ;; 跳转到该循环。 ;; 大多数时候,你会想要将下面的指令放在 if 语句中,仅在符合条件时跳转, ;; 否则,会进入无限循环。 br $my_loop ) 
指令 二进制操作码
br 0x0c
br_if 0x0d
br_table 0x0e