@wefd

Не работает код, что не так?

По заданию должно вывести кол-во слов имеющие гласную букву посередине слова у меня в итоге в 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
  • Вопрос задан
  • 131 просмотр
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
что не так
mov ecx, 5 ; Загружает количество гласных

inc ecx ; Увеличивает счетчик гласных

loop checkVowels ; Переходит к проверке следующей гласной

test ecx, ecx ; Проверяет, содержится ли гласная буква в слове

ты используешь ecx для двух разных целей, и, похоже, не догадываешься об этом. Из цикла поиска гласных ecx выходит со значением 0 если последняя буква слова -- не гласная.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы