Найти количество вхождений подстроки в строку - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д