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