Advertisement
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 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' ;Алфавит допустимых символов
- AlphaC dw 0 ;счетчик
- DigitsC dw 0 ;Счетчик цифр
- Separators db '.,;:- ' ;Знаки препинания
- SeparatorsC dw 0 ;Счетчик
- AlphaBiggerT db 'Букв больше$'
- SepaBiggerT db 'Знаков препинания больше$';
- DigitsBiggerT db 'Цифр больше$'
- 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
- mov dl,[BufSize]
- ;Алгоритм работы программы в двух словах: каждый символ строки просто проверяем на его тип, и увеличиваем счетчики соответствующих
- ;типов
- ScanNextChar:
- ;Проверяем, не символ ли это алфавита?
- mov di,offset Alphabet
- mov cx,52
- mov al,[si]
- repne scasb ;Проверим на соответствие текущей буквы одному из символов алфавита
- jne NextCheck ;Если не было найдено соответствие - перейдем к следующей проверке
- SetF:
- inc word ptr [AlphaC] ;Иначе - увеличим счетчик символов алфавита
- jmp NextChar
- NextCheck:
- ;Проверяем, не цифра ли это?
- cmp byte ptr [si],'0'
- jb LastCheck
- cmp byte ptr [si],'9'
- ja LastCheck
- inc word ptr [DigitsC] ;Если да - увеличиваем соответствующий счетчик
- jmp NextChar
- LastCheck:
- mov di,offset Separators
- mov cx,5
- repne scasb ;Проверим на соответствие текущей буквы одному из символов алфавита
- jne NextChar ;Если не было найдено соответствие - перейдем к следующей проверке
- inc word ptr [SeparatorsC] ;Иначе, увеличим количество разделителей
- NextChar:
- inc si
- dec dx
- jnz ScanNextChar
- ;Выясняем, чего все-таки больше
- mov ax,[AlphaC]
- cmp ax,[DigitsC]
- jb TestIsDigits
- cmp ax,[SeparatorsC]
- jb TestIsDigits
- jmp AlphaBigger
- TestIsDigits:
- mov ax,[DigitsC]
- cmp ax,[SeparatorsC]
- jb SepaBigger
- jmp DigitsBigger
- ;И выводим на экран соответствующую строку
- AlphaBigger:
- mov dx,offset AlphaBiggerT
- jmp OutRes
- SepaBigger:
- mov dx,offset SepaBiggerT
- jmp OutRes
- DigitsBigger:
- mov dx,offset DigitsBiggerT
- OutRes:
- call OutStr
- 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
Advertisement