[POKE] コマンド

Memoryに直接 1バイト書き込みをします。
文法 POKE <Address>, <式>
文例  POKE &HF0, &HFF

指定のMemory上のAddressに 1バイトのDataを直接書き込みます。
CALL文で呼び出したい機械語を直接書き込むことが出来ます。
<Address>は当該のAddressの、BaseAddressからのOffsetで、 4バイトの整数値です。
BaseAddressはあらかじめ[DEF_SEG] で変えることが出来ます。

機械語領域の最上位BaseAddressは予約語の [DEFUSER] で参照出来ます。
<式>は書き込まれるDataで 1バイトで 0〜255 (&H0〜&HFF)の値でなければなりません。
SAMPLE42 機械語Programの書き込み を参照。

サンプル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
70 C%=0
80 INPUT A%,B%
90 IF A%=9999 THEN 900
100 CALL MAX(A%, B%, C%)
140 PRINT C%
150 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 &H8B ,&H11 ' mov edx,dword ptr [ecx]
1040 &H8B ,&H49 ,&H08 ' mov ecx,dword ptr [ecx+8]
1050 &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


これを実行します。
RUN
? 100,200
 200
? 100,-200
100
? 9999,0
OK

[DEFUSER] はMBASICの予約語で、機械語Subroutine書き込みAreaの開始Addressです。
Userの書き込むAreaはDEFUSERをBaseAddressとして、以降 約 1MB(&H100000)のAreaとなります。
このArea内であれば、複数の機械語Subroutineの書き込みが出来ます。
本問では、BaseAddress がDEFUSERのPointからOffsetがMAXのところ、
絶対アドレス(DEFUSER+MAX)の番地に書き込んでいます。

引数の対応は A%のPointerが 8[BX]から 4バイト、B%のPointerが 4[BX]から 4バイト、
C%のPointerが[BX]から 4バイトとなっています。CALL文の並びとは逆順になります。
この機械語ProgramはA%とB%の比較をして、
大きい方の整数値をC%に格納してBASICに帰っています。