Выяснить, есть ли во введённом тексте слова, начинающиеся с буквы "А", и сколько таких слов - Assembler
Формулировка задачи:
всем привет. Буду благодарна если поможете решить задачу
нужно выяснить, есть ли во введённом тексте слова, начинающиеся с буквы А, и сколько
таких слов на emu8086
Решение задачи: «Выяснить, есть ли во введённом тексте слова, начинающиеся с буквы "А", и сколько таких слов»
textual
Листинг программы
@stack segment para stack db 1024 dup(?) @stack ends @data segment DelimChar db ' ' ;символ, разделитель слов String db 80, ?, 81 dup(?) CrLf db 0Dh, 0Ah, '$' Prompt db 'Enter the string:', 0Dh, 0Ah, '$' msgTotalWords db 'The total number of words in the string: ', '$' msgWordsA db 'The number of words in the string, starting with symbol "' Char db 'A' db '": ', '$' CountWords dw ? ;общее количество слов CountWordsA dw ? ;количество слов, начинающихся с символа "A" @data ends @code segment assume cs:@code, ds:@data, ss:@stack main proc mov ax, @data mov ds, ax mov ah, 09h lea dx, Prompt int 21h mov ah, 0Ah lea dx, String int 21h mov ah, 09h lea dx, CrLf int 21h lea si, String+2 mov cx, 0 mov cl, String+1 mov CountWords, 0 mov CountWordsA, 0 jcxz @@Finish ;пропускаем все разделители @@WhileDelimiter: mov al, [si] cmp al, DelimChar jne @@NewWord inc si loop @@WhileDelimiter jcxz @@Finish ;если строка закончилась - выйти ;найдено новое слово @@NewWord: inc CountWords ;увеличиваем счётчик слов на 1 cmp al, [Char] ;если первая буква слова равна искомой jne @@WhileWord inc CountWordsA ;то увеличиваем счётчик ;пропускаем все буквы слова до разделителя @@WhileWord: mov al, [si] cmp al, DelimChar je @@Break inc si ;переходим к следующему символу loop @@WhileWord @@Break: jcxz @@Finish jmp @@WhileDelimiter @@Finish: ;вывод результатов ;общее количество слов в строке mov ah, 09h lea dx, msgTotalWords int 21h mov ax, CountWords call OutInt mov ah, 09h lea dx, CrLf int 21h ;количество слов, начинающихся с символа "A" mov ah, 09h lea dx, msgWordsA int 21h mov ax, CountWordsA 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 @code ends end main
Объяснение кода листинга программы
- Ввод текста осуществляется через последовательность символов, которая отделяет слова друг от друга.
- Переменная
CountWords
используется для подсчета общего количества слов в строке. - Переменная
CountWordsA
используется для подсчета количества слов, начинающихся с буквыA
. - Для пропуска разделителей используется цикл
while
, который выполняется до тех пор, пока не будет найден новый слово. - Для пропуска букв слова до разделителя также используется цикл
while
. - Функция
OutInt
используется для вывода чисел в диапазоне от 0 до 99 на экран. - Для вывода результатов используется функция
int 21h
, которая выводит символы на экран. - Программа завершается после вывода результатов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д