Поиск гласных/согласных/спецсимволов - Assembler
Формулировка задачи:
Добрый день! Снова обращаюсь за помощью.
ниже код программы, которая должна в веденной пользователем строки, произвести вывод гласных красным цветом на 10 строку, согласных зеленым на 20ю и посчитать количество спецсимволов. Я начал, но в самой то процедурке сравнения и запутался (сказывается отсутствие опыта программирования в asm). Помогите дописать пожалуйста для процедуру поиска гласных. Так же незнаю как правильно было бы вывести на экран результат. Или отдельно создавать переменную, в которую будут добавляться найденные символы или есть другой способ.
masm model small .data mess1 db 'введите строку: $' str1 db 41,0,41 dup(?) S1 db 'AaEeIiOoUuYy' attr1 db 2 ; green itog1 dw ; незнаю понадобится ли эта переменная S2 db 'BbCcDdFfGgHhJjKkLlMmNnPpQqRrSsTtVvWwXxZz' attr2 db 4 ; red itog2 dw ; незнаю понадобится ли эта переменная S3 db '`~!@#$%^&*()_-+=|\?/<>' attr3 db 1 .code mov dx,offset mess1 mov ah,9 int 21h mov dx,offset str1 mov ah,0Ah int 21h cld mov cl,byte ptr str1+1 ; длинна введенной строки mov si,offset str1+2 ; первый символ введеной строки Glasn: lodsb mov cx, 0Ch ; количество гласных в массиве (12) mov di,offset S1 repnz scasb pop cx cmp al,es:[di-1] jmp PutGls PutGls: ;отображение полученной строки гласных на 10 строке экрана exit: mov ah,8 int 21h mov ax, 4c00h int 21h end prog
Решение задачи: «Поиск гласных/согласных/спецсимволов»
textual
Листинг программы
org 100h jmp start mes1 db 13,10,'String: $' mes2 db 13,10,' Separ: $' leter db 'AEIOUYaeiouy' start: ; mov bx,160*9 ; ВХ указывает на строку(10) mov si,160*19 ; SI - на строку(20) push 0b800h ; ES - видео/сегмент pop es ; mov ax,3 ; режим! int 10h ; mov dx,mes1 ; mov ah,9 ; int 21h ; input: mov ah,1 ; читаем символ.. int 21h ; cmp al,13 ; je exit ; push es ds ; pop es ; mov cx,13 ; mov di,leter ; repne scasb ; ищем его в таблице гласных pop es ; or cx,cx ; переход, если согласная jz @20 ; call prnR ; иначе: выводим символ красным jmp input ; сл.символ.. @20: call prnG ; вывод зелёными jmp input ; exit: int 20h ; ;нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн prnR: mov ah,0Ch ; атрибут - красный mov word[es:bx],ax ; пишем АХ в видео/буфер add bx,2 ; сл.позиция в строке.. ret ; prnG: mov ah,0Ah ; атрибут - зелёный mov word[es:si],ax ; SI - позиция add si,2 ; ret
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д