Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Model Small
- Stack 1024
- .186
- DATASEG
- OutValNL db 1 ;Флаг перехода на новую строку.
- BufLen db 240 ;Максимальное количество символов для ввода
- BufSize db 0h ;Реальное количестве введенных символов
- Text db 255 dup(0) ;Буфер для ввода текста, а также генерации вывода
- NewLine db 0Dh, 0Ah, '$' ;Строка - переход на новую линию.
- InputStr db 'Введите строку: $';
- Alphabet db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' ;Алфавит допустимых символов
- AlphaIsEx db 26 dup(0) ;Флаги присутствия символов в строке
- CODESEG
- Start:
- mov ax,@data
- mov ds,ax ;Адрес сегмента данных куда положено
- mov es,ax
- mov dx,offset InputStr
- call OutStr
- call ReadLine
- mov dx,offset NewLine
- call OutStr
- mov si,offset Text
- xor dx,dx
- xor bx,bx
- ;Алгоритм работы программы в двух словах: сканируем введенную строку по порядку пытаясь найти в ней каждую из букв
- ;Если буква находится, то соответствующий ей флаг устанавливается в 1, и начинает искаться следующая буква
- ;Если не находится, то ничего не происходит
- ;По концу работы программы выводятся только те буквы, флаги которых установлены в 1.
- xor dx,dx
- Scan:
- mov bx,offset AlphaIsEx
- mov si,offset Alphabet
- mov dx,1ah
- ScanNextChar:
- mov al,[si]
- mov di,offset Text
- xor cx,cx
- mov cl,[BufSize]
- repne scasb ;Проверим на соответствие текущей буквы одному из символов строки
- je SetF ;Если было найдено соответствие - увеличим счетчик
- jmp NextChar ;;В противном случае, переходим к следующему символу и снова проверям
- SetF:
- mov byte ptr [bx],1
- NextChar:
- inc bx
- inc si
- dec dx
- jnz ScanNextChar
- ;Выведем найденные символы
- mov bx,offset AlphaIsEx
- mov si,offset Alphabet
- mov dx,26
- OutNextChar:
- mov al,[bx]
- test al,al
- jz PrepNextChar
- mov ah,2
- pusha
- mov dl,[si]
- int 21h
- popa
- PrepNextChar:
- inc si
- inc bx
- dec dx
- jnz OutNextChar
- mov ah,04ch
- int 21h
- ;Функция, читает строку символов с клавиатуры
- ReadLine:
- pusha
- mov ah,0ah
- mov dx,offset BufLen
- int 21h
- popa
- ret
- ;Выводит строку по адерсу ds:dx
- OutStr:
- pusha
- mov ah,09h
- int 21h
- popa
- ret
- END Start
Advertisement
Add Comment
Please, Sign In to add comment