Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Model Small
- Stack 256
- DATASEG
- BufLen db 40h
- BufSize db 50h ;Размер буфера
- ValBuf db 50h dup(0) ;Буфер для ввода текста
- Vovels db 'aAeEiIoOuUyYаАоОуУэЭиИеЕёЁюЮяЯыЫ'
- Nonvovels db 'bBcCdDfFgGhHjJkKlLmMnNpPqQrRsStTvVwWxXzZбБвВгГдДйЙжЖзЗкКлЛмМнНпПрРсСтТфФхХцЦчЧшШщЩьЬъЪ'
- VovelsMore db 'glasnih bukv bolshe chem soglasnih$'
- NonVovelsMore db 'soglasnih bukv bolshe chem glasnih$'
- Friend db 'Soglasnih i glasnih bukv porovnu$';
- CODESEG
- Start:
- mov ax,@data
- mov ds,ax ;Адрес сегмента данных куда положено
- push ds ;ES:= DS
- pop es
- call readline ;Читаем строку
- xor bx,bx ;BH будет хранить кол-во согласных, BL-колво гласных. Пока по нулям.
- mov dx,50h ;Максимальный размер строки, счетчик обработанных символов
- mov si,offset BufSize+1 ;SI на первый символ введенной строки
- SearchVovelsLoop:
- mov di,offset Vovels ;Устанавливаем di на начало перечисленных гласных букв
- mov al,[si] ;Заносим в AL код следующей буквы введенной строки
- mov cx,32 ;Rep Scasb просмотрит 32 символа, да будет так.
- repne scasb ;Последовательно сравниваем код в AL со кодами всех гласных букв.
- jnz NonVovel ;Если флаг ZF не был установлен - значит это не гласная
- inc bl ;Иначе - увеличиваем счетчик гласных
- NonVovel:
- inc si ;Переходим к следующему элементу
- dec dx ;У нас осталось на 1 элемент меньше
- jnz SearchVovelsLoop ;Если DX не ноль, то начинаем сначала
- ;Аналогично и с поиском согласных букв.
- mov si,offset BufSize+1
- mov dx,50h
- SearchNonVovelsLoop:
- mov di,offset NonVovels
- mov al,[si]
- mov cx,86
- repne scasb
- jnz NonVovel2
- inc bh
- NonVovel2:
- inc si
- dec dx
- jnz SearchNonVovelsLoop
- ;После цикла проверок у нас в bl количество гласных, а в bh количество согласных букв.
- cmp bl,bh ;Сравниваем количества
- ja VovelsWon ;И в зависимости от положения дел ветвимся
- jl NonVovelsWon
- je Friendship
- VovelsWon:
- mov dx,offset VovelsMore
- jmp Aft
- NonVovelsWon:
- mov dx,offset NonVovelsMore
- jmp Aft
- Friendship:
- mov dx,offset Friend
- Aft:
- mov ah,09h ;Выводим строку-результат на экран
- int 21h
- mov ah,04Ch
- int 21h
- ;Функция, читает строку символов с клавиатуры
- ReadLine:
- push ax
- push dx
- mov ah,0ah
- mov dx,offset BufSize
- mov [BufLen],4
- int 21h
- pop dx
- pop ax
- ret
- END Start
Advertisement
Add Comment
Please, Sign In to add comment