Выяснить, есть ли во введённом тексте слова, оканчивающиеся на "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

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

  1. Ввод текста пользователем.
  2. Проверка каждого слова в тексте.
  3. Увеличение счётчика слов, которые оканчиваются на f, если символ соответствует.
  4. Вывод общего количества слов в строке.
  5. Вывод количества слов, оканчивающихся на f.
  6. Завершение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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