复制代码代码如下:
函数 mymodule(全局、外部、缓冲区) {
“使用汇编”;
// ------------------------------------------------ ------------------------
// 第 1 部分:导入
var H32 = new global.Int32Array(buffer);
var HU32 = new global.Uint32Array(buffer);
var log =foreign.consoleDotLog;
// ------------------------------------------------ ------------------------
// 第 2 部分:函数
函数 f(x, y, z, w) {
// A 部分:参数类型声明
x = x | 0; // int 参数
y=+y; // 双参数
// B 部分:函数体
日志(x|0); // 调用 FFI -- 必须强制标志
日志(y); // 调用 FFI —— 已经知道它是一个 double
x = (x+3)|0; // 有符号加法
// C 部分:无条件返回
返回 ((((x+1)|0)>>>0)/(x|0))>>>0; // 复合表达式
}
函数 g() {
g_f = +g_i; // 读/写全局变量
返回;
}
函数 g2() {
返回;
}
函数 h(i, x) {
我=我|0;
x = x | 0;
H32[(i&0xffffffff)>>4] = x; // 用 2^k-1 掩码,按字节数移位
ftable_2[(x-2)&2](); // 动态调用表2中的函数
}
// ------------------------------------------------ ------------------------
// 第 3 部分:函数表
var ftable_1 = [f];
var ftable_2 = [g, g2]; // 全部相同类型
// ------------------------------------------------ ------------------------
// 第 4 节:全局变量
var g_i = 0; // 全局整型
var g_f = 0.0; // 双全局
// ------------------------------------------------ ------------------------
// 第 5 部分:导出
返回 { f_export: f, goop: g };
}