[SAMPLE46] SAMPLE

関数 [USR] を参照して下さい。
[USR] での引数の扱いは定数で引き渡しです。
[CALL] 命令での引数はアドレスで引き渡しです。定数は使用出来ません。

10 M%=&H100:MF%=0:MSQ%=&HE00:MSQF%=&H200:MSIN%=&H1B00:MSINF%=&H2800
15 PRINT "Sample46 is USR0,USR1,,,, , floating operation is float or double "
16 PRINT "USR0,USR1 Diameter ---> Circle area , by float, double"
17 PRINT "USR2,USR3 Circle area ---> Diameter , by float, double"
18 PRINT "USR4,USR5 Angle[Degree] ---> Sin , by float, double"
19 PRINT
20 DEF SEG=DEFUSER
30 DEF USR0= M%
40 DEF USR1= MF%
50 DEF USR3= MSQ%
60 DEF USR2= MSQF%
70 DEF USR5= MSIN%
80 DEF USR4= MSINF%
90 BLOAD "CIRCAREA_F_CORE.EXE",M% 'THIS IS &H100 LENGTH
100 BLOAD "CIRCAREA_D_CORE.EXE",MF% 'THIS SAVE LENGTH IS &H100
110 BLOAD "SQRT_D_CORE.EXE",MSQ% 'THIS SAVE LENGTH IS &HB00
120 BLOAD "SQRT_F_CORE.EXE",MSQF% 'THIS SAVE LENGTH IS &HB00
130 BLOAD "SIN_D_CORE.EXE",MSIN% 'THIS SAVE LENGTH IS &HB00
140 BLOAD "SIN_F_CORE.EXE",MSINF% 'THIS SAVE LENGTH IS &HB00
150 F!=1.23:S!=USR0(F!)
160 PRINT "Diameter_F=";F!;"---> Area_F =";S!
170 D#=1.23:SD#=USR1(D#)
180 PRINT "Diameter_D=";D#;"---> Area_D =";SD#
190 S!=1.23:F!=USR2(S!)
200 PRINT "AREA_F=";S!;"---> Diameter_F =";F!
210 SD#=1.23:D#=USR3(SD#)
220 PRINT "AREA_D=";SD#;"---> Diameter_D =";D#
230 S!=123.:F!=USR4(S!)
240 PRINT "THETA_F=";S!;"---> SIN_F =";F!
250 SD#=90.:D#=USR5(SD#)
260 PRINT "AREA_D=";SD#;"---> SIN_D =";D#

USR1は倍精度で、直径を与えて、円の面積を返します。USR0は同じ機能の単精度版です。
USR3は倍精度で、円の面積を与えて、直径を返します。USR2は同じ機能の単精度版です。
USR5は倍精度で、円の面積を与えて、直径を返します。USR2は同じ機能の単精度版です。
VisualStudioでのCプログラムは&H1000番地に開始番地があります。
USRによる実行ファイルはVisual StudioのCでCompileしたもので、
実行開始番地は0x1000ですので、例えば、上記の
"CIRCAREA_D_CORE.EXE"はCで作成したプログラムをMBASIC86上で一度BLOADし、
これを&H1000番地から長さ &H100でSaveしたものです。
"SQRT_F_CORE.EXE"も同様に実行部がけを取り出してSaveしたものですが、
倍精度数学関数 sqrtを使用しているため、SaveLengthは &HB00です。
Visual Studioで、CやCで_ASM{......}によりAssemblerを組む場合、
新規作成--->プロジェクト--->Win32 コンソールアプリケーション--->空のプロジェクト
とします。
Visual Studioで、CやCで_ASM{......}によりAssemblerを組む場合、
実行Module(EXEファイル)の開始番地は0x1000です。
および、後続部にもWindows処理が入っており、_ASM{.....}の処理部
分はかなり小さくなります。
CALL文に使う場合、0x1000からHexを調べて、最後は、C3,90,90,90,,,,となる部分までです。
これはC言語でEXEファイルを作成する場合も同じです。
このプログラム例で&H100程度の長さです。
ただし倍精度数学関数などの組み込みサブルーチンを使用する場合は&HB00程度の長さです。