Поиск гласных/согласных/спецсимволов - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д