home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 5 / 05.iso / a / a031 / samples.exe / STRSUBST.ASM < prev    next >
Encoding:
Assembly Source File  |  1992-03-10  |  1.9 KB  |  66 lines

  1. ; Strsubst.asm (Source for Strsubst.bin)
  2. ;
  3. ; Substitute characters in a character string.
  4. ;
  5. ; Usage - CALL command:
  6. ;
  7. ;       LOAD Strsubst
  8. ;       CALL Strsubst WITH <expC1>, <expC2>, <expC3>
  9. ;
  10. ; Usage - CALL() function:
  11. ;
  12. ;       LOAD Strsubst
  13. ;       result = CALL("Strsubst", <expC1>, <expC2>, <expC3>)
  14. ;
  15. ;       Strsubst searches through <expC1>, replacing all occurrences
  16. ;       of the first character in <expC2> with the first character
  17. ;       in <expC3>.
  18. ;
  19. CODE    SEGMENT BYTE PUBLIC 'CODE'
  20. STRSUB  PROC    FAR
  21. ASSUME  CS:CODE
  22.  
  23.         PARAM1  EQU   ES:[DI+0]
  24.         PARAM2  EQU   ES:[DI+4]
  25.         PARAM3  EQU   ES:[DI+8]
  26.         PARAM4  EQU   ES:[DI+12]
  27.         PARAM5  EQU   ES:[DI+16]
  28.         PARAM6  EQU   ES:[DI+20]
  29.         PARAM7  EQU   ES:[DI+24]
  30.  
  31. START:
  32.         PUSH  BP                ; Save stack frame
  33.         MOV   BP, SP
  34.  
  35. ; Quit if there aren't at least 3 parameters.
  36.         CMP   CX, 3
  37.         JL    DONE
  38.  
  39. ; Load first byte of 2nd paramter in CL
  40.         LDS   BX, PARAM2        ; DS:BX points to 2nd parameter
  41.         MOV   CL, [BX]          ; Store 1st byte
  42.  
  43. ; Load first byte of 3nd paramter in CH
  44.         LDS   BX, PARAM3        ; DS:BX points to 3rd parameter
  45.         MOV   CH, [BX]          ; Store 1st byte in CH
  46.  
  47. ; Point DS:BX to 1st parameter
  48.         LDS   BX, PARAM1
  49.  
  50. ; Loop for each character in 1st parameter
  51. AGAIN:  MOV   AL, [BX]          ; Get next character in AL
  52.         CMP   AL, 0             ; Is it end of string?
  53.         JE    DONE              ;    Yes: exit
  54.         CMP   AL, CL            ; Is it character we're searching for?
  55.         JNE   NEXT              ;    No:  don't replace
  56.         MOV   [BX], CH          ;    Yes: replace
  57. NEXT:   INC   BX                ; Point to next
  58.         JMP   AGAIN             ;
  59.  
  60. DONE:   POP   BP                ; Restore stack frame
  61.         RET
  62.  
  63. STRSUB  ENDP
  64. CODE    ENDS
  65.         END
  66.