repne scas source ;ищем вхождение символа
je found ;если нашли идём на метку found
nofound: ;если не нашли
print nmes,0 ;выводим сообщение
jmp exit ;идём на выход
found:
push DI ;запоминаем DI в стек
lea SI,substring+2 ;кладём в SI адрес подстроки
push CX ;запоминаем СХ в стек
xor CX,CX ;обнуляем СХ
mov CL,[substring+1] ;количество сравниваемых символов(длина подстроки)
dec DI ;в строке переходим на 1 символ назад
repe cmps source,substring ;сравнение строк
je match ;если всё совпало - на метку match
mismatch: ;если не совпало
dec DI ;переходим в строке на 1 символ назад
pop CX ;восстанавливаем СХ из стека
pop DI ;восстанавливаем DI в стек
cmp CX,0 ;если СХ=0 -> прошли всю строку и не нашли искомой подстроки
jne cycl ;если оно не равно 0, то ищем заново(на метку cycl)
print mesMisMatch,0 ;если строка закончилась, то выводим сообщение
jmp exit ;идём на выход
match: ;если нашли подстроку
print mesMatch,0 ;выводим сообщение
print mesSym,0 ;выводим сообщение
pop CX ;восстанавливаем СХ из стека
xor AX,AX ;обнуляем АХ
mov AL,[source+1] ;записываем в АХ количество символов в строке
sub AX,CX ;из количества сиволов вычитаем количество непройденных символов(позиция начала вхождения подстроки)
;выводим число
;********************************************************
mov BX,10 ;записываем делитель
xor CX,CX ;обнуляем число разрядов
std ;обработка в обратном порядке
begin1:
div BL ;делим
inc CX ;увеличиваем число разрядов
mov DL,AL ;запоминаем частное
add AH,30h ;преобразуем в символ остаток
mov AL,AH ;загружаем остаток в аккумулятор
xor AH,AH ;обнуляем остаток
stosb ;загружаем символ в строку
mov AL,DL ;восстанавливаем делимое
cmp AL,0 ;если=0,то обработка закончена
jne begin1
cld ;обработка в прямом порядке
mov SI,DI ;смещение строки
inc SI ;к последнему символу
mov AH,02h ;номер функции(вывод символа)
cycl1:
lodsb ;загружаем символ в аккумулятор
mov DL,AL
int 21h ;выводим его
loop cycl1
;************************************************************
exit:
mov AH,4Ch ;стандартный выход
int 21h
endp main
end main
Тесты
№ |
Исходные данные |
Результат |
1 |
String: 12345 Substring: 123 |
Substring was found Position:1 |
2 |
String: 232345456789 Substring: 45 |
Substring was found Position:5 |
3 |
String: 11234 Substring:123 |
Substring was found Position:2 |
4 |
String: 567345 Substring: 15 |
Substring not found |
5 |
String: rtyunh Substring: yun |
Substring was found Position:3 |
6 |
String:123tyu n56h Substring:u n5 |
Substring was found Position:6 |
7 |
String: rtwwerty Substring: ik |
Substring not found |
8 |
String: 22233343533345 Substring: 3345 |
Substring was found Position:11 |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.