home *** CD-ROM | disk | FTP | other *** search
- ; Strsubst.asm (Bronbestand voor Strsubst.bin)
- ;
- ; Vervang tekens in een tekenreeks.
- ;
- ; Gebruik - Met het commando CALL:
- ;
- ; LOAD Strsubst
- ; CALL Strsubst WITH <Tuitdr1>, <Tuitdr2>, <Tuitdr3>
- ;
- ; Gebruik - Met de functie CALL():
- ;
- ; LOAD Strsubst
- ; uitkomst = CALL("Strsubst", <Tuitdr1>, <Tuitdr2>, <Tuitdr3>)
- ;
- ; Met het programma Strsubst wordt in <Tuitdr1> elke keer
- ; dat het eerste teken van <Tuitdr2> voorkomt, dit teken
- ; vervangen door het eerste teken in <Tuitdr3>.
- ;
- ; Versie 2.0/0422
- CODE SEGMENT BYTE PUBLIC 'CODE'
- STRSUB PROC FAR
- ASSUME CS:CODE
-
- PARAM1 EQU ES:[DI+0]
- PARAM2 EQU ES:[DI+4]
- PARAM3 EQU ES:[DI+8]
- PARAM4 EQU ES:[DI+12]
- PARAM5 EQU ES:[DI+16]
- PARAM6 EQU ES:[DI+20]
- PARAM7 EQU ES:[DI+24]
-
- START:
- PUSH BP ; Sla het stack-frame op
- MOV BP, SP
-
- ; Stop als er niet tenminste 3 parameters zijn.
- CMP CX, 3
- JL DONE
-
- ; Laad eerste byte van tweede parameter in CL
- LDS BX, PARAM2 ; DS:BX wijst naar tweede parameter
- MOV CL, [BX] ; Sla eerste byte op
-
- ; Laad eerste byte van derde paramter in CH
- LDS BX, PARAM3 ; DS:BX wijst naar derde parameter
- MOV CH, [BX] ; Sla eerste byte op in CH
-
- ; Wijs met DS:BX naar eerste parameter
- LDS BX, PARAM1
-
- ; Maak een lus voor elk teken in eerste parameter
- AGAIN: MOV AL, [BX] ; Plaats het volgende teken in AL
- CMP AL, 0 ; Is einde van de reeks bereikt?
- JE DONE ; Ja:stoppen
- CMP AL, CL ; Is dit het gezochte teken?
- JNE NEXT ; Nee: niet vervangen
- MOV [BX], CH ; Ja: vervangen
- NEXT: INC BX ; Wijs naar volgend teken
- JMP AGAIN ;
-
- DONE: POP BP ; Herstel het stack-frame
- RET
-
- STRSUB ENDP
- CODE ENDS
- END