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

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


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

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

14   голосов , оценка 4.143 из 5
Похожие ответы