; R0 IS POSITION IN MAIN STRING ; R2 IS POSITION IN TEST STRING ; R3 IS POSITION IN MAIN STRING AS EACH CHARACTER IN T STR IS TESTED ; USE BY GIVING THE FOLLOWING CALL ; CALL POS(MSTRING, TSTSTRING, START POS IN M STR, LENGTH OF MSTSR, ; LENGTH OF TST STR) .TITLE POS .GLOBL POS POS:: MOV 2(R5),R0 ; ADR OF M STRING ADD @6(R5),R0 ; ADD ON START POS (ONE PAST BEG) DEC R0 ; NOW AT BEG MOV R0,END ; ARE CALCULATING THE END ADD @10(R5),END ; 1 PAST END DEC END ; THIS SHOULD BE END OF M STR SUB @12(R5),END ; DEC BY LENGTH OF TEST STRING DEC R0 ; ONE BEFORE BEG OF M STRING ; ; EACH TIME HAVE FAILURE TO FIND TEST STR IN MAIN STR, RETURN HERE AND ; START ON NEXT CHAR IN MAIN STRING 11$: CMP R0,END BHI 27$ ; YES, WE FAILED INC R0 MOV 4(R5),R2 ; STARTING POS OF TEST STR MOV @12(R5),LEN ; NO. OF CHAR TO SEARCH MOV R0,R3 ; R3 WILL BE TEMP POS IN M STR 15$: MOVB (R2)+,TCHR ; TST STR CHARACTER MOVB (R3)+,MCHR ; M STR CHAR CMPB TCHR,#140 ; IS IT CAP LETTER BLE 17$ ; NO IT WASN'T SUB #40,TCHR ; IT WAS, CHANGE TO CAPITAL 17$: CMPB MCHR,#140 ; DO SAME FOR M STR CHAR BLE 19$ SUB #40,MCHR 19$: CMPB TCHR,MCHR ; MAKE THE COMPARISON BNE 11$ ; NO MATCH YET DEC LEN ; RECORD 1 MORE CHAR MATCHED TST LEN ; FINNISHED? BGT 15$ ; NOT YET SUB 2(R5),R0 ; 1 LESS THAN BEG OF M STR INC R0 RETURN ; YES WE ARE 27$: CLR R0 ; INDICATE FAILURE RETURN ; ; END: .WORD LEN: .WORD TCHR: .WORD MCHR: .WORD .END