[BSAVE] コマンド
Memory上の機械語ProgramをディスクにSaveします。
文法 BSAVE <Fileディスクリプタ>, <Save開始Address>, <長さ>
文例 BSAVE "d:\ASM86.EXE" , M1%, &H1000
BSAVE "d:\C_SORT.EXE" , M2%, L%
Memory上にある機械語SubroutineProgramをディスクにSaveします。
<Fileディスクリプタ>はPath名により、SaveFileの所在を明らかにしたFile名です。
<Save開始Address>はSave開始番地を指定します。
この番地はあらかじめ[DEF_SEG] で宣言してある
BaseAddressからのOffsetで 2Byteの整数値となります。
<長さ>はSaveする内容のByte数です。
BSAVEでは、現在のBaseAddressからのOffsetが<Save開始Address>のPointから
<長さ>のByte数を<Fileディスクリプタ>に書き込みます。
[SAMPLE41]実行ProgramのLoad
または[SAMPLE42]機械語Programの書き込み を参照。
および、[MACHINEWORD] 参照。
サンプル1
10 CLS
20 DEF SEG=DEFUSER
30 MAX=&H0
40 FOR ADR=MAX TO (MAX+40)
50 READ BYTE:POKE ADR, BYTE
60 NEXT ADR
100 BSAVE "d:\COMP.EXE" ,0,256
110 C%=0
120 INPUT A%,B%
130 IF A%=9999 THEN 900
140 CALL MAX(A%, B%, C%)
150 PRINT C%
160 GOTO 120
900 END
1000 DATA &H8B, &H4C, &H24, &H04 // mov ecx,dword ptr [esp+4]
1010 DATA &H66 ,&H56 // push si
1020 DATA &H8B ,&H41 ,&H04 // mov eax,dword ptr [ecx+4]
1030 DATA &H8B ,&H11 // mov edx,dword ptr [ecx]
1040 DATA &H8B ,&H49 ,&H08 // mov ecx,dword ptr [ecx+8]
1050 DATA &H66 ,&H8B &H00 // mov ax,word ptr [eax]
1060 DATA &H66 ,&H8B ,&H32 // mov si,word ptr [edx]
1070 DATA &H66 ,&H3B ,&HC6 // cmp ax,si
1080 DATA &H7D ,&H03 // jge next
1090 DATA &H66 ,&H8B ,&HC6 // mov ax,si
1100 DATA &H66 ,&H5E // next: pop si
1200 DATA &H66 ,&H89 ,&H01 // mov word ptr [ecx],ax
1300 DATA &HC3 // ret
1400 DATA &H90,&H90,&H90, &H90,&H90,&H90, &H90,&H90,&H90 // NOP
この機械語Program例は引数の整数値DataのA%とB%を比較して大きい方の値をC%にSetして
BASICに帰ってきます。
[DEFUSER] をBaseAddressとしてOffsetがMax〜(Max+40)にPOKE文で
書き込まれた内容を、長さ 256Byteで "d:\COMP.EXE" としてSaveしています。