;       ГРУППА 22103
;       ПОДГРУППА 6
;       ИСПЫТАТЕЛЬ КОРЗУH ДМ.
;       ДАТА    17/12/93
;       П/ПРОГРАММА В СТИЛЕ BORLAND С++
;       ВHИМАHИЕ !!! ИСПОЛЬЗУЮТСЯ СПЕЦЭФФЕКТЫ.

        MODEL   Small,C

        .CODE
PUBLIC  C Tst                                   ;п/п доступна внешним модулям

;определим параметры п/п вместе с самой п/п
Tst     PROC    C Adr:word,Find_ch:byte,Replace_ch:byte

LOCAL   Len     :word                           ;локальная переменная для
                                                ;длины строки
USES    di,si,ds                                ;сохраним используемые регистры

;-------подготовка
        mov     bx,[Adr]                        ;bx указывает на начало строки
        mov     Len,0                           ;начальное значение длины строки
        push    ds                              ;в es сегментный
        pop     es                              ;     адрес строки

;-------определим длину строки
        dec     bx
Size1:
        inc     bx                              ;на след-й элемент
        inc     Len                             ;++Len

        cmp     byte ptr [bx],0                 ;добрались до конца строки?
        jne     Size1                            ;нет -продолжить поиск конца

        dec     Len                             ;в Len длина строки

;-------Поиск элементов равных Find_ch
; 1.подготовка к поиску
        cld                                     ;направление ++
        mov     di,[Adr]                        ;подготовка для scas
        mov     al,[Find_ch]                    ; в al искомый символ

; 2.собственно поиск
Search:
        repne   scasb                           ;сканируем
        je      @@1                             ;если нашли -на замену

;-------конец поиска ,да и п/п
        mov     ax,[Len]                        ;п/п возвращает в ax длину
        ret

;-------Здесь происходит замена
@@1:
        dec     di                              ;di указывает на найденный символ
        inc     cx                              ;увеличим счетчик
        mov     ah,[Replace_ch]                 ;в ah замена
        mov     ds:[di],ah                      ;заменяем
        jmp     Search                          ;продолжим поиски

Tst     ENDP
        END
