[MACHINEWORD] について
機械語Subroutineの説明。
Assemblerで作成の場合、16BIT時代のCPM86やDOSのBASICでは
IRET命令(HexのCF)で呼び出し元のBASICのProgramに返しましたが、
32BITのWindowsのMBASICでは、
RET命令(HexのC3)で呼び出し元のBASICのProgramに返します。
[POKE]命令で直接Memoryに書き、これを[BSAVE]命令でFileにする方法と、
VisualStudioでC言語を__ASM、__ASM{ }記述子で作成する方法[下記の註参照]、
およびC言語ProgramのWindowsのEXE Fileそのものを使用、
またはそのLoadModuleから実行部分のHexDataを取り出しFileを作成する方法があります。
いずれも[BLOAD]でMemoryにLoadし、[CALL]命令で実行します。
CALL命令では、単に実行開始番地を与え、引数を渡すだけです。
尚、MBASICでは16BIT時代のSEGMENTの代わりに、BaseAddressを使用します。
4Byteの整数Dataですが、常に、これを基にここからのOffsetでMemoryAddressを指示します。
BaseAddressは[DEF_SEG]命令で定義、設定します。
[註]この場合、MOV ECX,4[ESP] で、最初のArgumentのPointerを取り出せます。
ただし、_ASM内部でESI,EDI,EBXの値を変える場合、またはEBP Registerを使用の場合、
Stackを4Byteずつ戻さねばなりません。
例えば、EBPだけを使用の場合、8[ESP]でArgumentのPointerの格納場所を取り出せます。
最後は普通に、RET命令(HexのC3)で返して下さい。
[ARGUMENT]引数の受け渡し、
機械語サブルーチンの作成の詳細については、
[機械語サブルーチンの作成の詳細]
を参照してください。