Найти количество вхождений подстроки в строку - Assembler
Формулировка задачи:
Доброго времени суток!
Разработать подпрограмму, которая определяет, содержится ли одна заданная строка в другой заданной строке, и если да, то, начиная с какой позиции.
Не могу понять почему программа зациклилась на вводе второй строки.
.model small
stack 100h
dataseg
InviteStr1 db 0Dh, 0Ah, 'Enter the string 1: $'
StringINP1 db 160, ?, 160 dup(?)
InviteStr2 db 0Dh, 0Ah, 'Enter the string 2: $'
StringINP2 db 150, ?, 150 dup(?)
Number db 0
Count db 0
ErrorStr db 0Dh, 0Ah, 'Not found $'
OutStr db 0Dh, 0Ah, 'Result: $'
codeseg
start:
startupcode
;-------------------------------------------------------------
lea DX, InviteStr1 ;приглашение ввести первую строку
mov AH, 09h
int 21h
lea DX, StringINP1 ;ввод первой строки
mov AH, 0Ah
int 21h
;-------------------------------------------------------------
lea DX, InviteStr2 ;приглашение ввести втрорую строку
mov AH, 09h
int 21h
lea DX, StringINP2 ;ввод второй строки
mov AH, 0Ah
int 21h
;--------------------------------------------------------------
xor CL,CL
mov CL, StringINP1+1
COUNTER:
lea BX, StringINP1+2 ;строка
push BX
lea BX, StringINP2+2 ;подстока
push BX
mov BL, StringINP1+1 ;длина строки
add DL, AL
push BX
call SEARCH
sub BX, AX
mov AX, DX
add BX, AX
cmp AL, -1
je BREAK
inc BX
loop COUNTER
BREAK:
mov AX, DX
cmp AX, -1
je No
jmp Yes
NO:
lea DX, ErrorStr
mov AH, 09h
int 21h
Yes:
lea DX, OutStr
mov AH, 09h
int 21h
mov DX, BX
int 21h
quit:
exitcode 0
SEARCH proc near
pop CX ;длина строки
pop DX ;подстрока
pop BX ;строка
mov SI, BX
mov DI, DX
xor DX, DX
SEAR:
inc DL
lodsb
cmp AL, [DI]
jne STOP
repne cmpsb
jne STOP
jmp EXIT
STOP: loop SEAR
mov AL, -1
EXIT:
mov AL, DL
ret
SEARCH endp
endРешение задачи: «Найти количество вхождений подстроки в строку»
textual
Листинг программы
;строка(29) jmp yes ; в строке(61) xor ax,ax int 16h mov ax,4c00h int 21h