Определить сколько слов содержат хотя бы одну букву "В" - Assembler

Узнай цену своей работы

Формулировка задачи:

Ввести строку символов. Группы символов в ней, разделенные пробелом, считаются словами. Определить сколько слов содержат хотя бы одну букву "В"? Исходную строку и количество слов с буквой "В" вывести на экран.

Решение задачи: «Определить сколько слов содержат хотя бы одну букву "В"»

textual
Листинг программы
  1. LOCALS
  2.  
  3. .model small
  4.  
  5. .stack 100h
  6.  
  7. .data
  8.         DelimChar       db      ' '     ;символ, разделитель слов
  9.         String          db      'THE IONIZATION PROBE IS NOT PROTECTED AGAINST ELECTRIC SHOCK HAZARD', '$'
  10.         Len             dw      $-String-1
  11.  
  12.         CrLf            db      0Dh, 0Ah, '$'
  13.         Char            db      'B'     ;искомый символ
  14.         msgSourceString db      'Исходная строка: ', 0Dh, 0Ah, '$'
  15.         msgFoundedWords db      'Слов, содержащих искомый символ: ', '$'
  16.         CountWords      dw      ?       ;количество слов, длиной содержащих хотя бы один раз искомый символ
  17. .code
  18.  
  19. main    proc
  20.         mov     ax,     @data
  21.         mov     ds,     ax
  22.  
  23.         mov     ah,     09h
  24.         lea     dx,     msgSourceString
  25.         int     21h
  26.         mov     ah,     09h
  27.         lea     dx,     String
  28.         int     21h
  29.         mov     ah,     09h
  30.         lea     dx,     CrLf
  31.         int     21h
  32.  
  33.         lea     si,     String
  34.         mov     cx,     Len
  35.         mov     CountWords,     0
  36.         ;пропускаем все разделители
  37. @@WhileDelimiter:
  38.         mov     al,     [si]
  39.         cmp     al,     DelimChar
  40.         jne     @@NewWord
  41.         inc     si
  42.         loop    @@WhileDelimiter
  43.  
  44.         jcxz    @@Finish        ;если строка закончилась - выйти
  45.         ;найдено новое слово
  46. @@NewWord:
  47.         mov     dx,     0       ;количество искомых символов в очередном слове пока равно 0
  48.         ;пропускаем все буквы слова до разделителя
  49. @@WhileWord:
  50.         mov     al,     [si]
  51.         cmp     al,     DelimChar
  52.         je      @@Break
  53.         cmp     al,     Char
  54.         jne     @@Skip
  55.         inc     dx              ;выставляем признак присутствия искомой буквы в слове
  56. @@Skip:
  57.         inc     si              ;переходим к следующему символу
  58.         loop    @@WhileWord
  59. @@Break:
  60.         cmp     dx,     0       слове присутствовала искомая буква?
  61.         je      @@SkipIncrement
  62.         inc     CountWords      ;увеличиваем счётчик слов на 1
  63. @@SkipIncrement:
  64.         jcxz    @@Finish
  65.         jmp     @@WhileDelimiter
  66.  
  67. @@Finish:
  68.  
  69.         ;вывод результатов
  70.         ;общее количество слов в строке
  71.         mov     ah,     09h
  72.         lea     dx,     msgFoundedWords
  73.         int     21h
  74.         mov     ax,     CountWords
  75.         call    OutInt
  76.         mov     ah,     09h
  77.         lea     dx,     CrLf
  78.         int     21h
  79.  
  80.         ;завершение программы
  81.         mov     ax,     4C00h
  82.         int     21h
  83. main    endp
  84.  
  85. ;вывод числа в диапазоне 0...99 на экран
  86. ;на входе
  87. ; ax - выводимое число
  88. OutInt proc
  89.         push    ax
  90.         push    dx
  91.         aam
  92.         add     ax,     '00'
  93.         mov     dl,     ah
  94.         mov     dh,     al
  95.         mov     ah,     02
  96.         int     21h
  97.         mov     dl,     dh
  98.         int     21h
  99.         pop     dx
  100.         pop     ax
  101.         ret
  102. OutInt endp
  103.  
  104. end     main

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

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

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


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

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

8   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы