作者: 一了 <[email protected]> 日期: 2026-07-15 use 'lib-jit.fun'; # 汇编 var s = `#!asm i:i pop ebx pop eax push eax push ebx push edi mov edi,eax mov eax,$00000001 ; cpuid cpuid push eax stosd mov eax,edx stosd pop eax pop edi `; var cpu = ' '.x(8 div charSize()); var jit = NewJit(s); var ptr = cpu.toNum(-1); ?. int2hex(jit.Run(ptr)); jit.Delete(); ?. str2hex(cpu); ?. 'Ok'; # 机器码 s = `#!hex i:i 5b 58 50 53 89e3 40 `; jit = NewJit(s); ?. jit.Run(1000); jit.Delete(); ?. 'Ok'; # C s = `#!C i:i int is_prime(int n) { if (n < 2) return 0; if (n == 2) return 1; if (n % 2 == 0) return 0; for (int i = 3; i * i <= n; i += 2) if (n % i == 0) return 0; return 1; } `; jit = NewJit(s); ?. jit.call(1000000007); jit.del(); ?. 'Ok'; 将上述代码拷入 fun ide 中, 按 F11 即可看到运行结果. A4060B00 a4060b00ffcc8c0f Ok 1001 Ok 1 Ok 支持回调, 如下: use 'lib-jit.fun'; var ii = 0; fun cb(a, b) ii = a * 2^32 + b; ?, 'cb'; ?. ii; result = ii; end fun; # 汇编 var s = `#!asm i:i mov ecx, dword ptr [esp+04] @sum1ton push eax push edx mov eax, <test> call eax `; var jit = NewJit(s, names: [test: cb.@toCallback(nil, 'ii:i', true)]); ?. jit.Run(100000000); jit.Delete(); ?. 'Ok'; # C s = `#!C ii:i int sum(int n, int (*test)(int, int)) { long long s = 0; for(int i = 1; i <= n; i++) s += i; test((int)(s >> 32), (int)(s & 0xFFFFFFFF)); return 1; } `; jit = NewJit(s); ?. jit.call(100000000, cb.@toCallback(nil, 'ii:C', true)); jit.del(); ?. 'Ok'; 运行结果: cb 5.00000005E15 987459712 Ok cb 5.00000005E15 1 Ok