📅  最后修改于: 2020-11-02 05:10:19             🧑  作者: Mango
WebAssembly,也称为WASM,是二进制格式的低级代码,旨在以最有效的方式在浏览器中执行。 WebAssembly代码由以下概念构成-
现在让我们详细学习它们。
WebAssembly中的值用于存储复杂的数据,例如文本,字符串和向量。 WebAssembly支持以下内容-
字节是WebAssembly支持的最简单的值形式。十六进制格式。
例如
表示为b的字节也可以采用自然数n,其中n <256。
byte ::= 0x00| .... |0xFF
在WebAssembly中,支持的整数如下所示-
在WebAssembly中,支持的浮点数如下-
名称是字符序列,具有由Unicode定义的标量值,可在此提供的链接http://www.unicode.org/versions/Unicode12.1.0/获得。
WebAssembly中的实体被分类为类型。支持的类型如下所述-
让我们一一研究它们。
WebAssembly支持的值类型如下所述-
valtype ::= i32|i64|f32|f64
括号内的值将被执行并存储在结果类型中。结果类型是由值组成的代码块的执行结果。
resulttype::=[valtype?]
函数类型将采用参数向量,返回结果向量。
functype::=[vec(valtype)]--> [vec(valtype)]
限制是与内存和表类型链接的存储范围。
limits ::= {min u32, max u32}
内存类型处理线性内存和大小范围。
memtype ::= limits
表类型按分配给它的元素类型分类。
tabletype ::= limits elemtype
elemtype ::= funcref
表类型取决于为其分配的最小和最大大小的限制。
全局类型包含具有值的全局变量,这些值可以更改或保持不变。
globaltype ::= mut valtype
mut ::= const|var
外部类型处理导入和外部值。
externtype ::= func functype | table tabletype | mem memtype | global globaltype
WebAssembly代码是遵循堆栈计算机模型的一系列指令。当WebAssembly遵循堆栈计算机模型时,指令将被压入堆栈。
例如,从堆栈中弹出函数的参数值,然后将结果推回堆栈中。最后,堆栈中只有一个值,这就是结果。
一些常用的说明如下-
数字指令是对数字值执行的操作。
例如
nn, mm ::= 32|64
ibinop ::= add|sub|mul|div_sx|rem_sx|and|or|xor
irelop ::= eq | ne | lt_sx | gt_sx | le_sx | ge_sx
frelop ::= eq | ne | lt | gt | le | ge
变量指令与访问局部变量和全局变量有关。
例如
访问局部变量-
get_local $a
get_local $b
设置局部变量-
set_local $a
set_local $b
访问全局变量-
get_global $a
get_global $b
设置全局变量-
set_global $a
set_global $b