變數
變數是用來保存一個數值的物件,依據生存區域的不同,分為全域變數和區域變數
全域變數:在整個程式執行期間都能使用
區域變數:伴隨函式產生,只有在該次函式執行的時候能使用 (下一次呼叫函式的時候,得到的是清空過的區域變數,不會保存上次的數值)
變數宣告
變數在使用前必須要先宣告,讓機器認得那個變數,並為那個變數分配適當的儲存空間。
全域變數宣告
不可變動的全域變數
型別可以是 i32, i64, f32, f64,後面是借用常數指令來設定這個變數一開始的數值,除了對應的 i32.const, i64.const, f32.const, f64.const 之外,不可以用其他指令
這種方式宣告的全域變數不可變動,一旦宣告之後,就不能再改成其他數值
可變動的全域變數
加上 mut 表示可變動 (mutable),這樣就能在之後用 set_global 指令更改這個變數的值
也可以加上以 $ 開頭的名稱,讓之後的存取更方便
每個全域變數會有一個從 0 開始的編號,因此在 module 裡從上到下分別是 0, 1, 2 ...,之後存取變數的時候就是用編號來區分
區域變數宣告
區域變數是伴隨函式產生,所以區域變數的宣告也是寫在函式的地方
每個區域變數會有一個從 0 開始的編號,因此從左到右分別是 0, 1, 2 ...,之後存取變數的時候就是用編號來區分
當然為了方便,也可以將變數加上以 $ 開頭的名稱,不過就必須分開寫
另外區域變數都是可以變動的,沒有區分可不可變動,使用上要小心不要動到不希望變動的區域變數
變數指令
get_global
後面接上編號或名稱,將 全域變數 的值放進堆疊裡
set_global
後面接上編號或名稱,從堆疊裡取出一個數值,放進 全域變數
必須是 可變動 的全域變數才能執行這個操作
get_local
後面接上編號或名稱,將 區域變數 的值放進堆疊裡
set_local
後面接上編號或名稱,從堆疊裡取出一個數值,放進 區域變數
tee_local
後面接上編號或名稱,從堆疊裡取出一個數值,放進 區域變數,不過數值會再放回堆疊裡
可以比較一下這個範例和 set_local 範例的不同
Last updated