br
br
是讓程式跳躍至指定區塊(可能是 loop、block 或是 if)。
br
有以下幾種變體:br_if
是在符合指定條件下程式才會跳躍至指定區塊;br_table
則是根據給予的參數不同,跳至不同區塊。
嘗試一下
(module
;; import the browser console object, you'll need to pass this in from JavaScript
(import "console" "log" (func $log (param i32)))
;; create a global variable and initialize it to 0
(global $i (mut i32) (i32.const 0))
(func
(loop $my_loop
;; add one to $i
global.get $i
i32.const 1
i32.add
global.set $i
;; log the current value of $i
global.get $i
call $log
;; if $i is less than 10 branch to loop
global.get $i
i32.const 10
i32.lt_s
br_if $my_loop
)
)
(start 1) ;; run the first function automatically
)
const url = "{%wasm-url%}";
await WebAssembly.instantiateStreaming(fetch(url), { console });
語法
wasm
;; 建立一個 loop 區塊,讓程式在之後可以跳回
(loop $my_loop
;; 跳回至 loop。
;; 在絕大多數的情況,你會希望其在特定條件下才回到 loop ,
;; 否則程式就會進入無限循環。
br $my_loop
)
指令 | 二進制運算碼 |
---|---|
br |
0x0c |
br_if |
0x0d |
br_table |
0x0e |