.MODEL small
.STACK 256
.DATA
prompt db 'Enter string', 13, 10, '$'
len equ 8 ; максимальная длина строки
lenStr dw len ; длина оставшейся строки
lenSubStr dw ? ; длина подстроки
itemSubStr db ? ; элемент подстроки
array db len + 1, ?, len + 1 dup(?) ; строка символов
pntToArray dd array ; указатель на строку символов
newLine db 13, 10, '$' ; перевод строки
resultStr db len dup(' ') ; строка для вывода результата
.CODE
getSubStr PROC ; нахождение подстроки
push ax cx dx
cld
mov cx, lenStr
mov al, [si]
mov itemSubStr, al
repe scasb
inc cx
mov dx, lenStr
mov lenSubStr, dx
sub lenSubStr, cx
pop dx cx ax
ret
ENDP
printSubStr PROC ; вывод подстроки на консоль
push si
mov cx, lenSubStr
lea si, resultStr
mov bl, itemSubStr
cycle:
mov [si], bl
inc si
loop cycle
mov [si], 13
mov [si + 1], 10
mov [si + 2], '$'
cmp lenSubStr, 1
je done
mov ah, 9h
lea dx, resultStr
int 21h
done:
pop si
ret
ENDP
.STARTUP
mov ah, 9h
lea dx, prompt
int 21h
; ввод символьного массива
mov ah, 0Ah
lea dx, array
int 21h
; нахождение последовательности
les di, pntToArray
add di, 2
lea si, array
add si, 2
mov ah, 9h
lea dx, newLine
int 21h
call getSubStr
call printSubStr
next:
add si, lenSubStr
dec di
mov ax, lenStr
sub ax, lenSubStr
cmp ax, 1
jbe stop
mov lenStr, ax
call getSubStr
call printSubStr
jmp next
stop:
.EXIT
END
