Поиск гласных/согласных/спецсимволов - Assembler

Узнай цену своей работы

Формулировка задачи:

Добрый день! Снова обращаюсь за помощью. ниже код программы, которая должна в веденной пользователем строки, произвести вывод гласных красным цветом на 10 строку, согласных зеленым на 20ю и посчитать количество спецсимволов. Я начал, но в самой то процедурке сравнения и запутался (сказывается отсутствие опыта программирования в asm). Помогите дописать пожалуйста для процедуру поиска гласных. Так же незнаю как правильно было бы вывести на экран результат. Или отдельно создавать переменную, в которую будут добавляться найденные символы или есть другой способ.
Листинг программы
  1. masm
  2. model small
  3. .data
  4. mess1 db 'введите строку: $'
  5. str1 db 41,0,41 dup(?)
  6. S1 db 'AaEeIiOoUuYy'
  7. attr1 db 2 ; green
  8. itog1 dw ; незнаю понадобится ли эта переменная
  9. S2 db 'BbCcDdFfGgHhJjKkLlMmNnPpQqRrSsTtVvWwXxZz'
  10. attr2 db 4 ; red
  11. itog2 dw ; незнаю понадобится ли эта переменная
  12. S3 db '`~!@#$%^&*()_-+=|\?/<>'
  13. attr3 db 1
  14. .code
  15. mov dx,offset mess1
  16. mov ah,9
  17. int 21h
  18. mov dx,offset str1
  19. mov ah,0Ah
  20. int 21h
  21. cld
  22. mov cl,byte ptr str1+1 ; длинна введенной строки
  23. mov si,offset str1+2 ; первый символ введеной строки
  24.  
  25. Glasn:
  26. lodsb
  27. mov cx, 0Ch ; количество гласных в массиве (12)
  28. mov di,offset S1
  29. repnz scasb
  30. pop cx
  31. cmp al,es:[di-1]
  32.  
  33. jmp PutGls
  34. PutGls: ;отображение полученной строки гласных на 10 строке экрана
  35. exit:
  36. mov ah,8
  37. int 21h
  38. mov ax, 4c00h
  39. int 21h
  40. end prog

Решение задачи: «Поиск гласных/согласных/спецсимволов»

textual
Листинг программы
  1. org 100h
  2. jmp start
  3.  
  4. mes1    db   13,10,'String: $'
  5. mes2    db   13,10,' Separ: $'
  6. leter   db   'AEIOUYaeiouy'              
  7.  
  8. start:                          ;
  9.        mov   bx,160*9           ; ВХ указывает на строку(10)
  10.        mov   si,160*19          ; SI - на строку(20)
  11.        push  0b800h             ; ES - видео/сегмент
  12.        pop   es                 ;
  13.        mov   ax,3               ; режим!
  14.        int   10h                ;
  15.  
  16.        mov   dx,mes1            ;
  17.        mov   ah,9               ;
  18.        int   21h                ;
  19. input: mov   ah,1               ; читаем символ..
  20.        int   21h                ;
  21.        cmp   al,13              ;
  22.        je    exit               ;
  23.  
  24.        push  es ds              ;
  25.        pop   es                 ;
  26.        mov   cx,13              ;
  27.        mov   di,leter           ;
  28.        repne scasb              ; ищем его в таблице гласных
  29.        pop   es                 ;
  30.        or    cx,cx              ; переход, если согласная
  31.        jz    @20                ;
  32.  
  33.        call  prnR               ; иначе: выводим символ красным
  34.        jmp   input              ; сл.символ..
  35. @20:   call  prnG               ; вывод зелёными
  36.        jmp   input              ;
  37.  
  38. exit:  int   20h                ;
  39.  
  40. ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн
  41. prnR:  mov   ah,0Ch             ; атрибут - красный
  42.        mov   word[es:bx],ax     ; пишем АХ в видео/буфер
  43.        add   bx,2               ; сл.позиция в строке..
  44.        ret                      ;
  45. prnG:  mov   ah,0Ah             ; атрибут - зелёный
  46.        mov   word[es:si],ax     ; SI - позиция
  47.        add   si,2               ;
  48.        ret

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.143 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы