定义:
WASM是一种为了基于栈的虚拟机设计的二进制指令格式
数据类型:
数值类型:
i32 i64
f32 f64
数组类型: v128
注意: 没有布尔, 字符串,f16, i128, 复杂类型
WASM指令集:
- 数值操作
- 数组操作
- 变量操作
- 控制流
- 内存操作
- 表格操作
Wasm的组成部分
| Id | Section | Desc |
|---|---|---|
| 0 | custom section | WASM执行过程会忽略, 包含一些调试信息,版本信息 |
| 1 | type scecion | 包含所有的函数的签名 type $name func((param i32) (result i32)) |
| 2 | import section | 用来声明外部导入的元素: - 函数 - 内存 - 表格 - 全局变量 (func $name import("mod", "name") (param i32) (result i32) ) |
| 3 | function section | 用来声明函数的定义 (func $name (param ¥arg1 i32) (result i32) INST 1 INST 2 ... ) |
| 4 | table section | 定义了用到的表格 (table 1 1 funcref) |
| 5 | memory section | 定义了用到的内存 (memory 1 10) |
| 6 | global section | 定义了全局变量 |
| 7 | export section | 定义了导出的元素 (export "name" (memory 0)) (export "name" (func $name)) |
| 8 | start section | 入口函数 |
| 9 | element section | 为表格内容进行初始化 |
| 10 | code section | 二进制格式中包含了函数的指令 |
| 11 | data section | 用来初始化内存的内容 |
| 12 | data count section |
执行流程
image.png
执行环境
- 浏览器中: V8引擎
- 浏览器外: Wasmtime WasmEdgeRuntime
Wasmtime
是一个使用Rust编写的Wasm 运行时,有字节码联盟推出
image.png









网友评论