В тексте, состоящая из слов, разделенных пробелами, найти слова, начинающиеся на "к" - Assembler
Формулировка задачи:
дано текст состоящая из слов разделенных пробелами, найти слова начинающиеся на "к" , плииз помогите!! На ассемблере, и если не сложно можно с обьяснениями кодов) спасибо большое
Решение задачи: «В тексте, состоящая из слов, разделенных пробелами, найти слова, начинающиеся на "к"»
textual
Листинг программы
- push ds
- pop es
- lea di,text
- mov cx,len
- cyc:
- mov al,' '
- repne scasb
- jne exit
- mov si,di
- lodsb
- dec cx
- cmp al,'k'
- jz showk
- mov di,si
- inc cx
- loop cyc
- showk:
- int 29h
- load:
- or cx,cx
- jz exit
- lodsb
- dec cx
- cmp al,' '
- jz space
- int 29h
- jmp load
- space:
- dec si
- mov di,si
- add cx,2
- mov ah,02h
- mov dl,' '
- int 21h
- loop cyc
Объяснение кода листинга программы
Выполняемый код на ассемблере:
- push ds; pop es; — откладывает в стек используемые сегменты (ds, es) и восстанавливает сегмент данных
- lea di, text; mov cx, len; — инициализирует индекс (di) и счётчик (cx) для цикла по тексту
- mov al, ' '; repne scasb; jne exit; — подготавливает переменную (al) для сравнения со следующим символом текста, и если символ не равен пробелу, то продолжает цикл
- mov si, di; lodsb; dec cx; cmp al, 'k'; jz showk; — переносит индекс (si) в начало цикла, загружает символ в (al), уменьшает счётчик (cx) на единицу и проверяет, является ли текущий символ 'k'. Если это так, то переходит к выводу найденных слов
- mov di, si; inc cx; loop cyc; — продолжает цикл до тех пор, пока не будет найден 'k'
- int 29h; — выводит найденное слово, используя BIOS-интерфейс (int 29h)
- or cx, cx; jz exit; — проверяет, осталось ли ещё слова для вывода. Если счётчик (cx) равен нулю, то переходит к завершению работы программы
- lodsb; dec cx; cmp al, ' '; jz space; int 29h; jmp load; — продолжает цикл до тех пор, пока не будет найден пробел, затем выводит слово и переходит к поиску следующего слова
- dec si; mov di, si; add cx, 2; — уменьшает индекс (si) на единицу, сохраняет индекс в (di), увеличивает счётчик (cx) на два и переходит к выводу следующего слова
- mov ah, 02h; mov dl, ' '; int 21h; — использует BIOS-интерфейс для вывода пробела
- loop cyc; — переходит к началу цикла
- jmp load; — если был найден пробел, то переходит к поиску следующего слова
- space: dec si; mov di, si; int 29h; — уменьшает индекс (si) на единицу и переходит к выводу предыдущего слова
- exit: — выход из программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д