Определить сколько слов содержат хотя бы одну букву "В" - Assembler

Узнай цену своей работы

Формулировка задачи:

Ввести строку символов. Группы символов в ней, разделенные пробелом, считаются словами. Определить сколько слов содержат хотя бы одну букву "В"? Исходную строку и количество слов с буквой "В" вывести на экран.

Решение задачи: «Определить сколько слов содержат хотя бы одну букву "В"»

textual
Листинг программы
LOCALS
 
.model small
 
.stack 100h
 
.data
        DelimChar       db      ' '     ;символ, разделитель слов
        String          db      'THE IONIZATION PROBE IS NOT PROTECTED AGAINST ELECTRIC SHOCK HAZARD', '$'
        Len             dw      $-String-1
 
        CrLf            db      0Dh, 0Ah, '$'
        Char            db      'B'     ;искомый символ
        msgSourceString db      'Исходная строка: ', 0Dh, 0Ah, '$'
        msgFoundedWords db      'Слов, содержащих искомый символ: ', '$'
        CountWords      dw      ?       ;количество слов, длиной содержащих хотя бы один раз искомый символ
.code
 
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
        mov     ah,     09h
        lea     dx,     msgSourceString
        int     21h
        mov     ah,     09h
        lea     dx,     String
        int     21h
        mov     ah,     09h
        lea     dx,     CrLf
        int     21h
 
        lea     si,     String
        mov     cx,     Len
        mov     CountWords,     0
        ;пропускаем все разделители
@@WhileDelimiter:
        mov     al,     [si]
        cmp     al,     DelimChar
        jne     @@NewWord
        inc     si
        loop    @@WhileDelimiter
 
        jcxz    @@Finish        ;если строка закончилась - выйти
        ;найдено новое слово
@@NewWord:
        mov     dx,     0       ;количество искомых символов в очередном слове пока равно 0
        ;пропускаем все буквы слова до разделителя
@@WhileWord:
        mov     al,     [si]
        cmp     al,     DelimChar
        je      @@Break
        cmp     al,     Char
        jne     @@Skip
        inc     dx              ;выставляем признак присутствия искомой буквы в слове
@@Skip:
        inc     si              ;переходим к следующему символу
        loop    @@WhileWord
@@Break:
        cmp     dx,     0       ;в слове присутствовала искомая буква?
        je      @@SkipIncrement
        inc     CountWords      ;увеличиваем счётчик слов на 1
@@SkipIncrement:
        jcxz    @@Finish
        jmp     @@WhileDelimiter
 
@@Finish:
 
        ;вывод результатов
        ;общее количество слов в строке
        mov     ah,     09h
        lea     dx,     msgFoundedWords
        int     21h
        mov     ax,     CountWords
        call    OutInt
        mov     ah,     09h
        lea     dx,     CrLf
        int     21h
 
        ;завершение программы
        mov     ax,     4C00h
        int     21h
main    endp
 
;вывод числа в диапазоне 0...99 на экран
;на входе
; ax - выводимое число
OutInt proc
        push    ax
        push    dx
        aam
        add     ax,     '00'
        mov     dl,     ah
        mov     dh,     al
        mov     ah,     02
        int     21h
        mov     dl,     dh
        int     21h
        pop     dx
        pop     ax
        ret
OutInt endp
 
end     main

Объяснение кода листинга программы

  1. Объявление и инициализация переменных
    • DelimChar (символ, разделитель слов) - значение: пробел ' '
    • String (строка для обработки) - значение: текст
    • Len (длина строки) - значение: длина указанной строки
    • CrLf (переменная для перехода на новую строку) - значение: 0Dh, 0Ah, '$'
    • Char (искомый символ) - значение: 'B'
    • msgSourceString (сообщение Исходная строка) - значение: 'Исходная строка: ', 0Dh, 0Ah, '$'
    • msgFoundedWords (сообщение Слов, содержащих искомый символ) - значение: 'Слов, содержащих искомый символ: ', '$'
    • CountWords (количество слов, содержащих искомый символ) - значение: не инициализировано
  2. Основная логика программы
    • Вывод исходной строки на экран
    • Подсчёт слов, содержащих по крайней мере один раз искомый символ
    • Вывод количества найденных слов на экран
  3. Завершение программы
    • Завершение программы
  4. Процедура OutInt для вывода числа в диапазоне 0...99 на экран
    • Вывод числа на экран Программа принимает строку, ищет слова, содержащие искомый символ и выводит количество найденных слов.

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

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