Поиск гласных/согласных/спецсимволов - 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