Выяснить, есть ли во введённом тексте слова, оканчивающиеся на "f" - Assembler
Формулировка задачи:
Выяснить, есть ли во введённом тексте слова, оканчивающиеся на ‘f’, и сколько
таких слов. (Слова разделяются пробелами.) Необходимо компилировать на emu8086
Спасибо за ранее
Решение задачи: «Выяснить, есть ли во введённом тексте слова, оканчивающиеся на "f"»
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: ', '$' msgWordsCond db 'The number of words in the string, finising with symbol "' Char db 'f' db '": ', '$' CountWords dw ? ;общее количество слов CountWordsCond dw ? ;количество слов, заканчивающихся символом "f" @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 CountWordsCond, 0 jcxz @@Finish ;пропускаем все разделители @@WhileDelimiter: mov al, [si] cmp al, DelimChar jne @@NewWord inc si loop @@WhileDelimiter jcxz @@Finish ;если строка закончилась - выйти ;найдено новое слово @@NewWord: inc CountWords ;увеличиваем счётчик слов на 1 ;пропускаем все буквы слова до разделителя @@WhileWord: mov al, [si] cmp al, DelimChar je @@Break inc si ;переходим к следующему символу loop @@WhileWord @@Break: mov al, [si-1] cmp al, [Char] ;если последняя буква слова равна искомой jne @@Next inc CountWordsCond ;то увеличиваем счётчик @@Next: 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 ;количество слов, завершающихся символом "f" mov ah, 09h lea dx, msgWordsCond int 21h mov ax, CountWordsCond 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
Объяснение кода листинга программы
- Ввод текста пользователем.
- Проверка каждого слова в тексте.
- Увеличение счётчика слов, которые оканчиваются на
f
, если символ соответствует. - Вывод общего количества слов в строке.
- Вывод количества слов, оканчивающихся на
f
. - Завершение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д