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