masm model small stack 256 .data string db 5 dup (0) mes1 db 0ah,0dh,'Enter string',0ah,0dh,'$' mes2 db 0ah,0dh,'Enter character fo replace',0ah,0dh,'$' mes3 db 0ah,0dh,'Result:',0ah,0dh,'$' nochar db 0ah,0dh,'Not found character...',0ah,0dh,'$' fnd db 0ah,0dh,'Character is found',0ah,0dh,'$' adres dd string char db ? .code vhod: mov ax,@data mov ds,ax mov cx,a1 les di,adres mov ah,09h lea dx,mes1 int 21h vv: mov ah,01h int 21h stosb loop vv mov al,'a' ;символ для поиска-`a` cld ;сброс флага df lea di,adres ;загрузка в di смещения string mov cx,a1 ;для префикса repne — длина строки ;поиск в строке string до тех пор, пока ;символ в al и очередной символ в строке ;не равны: выход - при первом совпадении cycl: repne scas adres je found ;если элемент найден то переход на found failed: ;иначе, если не найден, то вывод сообщения nochar mov ah,09h lea dx,nochar int 21h jmp exit ;переход на выход found: mov ah,09h lea dx,fnd int 21h ;вывод сообщения об обнаружении символа ;корректируем di для получения значения ;действительной позиции совпавшего элемента ;в строке и регистре al dec di new_char: ;блок замены символа mov ah,09h lea dx,mes2 int 21h ;вывод сообщения mes2 ;ввод символа с клавиатуры mov ah,01h int 21h ;в al — введённый символ stos adres ;сохраним введённый символ ;(из al) в строке string в позиции старого символа mov ah,09h lea dx,mes3 int 21h ;вывод сообщения mes3 lea dx,adres int 21h ;вывод сообщения string ;переход на поиск следующего символа ‘а’ в строке inc di ;указатель в строке string на следующий, ;после совпавшего, символ jmp cycl ;на продолжение просмотра string exit: ;выход mov ax,4c00h int 21h end vhod