Найти количество вхождений подстроки в строку - 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.667 из 5
Похожие ответы