Abaduaber

VadSid_2

May 21st, 2013
479
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Model Small
  2. Stack 256
  3. DATASEG
  4.     BufLen db 40h
  5.     BufSize db 50h ;Размер буфера
  6.     ValBuf db 50h dup(0) ;Буфер для ввода текста
  7.     Vovels db 'aAeEiIoOuUyYаАоОуУэЭиИеЕёЁюЮяЯыЫ'
  8.     Nonvovels db 'bBcCdDfFgGhHjJkKlLmMnNpPqQrRsStTvVwWxXzZбБвВгГдДйЙжЖзЗкКлЛмМнНпПрРсСтТфФхХцЦчЧшШщЩьЬъЪ'
  9.     VovelsMore db 'glasnih bukv bolshe chem soglasnih$'
  10.     NonVovelsMore db 'soglasnih bukv bolshe chem glasnih$'
  11.     Friend db 'Soglasnih i glasnih bukv porovnu$';
  12. CODESEG
  13.  
  14. Start:
  15.     mov ax,@data
  16.     mov ds,ax ;Адрес сегмента данных куда положено
  17.     push ds ;ES:= DS
  18.     pop es
  19.     call readline ;Читаем строку
  20.     xor bx,bx ;BH будет хранить кол-во согласных, BL-колво гласных. Пока по нулям.
  21.     mov dx,50h ;Максимальный размер строки, счетчик обработанных символов
  22.    
  23.     mov si,offset BufSize+1  ;SI на первый символ введенной строки
  24. SearchVovelsLoop:
  25.     mov di,offset Vovels ;Устанавливаем di на начало перечисленных гласных букв
  26.     mov al,[si] ;Заносим в AL код следующей буквы введенной строки
  27.     mov cx,32 ;Rep Scasb просмотрит 32 символа, да будет так.
  28.     repne scasb ;Последовательно сравниваем код в AL со кодами всех гласных букв.
  29.     jnz NonVovel ;Если флаг ZF не был установлен - значит это не гласная
  30.     inc bl ;Иначе - увеличиваем счетчик гласных
  31. NonVovel:
  32.     inc si ;Переходим к следующему элементу
  33.     dec dx ;У нас осталось на 1 элемент меньше
  34.     jnz SearchVovelsLoop ;Если DX не ноль, то начинаем сначала
  35.  
  36.     ;Аналогично и с поиском согласных букв.
  37.  
  38.     mov si,offset BufSize+1
  39.     mov dx,50h 
  40. SearchNonVovelsLoop:
  41.     mov di,offset NonVovels
  42.     mov al,[si]
  43.     mov cx,86
  44.     repne scasb
  45.     jnz NonVovel2
  46.     inc bh
  47. NonVovel2:
  48.     inc si
  49.     dec dx
  50.     jnz SearchNonVovelsLoop
  51.  
  52.     ;После цикла проверок у нас в bl количество гласных, а в bh количество согласных букв.
  53.     cmp bl,bh ;Сравниваем количества
  54.     ja VovelsWon ;И в зависимости от положения дел ветвимся
  55.     jl NonVovelsWon
  56.     je Friendship
  57. VovelsWon:
  58.     mov dx,offset VovelsMore
  59.     jmp Aft
  60. NonVovelsWon:
  61.     mov dx,offset NonVovelsMore
  62.     jmp Aft
  63. Friendship:
  64.     mov dx,offset Friend
  65. Aft:
  66.     mov ah,09h ;Выводим строку-результат на экран
  67.     int 21h
  68.  
  69.     mov ah,04Ch
  70.     int 21h
  71.  
  72.     ;Функция, читает строку символов с клавиатуры
  73. ReadLine:
  74.     push ax
  75.     push dx
  76.     mov ah,0ah
  77.         mov dx,offset BufSize
  78.     mov [BufLen],4
  79.     int 21h
  80.     pop dx
  81.     pop ax
  82.         ret
  83.  
  84. END Start
Advertisement
Add Comment
Please, Sign In to add comment