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

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

  1. Ввод текста осуществляется через последовательность символов, которая отделяет слова друг от друга.
  2. Переменная CountWords используется для подсчета общего количества слов в строке.
  3. Переменная CountWordsA используется для подсчета количества слов, начинающихся с буквы A.
  4. Для пропуска разделителей используется цикл while, который выполняется до тех пор, пока не будет найден новый слово.
  5. Для пропуска букв слова до разделителя также используется цикл while.
  6. Функция OutInt используется для вывода чисел в диапазоне от 0 до 99 на экран.
  7. Для вывода результатов используется функция int 21h, которая выводит символы на экран.
  8. Программа завершается после вывода результатов.

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


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

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

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