Разработать подпрограмму которая определяет содержится ли одна заданна

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
; 1. Разработать подпрограмму, которая определяет, содержится ли одна заданная строка в другой заданной строке, и если да, то, начиная с какой позиции. Разработать программу, которая вводит с клавиатуры две строки и сообщает, содержится ли одна из них в другой и сколько раз.
model SMALL
stack 100h
dataseg
AskS db 0Ah,0Dh,'STR:','$'
AskN db 0Ah,0Dh,'NEAD:','$'
EMPTYSTR db 0Ah, 0Dh, '$'
ESTR db 80, ?, 82 dup( ? ) ; буфер ввода строки 1
NEAD db 80, ?, 82 dup( ? ) ; буфер ввода
RESSTR db 80, ?, 82 dup( ? ) ; буфер ввода
SPACE db ' '
found db ?
insertion dw ?
codeseg
startupcode
BEGIN:
lea DX, AskS
mov AH, 09h
int 21h
lea DX, ESTR
mov AH, 0Ah
int 21h
lea DX, EMPTYSTR
mov AH, 09h
int 21h
lea DX, AskN
mov AH, 09h
int 21h
lea DX, NEAD
mov AH, 0Ah
int 21h
lea DX, EMPTYSTR
mov AH, 09h
int 21h
;Обработка
xor AX, AX
xor BX, BX
xor CX, CX
xor DX, DX
lea SI, ESTR+2 ;адрес начала введенной строки
lea DI, NEAD+2 ;адрес начала введенной строки
mov AL, ESTR+1 ;кол-во введенных символов строки
mov BL, NEAD+1 ;кол-во введенных символов строки
mov cl, al
compare:
push cx
call find
mov insertion, cx
pop cx
cmp insertion, 0
je mark
sub cx, insertion
add si, insertion
mov DX, insertion
add DX, '0'
mov RESSTR, dl
mov RESSTR+1, dh
mov RESSTR+2, '$'
lea DX, RESSTR
mov AH, 09h
int 21h
lea DX, EMPTYSTR
mov AH, 09h
int 21h
mark:
loop compare
;Конец работы
QUIT: exitcode 0
find proc near
mov cl, al
fnc:
push cx
push si
push di
mov cl, bl
cld
repe cmpsb
jne pos ; не нашли
pop di ; забираем наше добро обратно
pop si
pop cx
jmp endfind ; нашли, выходим
pos: ; таки не нашли
pop di
pop si
pop cx
inc si ; немного продвигаемся по исходной строке
loop fnc
endfind:
ret 0
find endp
end