По заданию должно вывести кол-во слов имеющие гласную букву посередине слова у меня в итоге в ebx 0 хотя слова 2 с гласной в центре помогите что не так
INCLUDE Irvine32.inc
.data
strInput 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