プログラムにマシン語を埋め込んでみます。
ただし、マシン語とは言っても、
いわゆるプロシージャのみとなりますが。。。
まず、MASM32なんかでプロシージャ形式のマシン語の羅列を作成します。
※拡張子がBINのヤツに変換、リンカは16bit版でないとダメなようですが。。。
コード:
Dim asm[ELM(11)]=[&H55,&H8B,&HEC,&H8B,&H45,&H08,&H40,&HC9,&HC2,&H04,&H00] As Byte
続いて関数ポインタを作成します。
パラメータの個数や型はアセンブラで定義したものを指定。
このサンプルではパラメータに指定した値に+1(インクリメント)する関数です。
コード:
Dim Inc As *Function(p1 As Long) As Long
Inc=GlobalAlloc(GMEM_FIXED,11)
memcpy(Inc,asm,11)
Dim buf[255] As Byte
wsprintf(buf,"in=%d ret=%d",10,Inc(10))
GlobalFree(Inc)
MessageBox(NULL,buf,"",0)
P.S.
関数ポインタが導入されたのでお試し程度に作ってみたら
上手く動きました。
アセンブラをつついてみてコンパイラを作成することが如何に大変か
身にしみて分かりました。
そういう意味でも、ActiveBasicに感謝です。