Среди нескольких слов найти начинающееся с буквы "b" - Assembler/FASM

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

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

Найдите какое-нибудь слово, которое начинается на букву «b». Заранее спасибо

Решение задачи: «Среди нескольких слов найти начинающееся с буквы "b"»

textual
Листинг программы
org     100h
        mov     ah,9
        mov     dx,dbInp
        int     21h
        mov     ah,10
        mov     dx,dbMax
        int     21h
;
        mov     di,dbLen
        mov     al,' '
        mov     cl,[di]
        mov     [di],al
        xor     ch,ch
        cld
@@00:   repne   scasb
        jcxz    @@02
        cmp     byte[di],'b'
        jnz     @@00
;
        mov     ah,9
        mov     dx,dbRes
        int     21h
        mov     si,di
@@01:   lodsb
        cmp     al,' '
        jbe      @@03
        int     29h
        loop    @@01
@@02:   mov     ah,9
        mov     dx,dbNot
        int     21h
@@03:   ret
dbInp   db      10,13,'Enter string:$'
dbNot   db      10,13,'Error - this word not found$'
dbRes   db      10,13,'Result:$'
dbMax   db      200
dbLen   db      ?
dbStr   db      200 dup(?)

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

Список действий, которые выполняются в коде:

  1. org 100h — начало выполнения программы
  2. mov ah,9 — подготовка к выводу сообщения на экран
  3. mov dx,dbInp — определение адреса строки для ввода
  4. int 21h — выполнение функции ввода строки
  5. mov ah,10 — подготовка к выводу сообщения на экран
  6. mov dx,dbMax — определение адреса строки для вывода максимального значения
  7. int 21h — выполнение функции вывода на экран
  8. mov di,dbLen — определение индекса для хранения длины строки
  9. mov al,' ' — подготовка к сравнению символов
  10. mov cl,[di] — сравнение первого символа строки с искомым
  11. mov [di],al — обновление первого символа строки
  12. xor ch,ch — обнуление регистра ch
  13. cld — установка направления переходов на прямую
  14. repne scasb — поиск следующего символа 'b' в строке
  15. jcxz @@02 — если длина строки равна 0, то перейти к пункту 26
  16. cmp byte[di],'b' — сравнение текущего символа с искомым
  17. jnz @@00 — если текущий символ не равен 'b', то перейти к пункту 10
  18. mov ah,9 — подготовка к выводу сообщения на экран
  19. mov dx,dbRes — определение адреса строки для вывода результата
  20. int 21h — выполнение функции вывода на экран
  21. mov si,di — определение индекса для хранения начала найденного слова
  22. lodsb — загрузка очередного байта из строки в регистр al
  23. cmp al,' ' — сравнение текущего символа с пробелом
  24. jbe @@03 — если текущий символ является пробелом, то перейти к пункту 29
  25. int 29h — вывод найденного слова на экран
  26. loop @@01 — повторение цикла до тех пор, пока не будет найден символ пробела
  27. mov ah,9 — подготовка к выводу сообщения на экран
  28. mov dx,dbNot — определение адреса строки для вывода сообщения об ошибке
  29. int 21h — выполнение функции вывода на экран
  30. ret — завершение программы Значения переменных:
    • dbInp — адрес строки для ввода (10,13,'Enter string:$')
    • dbNot — адрес строки для вывода сообщения об ошибке (10,13,'Error - this word not found$')
    • dbRes — адрес строки для вывода результата (10,13,'Result:$')
    • dbMax — максимальное значение длины строки (200)
    • dbLen — длина строки, введенной пользователем (не определена)
    • dbStr — адрес строки для хранения введенной пользователем строки (200 байт, начиная с 0)

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


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

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

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