BYTE "Hom chell",0
vowels BYTE "aeiouAEIOU",0
count DWORD ?
.code
main PROC
mov esi, OFFSET strInput ; Указывает esi на начало строки
xor ebx, ebx ; Обнуляет счетчик слов
xor ecx, ecx ; Обнуляет счетчик гласных
checkNextChar:
mov al, BYTE PTR [esi] ; Загружает байт из памяти
cmp al, 0 ; Проверяет, достигнут ли конец строки
je done ; Если да, завершает выполнение
cmp al, ' ' ; Сравнивает с пробелом
je spaceFound ; Если текущий символ - пробел, переходит к обработке пробела
mov edx, OFFSET vowels ; Указывает edx на начало гласных
mov ecx, 5 ; Загружает количество гласных
checkVowels:
mov ah, BYTE PTR [edx] ; Загружает байт из памяти
cmp al, ah ; Сравнивает текущий символ с гласной
je vowelFound ; Если символы совпадают, переходит к обработке гласной
inc edx ; Перемещается к следующей гласной
loop checkVowels ; Переходит к проверке следующей гласной
inc esi ; Перемещается к следующему символу
jmp checkNextChar ; Переходит к следующему символу
spaceFound:
test ecx, ecx ; Проверяет, содержится ли гласная буква в слове
jnz incrementCount ; Если да, увеличивает счетчик слов
xor ecx, ecx ; Иначе сбрасывает счетчик гласных
jmp processSpace ; Обрабатывает следующее слово
vowelFound:
inc ecx ; Увеличивает счетчик гласных
inc esi ; Перемещается к следующему символу
jmp checkNextChar ; Переходит к следующему символу
incrementCount:
inc ebx ; Увеличивает счетчик слов
xor ecx, ecx ; Сбрасывает счетчик гласных
processSpace:
inc esi ; Переходит к следующему символу после пробела
jmp checkNextChar ; Переходит к следующему символу
done:
mov count, ebx ; Сохраняет результат в count
call DumpRegs ; Выводит содержимое регистров
exit
main ENDP
END main
Не работает код, что не так?
По заданию должно вывести кол-во слов, имеющих гласную букву посередине слова, у меня в итоге в ebx 0, хотя слова 2 с гласной в центре, помогите, что не так.
Узнаю почерк гпт
Чего ты познаешь?
Обсуждают сегодня