Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2008, 17:18   #1
FireHawK
 
Регистрация: 22.11.2008
Сообщений: 4
По умолчанию подсчитать кол-во гласных

Привет. делаю одну задачу и вот столкнулся с проблемой.
И так что у меня имеется (я привожу только нужные куски кода)
У меня дано слово или предложение.
И массив куда я записал различные буквы, т.е. ввел:mama, в массиве получился такой набор - ma**. Теперь мне надо подсчитать сколько гласных различных. Поэтому я беру каждый элемент массива и сравниваю с символами строки Glasn. Но чтото некорректно он делает это, если mama - то кол-во гласных равно 0. если вводил строку ai, то кол-во =2 , а если ia , то = 1.
Может я не знаю каких то тонкостей )

Код:
в сегменте данных:
BUKVI DB 33 DUP(2aH)
SumG DB 0
Glasn DB 'aeiouy$'
NAMEPAR LABEL BYTE  ; список параметров
MAXLEN    DB   49
ACTLEN	  DB   ?
NAMEFLD	  DB  50 DUP(?) ;введенная строка
.....
; --- подсчет гласных
        MOV AX,0
        MOV BX,0
        MOV CX,0
        MOV CL,ACTLEN
        MOV SI,0
        LEA DI,GLASN
        CLD
        
CC:     MOV AL,BUKVI[SI]
        PUSH CX
        MOV CX,6

        REPNE SCASB
        JNZ A1 
        INC SUMG
 A1:    
        POP CX
        INC SI         
        LOOP CC

     ; вывод количества
        MOV DX,0500H
        CALL CURSOR
        MOV BX,0
        MOV BL,SUMG
        CALL VYVOD

....
FireHawK вне форума Ответить с цитированием
Старый 22.11.2008, 18:56   #2
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Цитата:
После каждой итерации цепочечная команда автоматически осуществляет инкремент-декремент значения адреса в соответствующих индексных регистрах. Поэтому после выхода из цикла в этих регистрах будут находиться адреса элементов, находящихся в цепочке после элементов, послуживших причиной выхода из цикла.
Т.е. вам перед поиском каждого следующего символа надо устанавливать di на начало строки с гласными.

Код:
CC:     MOV AL,BUKVI[SI]
        PUSH CX
        MOV CX,6
	CLD
	LEA di,GLASN
        REPNE SCASB
        JNZ A1 
        INC SUMG
A1:    
        POP CX
        INC SI         
        LOOP CC
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 22.11.2008, 19:22   #3
FireHawK
 
Регистрация: 22.11.2008
Сообщений: 4
По умолчанию

Спасибо! точно! он же у меня меняется при поиске. Работает теперь
FireHawK вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление гласных, согласных, цифровых символов в строке <zeroql> Паскаль, Turbo Pascal, PascalABC.NET 9 27.11.2008 08:05
Подсчитать количества знака в числе valerij Microsoft Office Excel 5 17.08.2008 16:52
Как подсчитать все значения в колоне aesoem БД в Delphi 5 03.07.2008 15:50
Найти и вывести все слова,у котоpых число гласных букв пpевышает число согласных. Briz Помощь студентам 2 11.05.2008 00:56
Подсчитать сумму! Deman4eg Microsoft Office Excel 2 02.04.2008 09:16