Fun 语言和汇编 ..
作者: 一了 <1liao3@funlang.org>
日期: 2019-08-08
Fun 语言内嵌汇编
嵌入汇编以取得机器的 CpuId.
use 'lib-asm-pro.fun';
var s = `#!asm
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 asm = Assembly('i:i', s);
var ptr = cpu.toNum(-1);
?. int2hex(asm.Load().Run(ptr));
asm.Delete();
?. str2hex(cpu);
?. 'Ok';
E9060800
e9060800ffbbab0f
Ok
汇编回调 Fun 语言函数
在汇编内调用 Fun 语言代码.
use 'lib-asm-pro.fun';
fun inc2(a)
?. a;
return a + 2;
end fun;
fun inc1(a)
?. a;
return a + 1;
end fun;
var s = `#!asm
push dword ptr [esp+04] ; 参数
mov eax, ; 函数地址
call eax
`; //?. s;
var asm = Assembly('i:i', s, [test: inc2.@toCallback(nil, 'i:i', true)]);
?. asm.Load().Run(100);
asm.Delete();
?. 'Ok';
100
102
Ok