Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
ASM86 VER 1.0 SOURCE: FORTH.A86 Fig <strong>Forth</strong> <strong>8086</strong>/88 Ver 1.0 PAGE 111<br />
EJECT<br />
. .........................................<br />
. * *<br />
. * CODE LEVEL "MATCH" DEFINITION *<br />
. * *<br />
. .........................................<br />
,<br />
; STACK PARAMETERS:<br />
I<br />
I --- flag new:cursor:offset)<br />
; ( cursor:addr byte:left str:addr str:len<br />
I<br />
; T his version of MATCH will handle string length<br />
S<br />
; up to 65335 bytes in length.<br />
I<br />
MATCH<br />
DB 85H ; MATCH<br />
DB ' MATC<br />
DB 'Ht+80H<br />
DW DOTCPU-7<br />
DW $+2<br />
MOV D1,SI ; SAVE IP<br />
POP CX ; STRING COUNT<br />
POP BX ; STRING ADDR<br />
POP DX ; BYTES LEFT TO SEARCH<br />
POP SI ; CURSOR ADDR<br />
PUSH S I ; SAVE COPY<br />
LODS<br />
CMP<br />
JNZ<br />
PUSH<br />
PUSH<br />
PUSH<br />
AL ; GET FIRST BYTE<br />
AL, [BX] ; MATCB?<br />
MAT3 ; NO<br />
BX ; SAVE STRING ADDR<br />
CX ; & STRING COUNT<br />
SI ; & CURSOR ADDR<br />
; TRY TO MATCH REMAINNING CHARACTERS IN STRING<br />
DEC<br />
J Z<br />
DEC<br />
J Z<br />
I NC<br />
LODS<br />
CMP<br />
J Z<br />
CX I<br />
MATCHOK ;<br />
DX I<br />
NOMATCH ;<br />
BX I<br />
AL a<br />
ALr [BXI ;<br />
MAT2 I<br />
STR COUNT -1<br />
EXIT ... MATCH FOUND<br />
BYTES LEFT -1<br />
EXIT. . .NO MATCH<br />
NEXT STR CHAR ADDR<br />
GET NEXT BYTE<br />
MATCH?<br />
YES, GET MORE