Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .model tiny
- .code
- org 100h
- entry:
- ;открыли файл, в ax - дескриптор файла
- mov ah, 3dh
- mov al, 00000010b
- mov dx, offset filename
- int 21h
- jc @error
- ; считали в dx его содержимое
- mov bx, ax
- mov ah, 3fh
- mov cx, 127
- mov dx, offset buffer
- int 21h
- jc @error
- ; закрыли файл
- mov cx, ax
- xor dh, dh
- mov ah, 3eh
- int 21h
- jc @error
- ; нашли длину подстроки
- mov dx, cs:[80h]
- xor dh, dh
- dec dx
- ; получили места, где начинается строка и подстрока
- mov si, offset buffer
- mov di, 82h
- ;здесь будет счетчик повторений
- xor bx, bx
- ; сравниваем строки. Если не совпадают, то сдвигаем si в большой строке на 1
- ;dx - длина подстроки; di - на подстроку
- ;cx - длина строки в файле; si - на строку
- circle:
- ;поменяли, чтобы сравнивать по длине подстроки
- xchg cx, dx
- jmp check_substr
- ; если строки совпали
- ; увеличиваем счетчик, возвращаем все на место, уменьшаем длину большой строки
- s: inc bx
- mov di, 82h
- mov cx, cs:[80h]
- dec cx
- xor ch, ch
- sub dx, cx
- xchg cx, dx
- jcxz w
- jmp circle
- jmp w
- ; сравниваем строки и уходим на нужные метки
- check_substr:
- repe cmpsb
- jnz f
- jz s
- ; чтобы перепрыгнуть плохой случай
- ;jmp w
- ; тут появимся, если не совпали
- ; возвращаем все на место для подстроки
- f:
- mov di, 82h
- mov cx, cs:[80h]
- dec cx
- xor ch, ch
- jcxz w
- xchg cx, dx
- jcxz w
- dec cx
- jmp circle
- ; вывод
- w:
- mov dl, bl
- add dl, '0'
- mov ah, 02h
- int 21h
- ret
- @error:
- mov ah, 09h
- mov dx, offset errormsg
- int 21h
- filename db "1.txt", 0
- errormsg db "Error", 0dh, 0ah, '$'
- buffer db 127 dup(?)
- buffer_s db ?
- num db 0
- end entry
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement