Среди нескольких слов найти начинающееся с буквы "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(?)
Объяснение кода листинга программы
Список действий, которые выполняются в коде:
- 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 — обнуление регистра ch
- cld — установка направления переходов на прямую
- repne scasb — поиск следующего символа 'b' в строке
- jcxz @@02 — если длина строки равна 0, то перейти к пункту 26
- cmp byte[di],'b' — сравнение текущего символа с искомым
- jnz @@00 — если текущий символ не равен 'b', то перейти к пункту 10
- mov ah,9 — подготовка к выводу сообщения на экран
- mov dx,dbRes — определение адреса строки для вывода результата
- int 21h — выполнение функции вывода на экран
- mov si,di — определение индекса для хранения начала найденного слова
- lodsb — загрузка очередного байта из строки в регистр al
- cmp al,' ' — сравнение текущего символа с пробелом
- jbe @@03 — если текущий символ является пробелом, то перейти к пункту 29
- int 29h — вывод найденного слова на экран
- loop @@01 — повторение цикла до тех пор, пока не будет найден символ пробела
- mov ah,9 — подготовка к выводу сообщения на экран
- mov dx,dbNot — определение адреса строки для вывода сообщения об ошибке
- int 21h — выполнение функции вывода на экран
- ret — завершение программы
Значения переменных:
- dbInp — адрес строки для ввода (10,13,'Enter string:$')
- dbNot — адрес строки для вывода сообщения об ошибке (10,13,'Error - this word not found$')
- dbRes — адрес строки для вывода результата (10,13,'Result:$')
- dbMax — максимальное значение длины строки (200)
- dbLen — длина строки, введенной пользователем (не определена)
- dbStr — адрес строки для хранения введенной пользователем строки (200 байт, начиная с 0)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д